Kako koristiti MPU9250 IMU senzor sa Arduinom

  • MPU9250 kombinuje akcelerometar, žiroskop i magnetometar u jednom modulu.
  • Lako komunicira sa Arduinom koristeći I2C protokol za tačna očitavanja.
  • Kalibracija magnetometra je ključna za uklanjanje magnetskih grešaka i poboljšanje tačnosti.
  • Filteri kao što je komplementarni filter mogu poboljšati preciznost i eliminirati zanošenje.

mpu9250

Svijet inercijalnih senzora se brzo razvijao, a uređaji poput MPU9250, koji kombinira akcelerometar, žiroskop i magnetometar u jednom modulu, postali su ključni dio za projekte robotike, dronove i sisteme koji zahtijevaju precizno snimanje malih i velikih pokreta. U ovom članku ćemo istražiti kako koristiti ovaj senzor sa Arduinom, koje su njegove značajne karakteristike, kao i neke primjere koda za početak rada s njim.

Korištenje MPU9250 nije korisno samo za hobiste, već i za profesionalce koji trebaju precizno izmjeriti orijentaciju i kretanje. Ovo rešenje omogućava razvoj sistema stabilizacije, autonomnih vozila i robota koji zahtevaju poznavanje njihovog kretanja u različitim osovinama. Svestranost senzora, zajedno sa njegovom preciznošću i niskom cijenom, stekla mu je solidnu reputaciju među programerima.

Šta je MPU9250?

MPU9250 je modul koji integriše akcelerometar , žiroskop i magnetometar u jedan uređaj. Ova kombinacija omogućava senzoru da mjeri linearno ubrzanje, ugaonu brzinu i magnetsko polje svoje okoline. Ovaj Invensense senzor ima 9 stepeni slobode, što znači da može mjeriti ubrzanje, rotaciju (žiroskop) i magnetsko polje (magnetometar) duž tri različite ose, omogućavajući izračunavanje potpune orijentacije uređaja.

Modul je dizajniran za komunikaciju putem SPI ili I2C , što omogućava jednostavno povezivanje s platformama otvorenog koda kao što su Arduino ili Raspberry Pi. Nadalje, zahvaljujući svom digitalnom procesoru kretanja (DMP) , može izvoditi složene proračune kako bi spojio podatke dobivene iz tri senzora i pružio preciznija mjerenja.

Glavne karakteristike MPU9250

MPU9250 se ističe po velikom broju karakteristika koje ga čine vrlo zanimljivim modulom za projekte koji zahtijevaju snimanje preciznih pokreta, među kojima su:

  • Akcelerometar: Podesivi raspon ubrzanja između ±2g, ±4g, ±8g i ±16g.
  • Žiroskop: Programabilni opseg od ±250°/s, ±500°/s, ±1000°/s, ±2000°/s.
  • Magnetometar: Osetljivost od 0.6µT/LSB i programabilni opseg do 4800µT.
  • Potrošnja energije: Vrlo niska, idealna za prijenosne uređaje ili uređaje koji zahtijevaju rad tokom dugog perioda (3.5 mA u aktivnom načinu rada).

Povezivanje MPU9250 modula sa Arduinom

mpu9250 arduino

Povezivanje modula na vaš Arduino je jednostavna procedura zahvaljujući činjenici da radi preko I2C protokola. On tipičan dijagram povezivanja između MPU9250 i a Arduino Uno je:

  • VCC: Povezivanje na 3.3V.
  • GND: Na masu (GND).
  • prirodni resursi: Povežite ga na pin A4 Arduina.
  • SCL: Povežite ga na pin A5 Arduina.

Važno je osigurati da je napajanje ispravno kako bi senzor mogao ispravno funkcionirati. Većina modula već ima regulator napona kako bi mogao koristiti 5V Arduina bez oštećenja.

Primjeri kodova za MPU9250

U nastavku vam pokazujemo kako možete započeti programiranje MPU9250 u Arduinu, čitajući podatke sa akcelerometra, žiroskopa i magnetometra. Biblioteku MPU9250.h Vrlo je korisno olakšati programiranje, a u našem primjeru detaljno opisujemo kako čitati neobrađene podatke:

#include <Wire.h>
#include <MPU9250.h>
MPU9250 imu(Wire, 0x68);

void setup() {
    Wire.begin();
    Serial.begin(115200);
    if (imu.begin() != 0) {
        Serial.println("Error al iniciar MPU9250");
    } else {
        Serial.println("MPU9250 iniciado");
    }
}

void loop() {
    imu.readSensor();
    Serial.print("Aceleracion: ");
    Serial.print(imu.getAccelX_mss());
    Serial.print(", ");
    Serial.print(imu.getAccelY_mss());
    Serial.print(", ");
    Serial.print(imu.getAccelZ_mss());
    Serial.println();
    delay(1000);
}

Ovaj kod čita tri komponente ubrzanja. Očitavanja žiroskopa i magnetometra mogu se izvršiti na sličan način korištenjem metoda getGyroX_rads() y getMagX_uT() respektivno.

Praktične primjene

Postoji više aplikacija u kojima MPU9250 postaje nezamjenjiv alat. Hajde da istražimo neke od najvažnijih:

  • Dronovi i robotika: Jedna od najčešćih upotreba MPU9250 je u stabilizaciji leta i robotskim sistemima, gdje je orijentacija u realnom vremenu neophodna.
  • Virtualne stvarnosti: Preciznim snimanjem orijentacije i kretanja, senzor se može koristiti za praćenje u aplikacijama za video igre ili simulatorima virtuelne stvarnosti.
  • Navigacioni sistemi: U kombinaciji s drugim senzorima, kao što je GPS, MPU9250 se koristi u inercijskoj navigaciji za razumijevanje pokreta i otkrivanje orijentacije.

Kalibracija magnetometra

Jedan od najvažnijih koraka pri korištenju MPU9250 je kalibracija magnetometra . Magnetometar je neophodan za eliminisanje grešaka uzrokovanih magnetskim okruženjem (kao što su otisci zgrada ili smetnje od druge elektronske opreme), tako da je pravilna kalibracija ključna za dobijanje tačnih mjerenja.

Da bismo ispravno kalibrirali magnetometar, možemo koristiti RTIMULib-Arduino biblioteku. Evo jednostavnog programa za kalibraciju:

#include <RTIMULib.h>
RTIMU *imu;
RTIMUSettings settings;

void setup() {
    Wire.begin();
    Serial.begin(115200);
    imu = RTIMU::createIMU(&settings);
    imu->IMUInit();
    imu->setCalibrationMode(true);
}

void loop() {
    if (imu->IMURead()) {
        RTVector3 mag = imu->getCompass();
        Serial.print("Magnetómetro: ");
        Serial.print(mag.x());
        Serial.print(", ");
        Serial.print(mag.y());
        Serial.print(", ");
        Serial.print(mag.z());
        Serial.println();
    }
}

Gornji kod čita podatke s magnetometra tako da možete napraviti pokrete po osi i pokriti cijeli raspon mogućih očitanja. Ovo pomaže da se identifikuju izobličenja magnetnog polja i poboljšaju proračuni orijentacije.

Filteri za poboljšanje preciznosti

Da bi se poboljšala tačnost očitanja MPU9250, jedan od najčešćih pristupa je implementacija filtera koji kombinuju podatke dobijene iz žiroskopa, akcelerometra i magnetometra.

Komplementarni filter je efikasno i jednostavno rješenje za implementaciju. Ovaj filter se oslanja na žiroskop za brze rezultate, dok akcelerometar i magnetometar ispravljaju dugoročno odstupanje žiroskopa. Jednostavan primjer koda koji implementira ovaj filter prikazan je ispod:

#include <ComplementaryFilter.h>
ComplementaryFilter cf;

void setup() {
    cf.setAccelerometerGain(0.02);
    cf.setMagnetometerGain(0.98);
}

void loop() {
    // Integrar lecturas de acelerómetro y giroscopio
    cf.update(sensorData.accelX, sensorData.gyroX);
    float pitch = cf.getPitch();
    float roll = cf.getRoll();
    Serial.print("Pitch: ");
    Serial.print(pitch);
    Serial.print(" Roll: ");
    Serial.println(roll);
}

Ovaj filter je neophodan za eliminisanje pomaka žiroskopa i stvaranje stabilnije orijentacije. Osim toga, mnogo je brže za izvršavanje na mikrokontrolerima kao što je Arduino od drugih složenijih metoda kao što je Kalmanov filter, koji troši više resursa.

MPU9250 je neverovatno svestrano rešenje za širok spektar projekata koji zahtevaju tačnu orijentaciju i merenje kretanja. Povezivanje na Arduino i dobivanje osnovnih očitanja je relativno jednostavno, a implementacijom nekoliko filtera možete dobiti vrlo precizne i korisne rezultate za širok raspon aplikacija.


Dodaj kao preferirani izvor na Googleu