Świat czujników inercyjnych szybko ewoluował, a urządzenia takie jak MPU9250, które łączą akcelerometr, żyroskop i magnetometr w jednym module, stały się kluczowym elementem projektów robotyki, dronów i systemów, które wymagają dokładnego rejestrowania małych i dużych ruchów. W tym artykule omówimy, jak używać tego czujnika z Arduino, jakie są jego godne uwagi funkcje, a także kilka przykładów kodu, aby zacząć z nim pracować.
Korzystanie z MPU9250 jest przydatne nie tylko dla hobbystów, ale także dla profesjonalistów, którzy muszą dokładnie mierzyć orientację i ruch. Rozwiązanie to pozwala na rozwój systemów stabilizacji, pojazdów autonomicznych i robotów, które wymagają znajomości swoich ruchów w różnych osiach. Wszechstronność czujnika w połączeniu z jego dokładnością i niskim kosztem zapewniła mu solidną reputację wśród programistów.
Co to jest MPU9250?
El MPU9250 Jest to moduł, który zawiera akcelerometr, żyroskop i magnetometr na jednym urządzeniu. Dzięki tej kombinacji czujnik jest w stanie mierzyć zarówno przyspieszenie liniowe i prędkość kątową, jak i pole magnetyczne swojego otoczenia. Ten czujnik Invensense ma 9 stopni swobody, co oznacza, że może mierzyć w trzech różnych osiach, zarówno przyspieszenie, obrót (żyroskop), jak i pole magnetyczne (magnetometr), dając tym samym możliwość obliczenia pełnej orientacji urządzenia.
Moduł przeznaczony jest do komunikować się za pomocą SPI lub I2C, co pozwala na łatwe podłączenie go do platform open source, takich jak Arduino czy Raspberry Pi. Ponadto dzięki Cyfrowy procesor ruchu (DMP), jest w stanie wykonywać złożone obliczenia w celu połączenia danych uzyskanych przez trzy czujniki i zapewnienia bardziej precyzyjnych pomiarów.
Główne cechy MPU9250
MPU9250 wyróżnia się dużą liczbą funkcji, które czynią go bardzo ciekawym modułem do projektów wymagających uchwycenia precyzyjnych ruchów, wśród których znajdują się:
- Akcelerometr: Regulowany zakres przyspieszenia w zakresie ±2g, ±4g, ±8g i ±16g.
- Żyroskop: Programowalny zakres ±250°/s, ±500°/s, ±1000°/s, ±2000°/s.
- Magnetometr: Czułość 0.6µT/LSB i programowalny zakres do 4800µT.
- Consumo energético: Bardzo niski, idealny do urządzeń przenośnych lub urządzeń wymagających długotrwałej pracy (3.5 mA w trybie aktywnym).
Podłączenie modułu MPU9250 z Arduino
Podłączenie modułu do Twojego Arduino jest prostą procedurą dzięki temu, że działa poprzez protokół I2C. On typowy schemat połączeń pomiędzy MPU9250 a Arduino Uno jest:
- VCC: Podłącz do 3.3 V.
- GND: Do uziemienia (GND).
- SDA: Podłącz go do pinu A4 Arduino.
- SCL: Podłącz go do pinu A5 Arduino.
Aby czujnik mógł prawidłowo działać, ważne jest, aby upewnić się, że zasilanie jest prawidłowe. Większość modułów ma już regulator napięcia, aby móc korzystać z 5 V Arduino bez jego uszkodzenia.
Przykłady kodu dla MPU9250
Poniżej pokazujemy jak można rozpocząć programowanie MPU9250 w Arduino, odczytując dane z akcelerometru, żyroskopu i magnetometru. Biblioteka MPU9250.h
Jest to bardzo przydatne, aby ułatwić programowanie, a w naszym przykładzie szczegółowo opisujemy, jak czytać surowe dane:
#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);
}
Ten kod odczytuje trzy składowe przyspieszenia. Odczyty żyroskopu i magnetometru można wykonać w podobny sposób, stosując te metody getGyroX_rads()
y getMagX_uT()
odpowiednio.
Praktyczne zastosowania
Istnieje wiele zastosowań, w których MPU9250 staje się narzędziem niezbędnym. Przyjrzyjmy się niektórym z najważniejszych:
- Drony i robotyka: Jednym z najczęstszych zastosowań MPU9250 są systemy stabilizacji lotu i robotyki, gdzie niezbędne jest uzyskanie orientacji w czasie rzeczywistym.
- Wirtualna rzeczywistość: Dzięki dokładnemu rejestrowaniu orientacji i ruchu czujnik może być używany do śledzenia w aplikacjach do gier wideo lub symulatorach rzeczywistości wirtualnej.
- Systemy nawigacji: W połączeniu z innymi czujnikami, takimi jak GPS, MPU9250 jest używany w nawigacji inercyjnej do rozpoznawania ruchów i wykrywania orientacji.
Kalibracja magnetometru
Jednym z najważniejszych kroków podczas korzystania z MPU9250 jest kalibracja magnetometru. Magnetometr jest niezbędny do eliminacji błędów generowanych przez środowisko magnetyczne (takich jak nagrania budynków lub zakłócenia pochodzące od innego sprzętu elektronicznego), dlatego wykonanie właściwej kalibracji ma kluczowe znaczenie dla dokładnych pomiarów.
Do poprawnej kalibracji magnetometru możemy skorzystać z biblioteki RTIMULib-Arduino. Oto prosty program kalibracyjny:
#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();
}
}
Powyższy kod odczytuje dane z magnetometru, dzięki czemu można wykonywać ruchy po osiach i obejmować pełny zakres możliwych odczytów. Pomaga to zidentyfikować zniekształcenia pola magnetycznego i usprawnić obliczenia orientacji.
Filtry poprawiające precyzję
Aby poprawić dokładność odczytów MPU9250, jednym z najczęstszych podejść jest implementacja filtra które łączą dane uzyskane z żyroskopu, akcelerometru i magnetometru.
El filtr uzupełniający Jest to rozwiązanie skuteczne i proste w wykonaniu. Filtr ten wykorzystuje żyroskop, aby uzyskać szybkie wyniki, podczas gdy akcelerometr i magnetometr korygują długoterminowe odchylenia od żyroskopu (tzw. dryf). Prosty kod implementujący ten filtr można zobaczyć w poniższym przykładzie:
#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);
}
Filtr ten jest niezbędny do wyeliminowania dryfu żyroskopu i zapewnienia bardziej stabilnej orientacji. Ponadto wykonanie na mikrokontrolerach takich jak Arduino jest znacznie szybsze niż w przypadku innych bardziej złożonych metod, takich jak filtr Kalmana, który zużywa więcej zasobów.
MPU9250 to niezwykle wszechstronne rozwiązanie do szerokiej gamy projektów, które wymagają dokładnej orientacji i pomiaru ruchu. Podłączenie go do Arduino i uzyskanie podstawowych odczytów jest stosunkowo proste, a dzięki zastosowaniu kilku filtrów można uzyskać bardzo dokładne i przydatne wyniki w szerokim zakresie zastosowań.