Verden af inertisensorer har udviklet sig hurtigt, og enheder som MPU9250, der kombinerer accelerometer, gyroskop og magnetometer i et enkelt modul, er blevet en nøglebrik for robotprojekter, droner og systemer, der kræver præcist at fange små og store bevægelser. I denne artikel skal vi undersøge, hvordan man bruger denne sensor med Arduino, hvad dens bemærkelsesværdige funktioner er, samt nogle kodeeksempler for at komme i gang med den.
Brugen af MPU9250 er ikke kun nyttig for hobbyfolk, men også for professionelle, der har brug for at måle orientering og bevægelse nøjagtigt. Denne løsning muliggør udvikling af stabiliseringssystemer, autonome køretøjer og robotter, der kræver at kende deres bevægelser i de forskellige akser. Sensorens alsidighed sammen med dens nøjagtighed og lave omkostninger har givet den et solidt ry blandt udviklere.
Hvad er MPU9250?
El MPU9250 Det er et modul, der indeholder accelerometer, gyroskop og magnetometer på en enkelt enhed. Med denne kombination er sensoren i stand til at måle både lineær acceleration og vinkelhastighed og dets magnetiske felt. Denne Invensense sensor har 9 frihedsgrader, hvilket betyder, at den kan måle i tre forskellige akser, både acceleration, rotation (gyroskop) og magnetfeltet (magnetometer), hvilket giver mulighed for at beregne enhedens fuldstændige orientering.
Modulet er designet til kommunikere ved hjælp af SPI eller I2C, som gør det nemt at forbinde til open source-platforme som Arduino eller Raspberry Pi. Desuden takket være Digital Motion Processor (DMP), er i stand til at udføre komplekse beregninger for at fusionere dataene opnået af de tre sensorer og give mere præcise målinger.
Hovedtræk ved MPU9250
MPU9250 skiller sig ud ved at have et stort antal funktioner, der gør det til et meget interessant modul til projekter, der kræver at fange præcise bevægelser, blandt andet:
- Accelerometer: Justerbart accelerationsområde mellem ±2g, ±4g, ±8g og ±16g.
- Gyroskop: Programmerbart område på ±250°/s, ±500°/s, ±1000°/s, ±2000°/s.
- Magnetometer: Følsomhed på 0.6µT/LSB og programmerbart område op til 4800µT.
- Consumo energético: Meget lav, ideel til bærbare enheder eller enheder, der kræver drift i lange perioder (3.5 mA i aktiv tilstand).
Tilslutning af MPU9250-modulet med Arduino
Tilslutning af modulet til din Arduino er en enkel procedure takket være det faktum, at det fungerer gennem I2C-protokollen. Han typisk tilslutningsdiagram mellem en MPU9250 og en Arduino Uno Det er:
- VCC: Tilslut til 3.3V.
- GND: Til jord (GND).
- naturressourcer: Tilslut den til pin A4 på Arduino.
- SCL: Tilslut den til pin A5 på Arduino.
Det er vigtigt at sikre, at strømmen er korrekt, så sensoren kan fungere korrekt. De fleste moduler har allerede en spændingsregulator for at kunne bruge 5V fra Arduino uden at beskadige den.
Kodeeksempler til MPU9250
Nedenfor viser vi dig, hvordan du kan begynde at programmere MPU9250 i Arduino ved at læse dataene fra accelerometeret, gyroskopet og magnetometeret. Biblioteket MPU9250.h
Det er meget nyttigt at lette programmering, og i vores eksempel beskriver vi, hvordan man læser rådata:
#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);
}
Denne kode læser de tre komponenter af acceleration. Gyroskop- og magnetometeraflæsninger kan udføres på samme måde ved hjælp af metoderne getGyroX_rads()
y getMagX_uT()
hhv.
Praktiske anvendelser
Der er flere applikationer, hvor MPU9250 bliver et uundværligt værktøj. Lad os udforske nogle af de vigtigste:
- Droner og robotter: En af de mest almindelige anvendelser af MPU9250 er i flystabiliserings- og robotsystemer, hvor det er vigtigt at opnå realtidsorientering.
- Virtual reality: Ved nøjagtigt at fange orientering og bevægelse kan sensoren bruges til sporing i videospilsapplikationer eller virtual reality-simulatorer.
- Navigationssystemer: I kombination med andre sensorer, såsom GPS, bruges MPU9250 i inertinavigation til at forstå bevægelser og detektere orientering.
Magnetometer kalibrering
Et af de vigtigste trin, når du bruger MPU9250 er magnetometer kalibrering. Magnetometeret er afgørende for at eliminere fejl genereret af det magnetiske miljø (såsom bygningsoptagelser eller interferens fra andet elektronisk udstyr), så udførelse af korrekt kalibrering er afgørende for nøjagtige målinger.
For at kalibrere magnetometeret korrekt kan vi bruge RTIMULib-Arduino-biblioteket. Her er et simpelt kalibreringsprogram:
#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();
}
}
Ovenstående kode læser dataene fra magnetometeret, så du kan lave bevægelser på akserne og dække hele rækken af mulige aflæsninger. Dette hjælper med at identificere magnetfeltforvrængninger og forbedre orienteringsberegninger.
Filtre for at forbedre præcisionen
For at forbedre nøjagtigheden af MPU9250-aflæsningerne er en af de mest almindelige fremgangsmåder implementering af filter der kombinerer data opnået fra gyroskopet, accelerometeret og magnetometeret.
El komplementært filter Det er en effektiv og enkel løsning at implementere. Dette filter er afhængigt af gyroskopet for at få hurtige resultater, mens accelerometeret og magnetometeret korrigerer langsigtede afvigelser fra gyroskopet (kendt som drift). En simpel kode, der implementerer dette filter, kan ses i følgende eksempel:
#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);
}
Dette filter er vigtigt for at eliminere gyroskopdrift og generere en mere stabil orientering. Derudover er det meget hurtigere at eksekvere på mikrocontrollere som Arduino end andre mere komplekse metoder som Kalman-filteret, der bruger flere ressourcer.
MPU9250 er en utrolig alsidig løsning til en lang række projekter, der kræver nøjagtig orientering og bevægelsesmåling. At forbinde den til en Arduino og få grundlæggende aflæsninger er relativt enkel, og ved at implementere et par filtre kan du få meget præcise og nyttige resultater til en lang række applikationer.