Mobile
Ten moduł IMU to mała płytka, na której umieszczone są wszystkie niezbędne czujniki dla 10 stopni swobody. Moduł ten komunikuje się z Arduino lub mikrokontrolerami poprzez interfejs I2C. Dzięki istniejącemu kodowi źródłowemu i funkcjom FreeIMU możesz z łatwością używać tego IMU jako systemu AHRS w sterowaniu lotem. Możesz używać tego modułu w VTOL, modelach samolotów, UAV, a także w urządzeniach przemysłowych i medycznych.
Ten czujnik ma 8 pinów:
Możesz zobaczyć pinout tego modułu na poniższym obrazku:
Połączenie
Moduł zasilany jest bezpośrednio z Arduino , więc nie potrzebujemy zewnętrznego zasilania.
Piny są połączone zgodnie z tabelą:
Moduł pinów
Przypnij przez Arduino UNO
VCC
5V
GND
SCL
DO 5
SDA
Jak pokazano na poniższym rysunku:
Otwórz Arduino IDE i zainstaluj następujące biblioteki:
Najpierw należy dodać biblioteki „ Adafruit_BMP280_Library ” i „ MPU9250_asukiaaa ” w IDE Arduino . Aby to zrobić, pobierz je, klikając ich nazwy, a po wejściu na GitHub pobierz je. Zainstaluj je później z Program -> Dołącz bibliotekę -> Dodaj bibliotekę .ZIP ...), znajdź pobrany tablet i zaakceptuj.
Teraz otwórz nowy szkic i wklej następujący kod:
/ *
przez MohammedDamirchi
https://electropeak.com/learn/
* /
#include <MPU9250_asukiaaa.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bme; // I2C
MPU9250_asukiaaa mySensor;
float aX, aY, aZ, aSqrt, gX, gY, gZ, mDirection, mX, mY, mZ;
void setup () {
Serial.begin (115200);
while (! Serial);
#ifdef _ESP32_HAL_I2C_H_ // Dla ESP32
Wire.begin (SDA_PIN, SCL_PIN);
mySensor.setWire (& Wire);
#endif
bme.begin ();
mySensor.beginAccel ();
mySensor.beginGyro ();
mySensor.beginMag ();
// Możesz ustawić własne przesunięcie wartości mag
// mySensor.magXOffset = -50;
// mySensor.magYOffset = -55;
// mySensor.magZOffset = -10;
}
void loop () {
if (mySensor.accelUpdate () == 0) {
aX = mySensor.accelX ();
aY = mySensor.accelY ();
aZ = mySensor.accelZ ();
aSqrt = mySensor.accelSqrt ();
Serial.print ("accelX:" + String (aX));
Serial.print ("\ taccelY:" + String (aY));
Serial.print ("\ taccelZ:" + String (aZ));
Serial.print ("\ taccelSqrt:" + String (aSqrt));
if (mySensor.gyroUpdate () == 0) {
gX = mySensor.gyroX ();
gY = mySensor.gyroY ();
gZ = mySensor.gyroZ ();
Serial.print ("\ tgyroX:" + String (gX));
Serial.print ("\ tgyroY:" + String (gY));
Serial.print ("\ tgyroZ:" + String (gZ));
if (mySensor.magUpdate () == 0) {
mX = mySensor.magX ();
mY = mySensor.magY ();
mZ = mySensor.magZ ();
mDirection = mySensor.magHorizDirection ();
Serial.print ("\ tmagX:" + String (mX));
Serial.print ("\ tmaxY:" + String (mY));
Serial.print ("\ tmagZ:" + String (mZ));
Serial.print ("\ thorizontalDirection:" + String (mDirection));
Serial.print ("\ tTemperature (* C):");
Serial.print (bme.readTemperature ());
Serial.print ("\ tCiśnienie (cale (Hg)):");
Serial.print (bme.readPressure () / 3377);
Serial.print ("\ tApproxAltitude (m):");
Serial.print (bme.readAltitude (1013.25)); // to powinno być dostosowane do twojego lokalnego forcase
Serial.println (""); // Dodaj pusty wiersz
Gdy już wszystko podłączysz, port i płyta są w porządku, prześlij kod na płytę i możesz teraz otworzyć „Ploter szeregowy” (lub za pomocą monitora szeregowego z zakładki Narzędzia), aby zobaczyć zarejestrowane ruchy. Możesz je przefiltrować i spróbować zmodyfikować przykładowy kod. Oczywiście możesz wypróbować przykłady z bibliotek.