Inerciālo sensoru pasaule ir strauji attīstījusies, un tādas ierīces kā MPU9250, kas apvieno akselerometru, žiroskopu un magnetometru vienā modulī, ir kļuvušas par galveno elementu robotikas projektiem, droniem un sistēmām, kurās nepieciešams precīzi tvert mazas un lielas kustības. Šajā rakstā mēs izpētīsim, kā izmantot šo sensoru ar Arduino, kādas ir tā ievērojamās funkcijas, kā arī dažus kodu piemērus, lai sāktu ar to.
MPU9250 lietošana ir noderīga ne tikai hobijiem, bet arī profesionāļiem, kuriem nepieciešams precīzi izmērīt orientāciju un kustību. Šis risinājums ļauj izstrādāt stabilizācijas sistēmas, autonomus transportlīdzekļus un robotus, kuriem ir jāzina to kustības dažādās asīs. Sensora daudzpusība, kā arī tā precizitāte un zemās izmaksas ir iemantojušas tam stabilu reputāciju izstrādātāju vidū.
Kas ir MPU9250?
El MPU9250 Tas ir modulis, kas ietver akselerometrs, žiroskops un magnetometrs vienā ierīcē. Izmantojot šo kombināciju, sensors spēj izmērīt gan lineāro paātrinājumu, gan leņķisko ātrumu, gan apkārtējās vides magnētisko lauku. Šim Invensense sensoram ir 9 brīvības pakāpes, kas nozīmē, ka tas var mērīt trīs dažādās asīs, gan paātrinājumu, gan rotāciju (žiroskops), gan magnētisko lauku (magnetometrs), tādējādi dodot iespēju aprēķināt pilnīgu ierīces orientāciju.
Modulis ir paredzēts sazināties, izmantojot SPI vai I2C, kas ļauj to viegli savienot ar atvērtā koda platformām, piemēram, Arduino vai Raspberry Pi. Turklāt, pateicoties Digitālais kustības procesors (DMP), spēj veikt sarežģītus aprēķinus, lai apvienotu trīs sensoru iegūtos datus un nodrošinātu precīzākus mērījumus.
MPU9250 galvenās iezīmes
MPU9250 izceļas ar lielu skaitu funkciju, kas padara to par ļoti interesantu moduli projektiem, kuros nepieciešams tvert precīzas kustības, tostarp:
- Akselerometrs: Regulējams paātrinājuma diapazons no ±2g, ±4g, ±8g un ±16g.
- Žiroskops: Programmējamais diapazons ±250°/s, ±500°/s, ±1000°/s, ±2000°/s.
- Magnetometrs: Jutība 0.6 µT/LSB un programmējamais diapazons līdz 4800 µT.
- Enerģijas patēriņš: Ļoti zems, ideāli piemērots pārnēsājamām ierīcēm vai ierīcēm, kurām nepieciešama ilgstoša darbība (3.5 mA aktīvajā režīmā).
MPU9250 moduļa savienošana ar Arduino
Moduļa pievienošana jūsu Arduino ir vienkārša procedūra, pateicoties tam, ka tas darbojas, izmantojot I2C protokolu. Viņš tipiska savienojuma shēma starp MPU9250 un a Arduino Uno ir:
- VCC: pievienojiet 3.3 V.
- GND: uz zemējumu (GND).
- SDA: pievienojiet to Arduino kontaktam A4.
- SCL: pievienojiet to Arduino kontaktam A5.
Lai sensors varētu darboties pareizi, ir svarīgi nodrošināt pareizu strāvas padevi. Lielākajai daļai moduļu jau ir sprieguma regulators, lai varētu izmantot Arduino 5 V, to nesabojājot.
Koda piemēri MPU9250
Zemāk mēs parādīsim, kā jūs varat sākt programmēt MPU9250 Arduino, nolasot datus no akselerometra, žiroskopa un magnetometra. Bibliotēka MPU9250.h
Tas ir ļoti noderīgi, lai atvieglotu programmēšanu, un mūsu piemērā ir detalizēti aprakstīts, kā lasīt neapstrādātus datus:
#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);
}
Šis kods nolasa trīs paātrinājuma komponentus. Žiroskopa un magnetometra rādījumus var veikt līdzīgi, izmantojot metodes getGyroX_rads()
y getMagX_uT()
attiecīgi.
Praktiski pielietojumi
Ir vairākas lietojumprogrammas, kurās MPU9250 kļūst par neaizstājamu rīku. Izpētīsim dažus no svarīgākajiem:
- Droni un robotika: Viens no izplatītākajiem MPU9250 lietojumiem ir lidojuma stabilizācijas un robotikas sistēmās, kur reāllaika orientācijas iegūšana ir būtiska.
- Virtuālā realitāte: Precīzi fiksējot orientāciju un kustību, sensoru var izmantot izsekošanai videospēļu lietojumprogrammās vai virtuālās realitātes simulatoros.
- Navigācijas sistēmas: Kombinācijā ar citiem sensoriem, piemēram, GPS, MPU9250 tiek izmantots inerciālajā navigācijā, lai izprastu kustības un noteiktu orientāciju.
Magnetometra kalibrēšana
Viens no svarīgākajiem soļiem, lietojot MPU9250, ir magnetometra kalibrēšana. Magnetometrs ir būtisks, lai novērstu magnētiskās vides radītās kļūdas (piemēram, ēkas kadrus vai citu elektronisko iekārtu radītus traucējumus), tāpēc pareiza kalibrēšana ir ļoti svarīga precīzu mērījumu veikšanai.
Lai pareizi kalibrētu magnetometru, mēs varam izmantot RTIMULib-Arduino bibliotēku. Šeit ir vienkārša kalibrēšanas programma:
#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();
}
}
Iepriekš minētais kods nolasa datus no magnetometra, lai jūs varētu veikt kustības pa asīm un aptvert visu iespējamo rādījumu diapazonu. Tas palīdz noteikt magnētiskā lauka kropļojumus un uzlabot orientācijas aprēķinus.
Filtri, lai uzlabotu precizitāti
Lai uzlabotu MPU9250 rādījumu precizitāti, viena no visizplatītākajām pieejām ir filtra ieviešana kas apvieno datus, kas iegūti no žiroskopa, akselerometra un magnetometra.
El papildu filtrs Tas ir efektīvs un vienkārši īstenojams risinājums. Šis filtrs paļaujas uz žiroskopu, lai iegūtu ātrus rezultātus, savukārt akselerometrs un magnetometrs koriģē ilgtermiņa novirzes no žiroskopa (pazīstamas kā novirze). Vienkāršu kodu, kas ievieš šo filtru, var redzēt šajā piemērā:
#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);
}
Šis filtrs ir būtisks, lai novērstu žiroskopa novirzi un radītu stabilāku orientāciju. Turklāt tas ir daudz ātrāk izpildāms mikrokontrolleros, piemēram, Arduino, nekā citas sarežģītākas metodes, piemēram, Kalmana filtrs, kas patērē vairāk resursu.
MPU9250 ir neticami daudzpusīgs risinājums dažādiem projektiem, kuriem nepieciešama precīza orientācija un kustības mērīšana. Tā savienošana ar Arduino un pamata rādījumu iegūšana ir salīdzinoši vienkārša, un, ieviešot dažus filtrus, jūs varat iegūt ļoti precīzus un noderīgus rezultātus plašam lietojumu klāstam.