Soek Kode

MPU-9250-versnellingsmeter, gyroskoop en magnetometer-kode

MPU-9250-versnellingsmeter, gyroskoop en magnetometer-kode

In hierdie tutoriaal gaan ons ondersoek hoe om die MPU-9250-sensor te gebruik, wat 'n versnellingsmeter, gyroskoop en magnetometer in een kompakte module kombineer. Teen die einde van hierdie gids sal jy sensordata kan lees en die betekenis daarvan in jou projekte kan interpreteer. Hierdie sensor is veral nuttig vir toepassings soos robotika en hommeltuie, waar oriëntasie- en bewegingsopsporing van kritieke belang is. Jy kan na die video verwys vir addisionele verduideliking oor die opstelling en kode (in video by 00:20).

ELE_MPU6050_208
ELE_MPU6050_208

Hardeware Verduidelik

Die MPU-9250-module integreer drie sensors: 'n versnellingsmeter, 'n gyroskoop en 'n magnetometer. Die versnellingsmeter meet versnellingskragte, wat jou toelaat om die spoed en oriëntasie te bepaal. Die gyroskoop verskaf hoeksnelheid, wat jou help om die oriëntasieverandering oor tyd te verstaan. Laastens dien die magnetometer as 'n kompas, wat magnetiese velddata verskaf wat help met navigasie.

Hierdie kombinasie van sensors is veral voordelig in toepassings waar presiese bewegingsopsporing vereis word, soos in hommeltuie of slimfone. Die MPU-9250 kommunikeer via I2C of SPI, wat dit veelsydig maak vir verskillende mikrobeheerderopstellings.

Datablad Besonderhede

Vervaardiger InvenSense
Deelnommer MPU-9250
Logika/IO-spanning 1.8 V (I/O), 3.3 V (toevoer)
Toevoerspanning 2.4 - 3.6 V
Uitsetstroom (per kanaal) 3.2 mA (normale werking)
Piekstroom (per kanaal) 19.8 mA (maks)
PWM-frekwensie riglyn N/A
Inset logika drempels 0.3 * VDD (laag), 0.7 * VDD (hoog)
Spanningval / RDS(on) / versadiging N/A
Termiese limiete -40 tot 85 °C
Pakket QFN
Notas / variante Sluit interne spanningsreguleerder in
  • Verseker behoorlike spanningtoevoer (2.4 - 3.6 V) om skade aan die module te vermy.
  • Gebruik 'n optrekweerstand vir SDA- en SCL-lyne as dit nie reeds op jou breekbord ingesluit is nie.
  • Verifieer die I2C-adres (verstek is 0x68) en pas die ADO-pen dienooreenkomstig aan vir alternatiewe adresse.
  • Kontroleer verbindings vir stabiliteit om foutiewe lesings te voorkom.
  • Kalibreer sensors gereeld vir akkurate metings.

Bedradingsinstruksies

Arduino bedrading vir MPU6050 met A4 en A4 vir SDA en SCL
Arduino bedrading vir MPU6050 met A4 en A4 vir SDA en SCL
Arduino Wiring for MPU-6050
Arduino Wiring for MPU-6050
Arduino wiring for  MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for MPU6050 using A4 and A4 for SDA and SCL

Om die MPU-9250 aan jou Arduino te bedraad, begin deur die VCC-pen op die MPU-9250 aan die 5V-pen op die Arduino te koppel. Die module het 'n interne reguleerder, so dit is veilig om dit met 5V te krag. Koppel volgende die GND-pen aan die grond (GND) op die Arduino. Vir datakommunikasie, koppel die SDA-pen aan die A4-pen op die Arduino en die SCL-pen aan die A5-pen. Hierdie konfigurasie is standaard vir baie Arduino-borde.

As jy 'n Arduino Mega gebruik, is die SDA- en SCL-penne by penne 20 en 21, onderskeidelik. Verseker dat die verbindings veilig is om enige kommunikasiefoute te vermy. As jy die I2C-adres van die MPU-9250 moet verander, koppel die ADO-pen aan 5V om dit na 0x69 te stel. Deur dit te ontkoppel, sal dit terugkeer na 0x68.

Arduino skematiese vir MPU6050 met A4 en A4 vir SDA en SCL
Arduino skematiese vir MPU6050 met A4 en A4 vir SDA en SCL

Kode Voorbeelde & Deurloop

In die Arduino-skets begin ons deur die MPU9250-biblioteek in te sluit en 'n instansie van die sensor te skep:

#include "MPU9250.h"
MPU9250 IMU(Wire,0x68);

Die kode initialiseer die sensor en begin kommunikasie in die setup()-funksie:

void setup() {
  Serial.begin(115200);
  status = IMU.begin();
  if (status < 0) {
    Serial.println("IMU-inisialisering onsuksesvol");
    while(1) {}
  }
}

Binne die loop()-funksie lees en druk ons voortdurend die sensordata:

void loop() {
  IMU.readSensor();
  Serial.print("AccelX: ");
  Serial.print(IMU.getAccelX_mss(),6);
  // Meer drukstate vir ander asse
}

Hierdie afdeling lees die versnellingsmeter-, gyroskoop- en magnetometerwaardes en vertoon dit in die Serial Monitor. Maak seker dat jy die volledige kode wat onder die artikel gelaai is, nagaan vir die volledige implementering.

Demonstrasie / Wat om te VerwAg

Wanneer jy die kode uitvoer, behoort jy die sensorwaardes in reële tyd op die Serial Monitor te sien opdateer. Die versnellingsmeterwaardes sal fluktueer soos jy die sensor beweeg, terwyl die gyroskoopwaardes die rotasietempo sal toon. Die magnetometer sal jou die magnetiese veldsterkte in drie asse gee, wat gebruik kan word om oriëntasie te bepaal. Wees versigtig met drywende insette, aangesien dit tot onakkurate lesings kan lei (in video by 12:30).

Hoofstukke

  • Inleiding (00:00)
  • Hardware verduidelik (01:30)
  • Bedradingsinstruksies (04:00)
  • Kodevoorbeelde & deurloop (06:00)
  • Demonstrasie (10:00)

Beelde

ELE_MPU6050_208
ELE_MPU6050_208
Arduino Wiring for MPU-6050
Arduino Wiring for MPU-6050
Arduino Schematic for  MPU6050 using A4 and A4 for SDA and SCL
Arduino Schematic for MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for  MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for MPU6050 using A4 and A4 for SDA and SCL
126-Arduino code for an MPU-9250 accelerometer, gyroscope, and magnetometer
Taal: C++
/*
 * Library: https://github.com/bolderflight/MPU9250
Basic_I2C.ino
Brian R Taylor
brian.taylor@bolderflight.com

Copyright (c) 2017 Bolder Flight Systems

Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
and associated documentation files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, publish, distribute, 
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or 
substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
 * Updated by Ahmad Shamshiri on July 9, 2018 for Robojax.com
 * in Ajax, Ontario, Canada
 * Watch instruction video for this code: 
For this sketch you need to connect:
VCC to 5V and GND to GND of Arduino
SDA to A4 and SCL to A5

S20A is 3.3V voltage regulator MIC5205-3.3BM5
*/

#include "MPU9250.h"

// An MPU9250 object with the MPU-9250 sensor on I2C bus 0 with address 0x68
MPU9250 IMU(Wire,0x68);
int status;

void setup() {
  // Serial to display data
  Serial.begin(115200);
  while(!Serial) {}

  // Start communication with IMU 
  status = IMU.begin();
  if (status < 0) {
    Serial.println("IMU initialization unsuccessful");
    Serial.println("Check IMU wiring or try cycling power");
    Serial.print("Status: ");
    Serial.println(status);
    while(1) {}
  }
}

void loop() {
  // Read the sensor
  IMU.readSensor();
  // Display the data
  Serial.print("AccelX: ");
  Serial.print(IMU.getAccelX_mss(),6);
  Serial.print("\t");
  Serial.print("AccelY: ");  
  Serial.print(IMU.getAccelY_mss(),6);
  Serial.print("\t");
  Serial.print("AccelZ: ");  
  Serial.println(IMU.getAccelZ_mss(),6);
  
  Serial.print("GyroX: ");
  Serial.print(IMU.getGyroX_rads(),6);
  Serial.print("\t");
  Serial.print("GyroY: ");  
  Serial.print(IMU.getGyroY_rads(),6);
  Serial.print("\t");
  Serial.print("GyroZ: ");  
  Serial.println(IMU.getGyroZ_rads(),6);

  Serial.print("MagX: ");  
  Serial.print(IMU.getMagX_uT(),6);
  Serial.print("\t");  
  Serial.print("MagY: ");
  Serial.print(IMU.getMagY_uT(),6);
  Serial.print("\t");
  Serial.print("MagZ: ");  
  Serial.println(IMU.getMagZ_uT(),6);
  
  Serial.print("Temperature in C: ");
  Serial.println(IMU.getTemperature_C(),6);
  Serial.println();
  delay(200);
}

Hulpbronne en verwysings

Lêers📁

Geen lêers beskikbaar.