- żyroskop – pomiar w 3 osiach X, Y, Z z wybieranym zakresem: ±250, ±500, ±1000, ±2000°/s i rozdzielczością 16 bitów,
- akcelerometr – pomiar w 3 osiach X, Y, Z z wybieranym zakresem ±2, ±4, ±8, ±16 g i rozdzielczością 16 bitów,
- pomiar wewnętrznej temperatury układu MPU6050,
- interfejs I2C z możliwością wyboru jednego z dwu adresów w obrębie magistrali,
- zasilanie: 3,3/5 V,
- pobór prądu do 5 mA w czasie normalnej pracy,
- wymiary bez złącza: 20×15×3 mm (zależnie od wykonania),
- mocowanie – otwory 2×2,5 mm (zależnie od wykonania).
Budowa modułu
Na płytce modułu znajduje się układ scalony MPU6050 oraz układ stabilizatora LDO pozwalający rozszerzyć dopuszczalne napięcie zasilania do zakresu 3,3...5 V. Dodatkowo na płytce zamontowano oporniki podciągające linie magistrali I2C do napięcia zasilającego oraz opornik ustawiający na wyprowadzeniu wyboru adresu AD0 poziom niski. Wszystkie sygnały są dostępne na 8-stykowym gnieździe.
Na rysunku 1 został pokazany wygląd płytki modułu i rozmieszczenie kluczowych elementów. Oznaczenia i funkcje poszczególnych wyprowadzeń są następujące:
- VCC – plus zasilania 3,3...5 V,
- GND – masa zasilania,
- SCL – linia zegarowa magistrali I2C podciągnięta do VCC,
- SDA – linia danych magistrali I2C podciągnięta do VCC,
- XDA – linia danych dodatkowej niezależnej magistrali I2C,
- XCL – linia zegara dodatkowej niezależnej magistrali I2C,
- ADO – wejście wyboru adresu, na który będzie reagował moduł w obrębie głównej magistrali I2C (dla poziomu niskiego będzie to adres 0x68, dla poziomu wysokiego (3,3 V) 0x69. Linia jest podciągana do poziomu niskiego poprzez opornik na płytce modułu),
- INT – wyjście przerwania, może być zaprogramowana do wystawiania stanu niskiego w przypadku wystąpienia zdarzenia np. przekroczenia poziomu przyśpieszenia.
Działanie modułu
Zamontowany na płytce modułu układ scalony MPU6050 zawiera struktury MEMS (Micro Electro Mechanical Systems) pełniące funkcję półprzewodnikowych żyroskopów i akcelerometrów. Czujniki układu odgrywające rolę akcelerometrów mierzą w 3 osiach wartość przyśpieszenia, a czujniki żyroskopów mierzą rotację.
Na rysunku 2 zielonymi liniami zaznaczono orientację poszczególnych osi względem płytki. W takim położeniu jak na rysunku 2, gdy moduł pozostaje w bezruchu, akcelerometr osi Z powinien zmierzyć wartość około 9,81 m/s2 co odpowiada średniemu przyśpieszeniu ziemskiemu, natomiast akcelerometry osi X i Y powinny podawać wartości bliskie 0 m/s2. Odwrócenie płytki „do góry nogami” skutkuje odczytem wartości ujemnej – 9,81 m/s2 zmierzonej w osi Z. Każde przesunięcie płytki np. w kierunku +X spowoduje pomiar w tej osi chwilowego przyśpieszenia o wartości dodatniej, proporcjonalnego do prędkości ruchu płytki. Z kolei w czasie obracania płytki wokół zaznaczonych osi żyroskopy zmierzą ten obrót w jednostkach stopni kątowych na sekundę.
Uzyskiwane w czasie pomiarów sygnały analogowe akcelerometrów i żyroskopów są poddawane obróbce w wewnętrznych przetwornikach ADC i jako wartości cyfrowe są dostępne do odczytu z rejestrów układu MPU6050.
Podłączenie modułu
Komunikacja z modułem MPU-6050 odbywa się poprzez główną magistralę I2C, za pośrednictwem której zewnętrzny sterownik uzyskuje dostęp do rejestrów układu MPU6050. Zapis do rejestrów pozwala sterować pracą i np. wybudzać z trybu uśpienia, zmieniać czułość akcelerometrów i ustawiać zakres pomiarowy żyroskopów. Z kolei wyniki pomiarów są dostępne w trybie odczytu z rejestrów danych.
Na rysunku 3 pokazano podłączenie modułu MPU-6050 do sterownika, którym jest płytka z modułem ESP32. Linie SCL, SDA modułu MPU-6050 należy połączyć z portami GPIO22, GPIO21 płytki, które są sprzętowymi wyprowadzeniami magistrali I2C procesora ESP32. Jeżeli moduł chcemy podłączyć do innej płytki, np. Arduino, należy jego linie SCL i SDA połączyć z właściwymi wyprowadzeniami interfejsu I2C.
W tabeli 1 zestawiono konfiguracje podłączeń dla kilku typów płytek.
Oprogramowanie
Do odczytu danych z modułu i przekształcenia ich w użyteczne informacje o kątach przechyłu płytki można posłużyć się już istniejącymi bibliotekami. Do najwszechstronniejszych należą biblioteki autorstwa Jeffa Rowberga. Pozwalają one na uzyskiwanie danych w różnych formatach, a także na użycie wewnętrznego cyfrowego procesora ruchu (DMP). Jest to umieszczony w układzie MPU6050 specjalizowany mikroprocesor mogący przejąć wiele obliczeń na danych z żyroskopów i akcelerometrów, które normalnie musi wykonać oprogramowanie użytkownika. Biblioteka Rowberga dostępna jest dla różnych typów mikrokontrolerów.
Dla układu MPU6050 istnieją także inne pakiety oprogramowania. Pracując w środowisku Arduino, można posłużyć się biblioteką MPU6050_tockn, która jest bardzo prosta w użyciu. Za pomocą tego oprogramowania można odczytywać surowe dane z akcelerometrów i żyroskopów, wartości przyśpieszeń i rotacji, a także kąty przechyłu dla 3 osi. Bibliotekę można zainstalować w środowisku Arduino poprzez menedżer bibliotek, a jej źródła dostępne są w [1].
#include <MPU6050_tockn.h>
#include <Wire.h>
MPU6050 mpu6050(Wire);
void setup() {
//Serial.begin(9600);
Serial.begin(115200);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
void loop() {
mpu6050.update();
Serial.print("angleX : ");
Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");
Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");
Serial.println(mpu6050.getAngleZ());
}
Na listingu 1 zademonstrowano, w jaki sposób można użyć biblioteki MPU6050_tockn do odczytu danych z modułu MPU-6050. Komunikacja z modułem odbywa się za pośrednictwem magistrali I2C, odczytane dane przesyłane są na port szeregowy płytki Arduino i mogą być podglądane monitorem portu. Po włączeniu zasilania inicjowany jest port szeregowy, następnie obsługa magistrali I2C Wire.begin() i układu MPU6050 mpu6050.begin(). Potem w linii mpu6050.calcGyroOffsets(true) zostaje wywołana procedura kalibracji, podczas której przez 3 sekundy moduł powinien pozostać nieruchomy. W pętli loop() rozkaz mpu6050.update() powoduje odczyt i odświeżenie danych z akcelerometrów i żyroskopów używanych do obliczeń aktualnych kątów przechyleń w osiach X, Y, Z. Obliczone wartości kątów są wysyłane portem szeregowym. Wynik podawany jest w stopniach w zakresie ±180°.
Ciekawy przykład wizualizacji działania modułu z elementami grafiki 3D można znaleźć w [2], a jego wersję z użyciem biblioteki MPU6050_tockn w [3]. Wizualizacja pracuje jako serwer WWW zainstalowany na płytce ESP32 połączonej z modułem w konfiguracji takiej jak na rysunku 3. Zrzut ekranu z działającą aplikacją pokazano na rysunku 4.
Ryszard Szymaniak
biuro@ars.info.pl
Odnośniki:
- Źródła biblioteki MPU6050_tockn: https://bit.ly/3CfONCo
- Wizualizacja: https://bit.ly/3m4KxQt
- Wizualizacja z biblioteką MPU6050_tockn: https://bit.ly/3jw5UZn
- Opis MPU6050: https://bit.ly/2Zd8YSS