Bota e sensorëve inercialë ka evoluar me shpejtësi dhe pajisjet si MPU9250, i cili kombinon akselerometrin, xhiroskopin dhe magnetometrin në një modul të vetëm, janë bërë një pjesë kyçe për projektet robotike, dronët dhe sistemet që kërkojnë kapjen e saktë të lëvizjeve të vogla dhe të mëdha. Në këtë artikull, ne do të shqyrtojmë se si ta përdorim këtë sensor me Arduino, cilat janë veçoritë e tij të dukshme, si dhe disa shembuj kodesh për të filluar me të.
Përdorimi i MPU9250 nuk është i dobishëm vetëm për hobiistët, por edhe për profesionistët që duhet të matin me saktësi orientimin dhe lëvizjen. Kjo zgjidhje lejon zhvillimin e sistemeve të stabilizimit, automjeteve autonome dhe robotëve që kërkojnë njohjen e lëvizjeve të tyre në akse të ndryshme. Shkathtësia e sensorit, së bashku me saktësinë dhe koston e ulët, i ka dhënë atij një reputacion të fortë midis zhvilluesve.
Çfarë është MPU9250?
El MPU9250 Është një modul që përfshin akselerometër, xhiroskop dhe magnetometër në një pajisje të vetme. Me këtë kombinim, sensori është i aftë të matë si nxitimin linear ashtu edhe shpejtësinë këndore, si dhe fushën magnetike të mjedisit të tij. Ky sensor i Invensense ka 9 gradë lirie, që do të thotë se mund të matë në tre akse të ndryshme, si nxitimin, rrotullimin (xhiroskop) ashtu edhe fushën magnetike (magnetometër), duke dhënë kështu mundësinë e llogaritjes së orientimit të plotë të pajisjes.
Moduli është projektuar për të komunikoni duke përdorur SPI ose I2C, e cila e lejon atë të lidhet lehtësisht me platforma me burim të hapur si Arduino ose Raspberry Pi. Për më tepër, falë Procesori dixhital i lëvizjes (DMP), është në gjendje të kryejë llogaritje komplekse për të bashkuar të dhënat e marra nga tre sensorët dhe për të siguruar matje më të sakta.
Karakteristikat kryesore të MPU9250
MPU9250 shquhet për një numër të madh karakteristikash që e bëjnë atë një modul shumë interesant për projektet që kërkojnë kapjen e lëvizjeve të sakta, ndër të cilat janë:
- Accelerometer: Gama e rregullueshme e nxitimit midis ±2g, ±4g, ±8g dhe ±16g.
- Xhiroskopi: Gama e programueshme prej ±250°/s, ±500°/s, ±1000°/s, ±2000°/s.
- Magnetometër: Ndjeshmëria prej 0.6µT/LSB dhe diapazoni i programueshëm deri në 4800µT.
- Konsumim i energjise: Shumë e ulët, ideale për pajisjet portative ose pajisjet që kërkojnë funksionim për periudha të gjata (3.5 mA në modalitetin aktiv).
Lidhja e modulit MPU9250 me Arduino
Lidhja e modulit me Arduino-n tuaj është një procedurë e thjeshtë falë faktit që funksionon përmes protokollit I2C. Ai diagrami tipik i lidhjes ndërmjet një MPU9250 dhe a Arduino Uno është:
- KQV-së: Lidhu me 3.3V.
- GND: Në tokë (GND).
- burime natyrore: Lidheni atë me pin A4 të Arduino.
- SCL: Lidheni atë me pin A5 të Arduino.
Është e rëndësishme të siguroheni që fuqia të jetë e saktë në mënyrë që sensori të funksionojë siç duhet. Shumica e moduleve kanë tashmë një rregullator tensioni për të mundësuar përdorimin e 5V të Arduino pa e dëmtuar atë.
Shembuj të kodit për MPU9250
Më poshtë ju tregojmë se si mund të filloni programimin e MPU9250 në Arduino, duke lexuar të dhënat nga akselerometri, xhiroskopi dhe magnetometri. Biblioteka MPU9250.h
Është shumë e dobishme për të lehtësuar programimin, dhe në shembullin tonë ne detajojmë se si të lexojmë të dhëna të papërpunuara:
#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);
}
Ky kod lexon tre komponentët e nxitimit. Leximet e xhiroskopit dhe magnetometrit mund të bëhen në mënyrë të ngjashme duke përdorur metodat getGyroX_rads()
y getMagX_uT()
respektivisht.
Zbatime praktike
Ka shumë aplikacione ku MPU9250 bëhet një mjet i domosdoshëm. Le të shqyrtojmë disa nga më të rëndësishmet:
- Dronët dhe robotika: Një nga përdorimet më të zakonshme të MPU9250 është në sistemet e stabilizimit të fluturimit dhe robotikës, ku marrja e orientimit në kohë reale është thelbësore.
- Realitet virtual: Duke kapur me saktësi orientimin dhe lëvizjen, sensori mund të përdoret për gjurmimin në aplikacionet e lojërave video ose simuluesit e realitetit virtual.
- Sistemet e navigimit: Në kombinim me sensorë të tjerë, si GPS, MPU9250 përdoret në navigimin inercial për të kuptuar lëvizjet dhe për të zbuluar orientimin.
Kalibrimi i magnetometrit
Një nga hapat më të rëndësishëm kur përdorni MPU9250 është kalibrimi i magnetometrit. Magnetometri është thelbësor për eliminimin e gabimeve të krijuara nga mjedisi magnetik (të tilla si pamjet e ndërtimit ose ndërhyrjet nga pajisjet e tjera elektronike), kështu që kryerja e kalibrimit të duhur është thelbësore për matjet e sakta.
Për të kalibruar saktë magnetometrin, mund të përdorim bibliotekën RTIMULib-Arduino. Këtu është një program i thjeshtë kalibrimi:
#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();
}
}
Kodi i mësipërm lexon të dhënat nga magnetometri në mënyrë që të mund të bëni lëvizje në akset dhe të mbuloni gamën e plotë të leximeve të mundshme. Kjo ndihmon në identifikimin e shtrembërimeve të fushës magnetike dhe në përmirësimin e llogaritjeve të orientimit.
Filtra për të përmirësuar saktësinë
Për të përmirësuar saktësinë e leximeve të MPU9250, një nga qasjet më të zakonshme është zbatimi i filtrit që kombinojnë të dhënat e marra nga xhiroskopi, akselerometri dhe magnetometri.
El filtër plotësues Është një zgjidhje efektive dhe e thjeshtë për t'u zbatuar. Ky filtër mbështetet në xhiroskop për të marrë rezultate të shpejta, ndërsa përshpejtuesi dhe magnetometri korrigjojnë devijimet afatgjata nga xhiroskopi (i njohur si drift). Një kod i thjeshtë që zbaton këtë filtër mund të shihet në shembullin e mëposhtëm:
#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);
}
Ky filtër është thelbësor për të eliminuar lëvizjen e xhiroskopit dhe për të krijuar një orientim më të qëndrueshëm. Për më tepër, është shumë më e shpejtë për t'u ekzekutuar në mikrokontrollues si Arduino sesa metoda të tjera më komplekse si filtri Kalman, i cili konsumon më shumë burime.
MPU9250 është një zgjidhje tepër e gjithanshme për një shumëllojshmëri të gjerë projektesh që kërkojnë orientim të saktë dhe matje të lëvizjes. Lidhja e tij me një Arduino dhe marrja e leximeve bazë është relativisht e thjeshtë dhe duke zbatuar disa filtra, mund të merrni rezultate shumë të sakta dhe të dobishme për një gamë të gjerë aplikacionesh.