Jak używać modułu akcelerometru i żyroskopu MPU-6050
MPU-6050 to wszechstronny czujnik, który łączy 3-osiowy akcelerometr i 3-osiowy żyroskop w jednej obudowie. W tym samouczku przyjrzymy się, jak podłączyć ten moduł do Arduino, aby mierzyć przyspieszenie i prędkość kątową. Efektem będzie prosty program wyświetlający dane z czujnika w czasie rzeczywistym, umożliwiający monitorowanie zarówno przyspieszenia, jak i orientacji Twojego urządzenia.

Postępując zgodnie z tym przewodnikiem, nauczysz się, jak skonfigurować sprzęt, prawidłowo podłączyć komponenty oraz napisać niezbędny kod, aby uruchomić MPU-6050. Zapewni Ci to podstawy do dalszych projektów związanych z wykrywaniem ruchu i orientacji. Aby uzyskać dodatkowe wyjaśnienia, koniecznie sprawdź wideo towarzyszące temu samouczkowi (na wideo w 00:00).
Objaśnienie sprzętu
Głównym komponentem w tym projekcie jest czujnik MPU-6050, który dostarcza dane zarówno z akcelerometru, jak i żyroskopu. Akcelerometr mierzy przyspieszenie liniowe wzdłuż osi X, Y i Z, podczas gdy żyroskop mierzy prędkości obrotowe wokół tych samych osi. To połączenie sprawia, że MPU-6050 jest doskonałym wyborem do zastosowań wymagających śledzenia ruchu.
Dodatkowo moduł wykorzystuje interfejs I2C do komunikacji, co upraszcza połączenia i umożliwia podłączenie wielu urządzeń do tej samej magistrali. Czujnik jest zasilany przez pin VCC, który zazwyczaj wymaga napięcia między 3,3 V a 5 V. Masa jest podłączona do wspólnej masy Arduino.
Szczegóły z karty katalogowej
| Producent | InvenSense |
|---|---|
| Numer części | MPU-6050 |
| Napięcie logiczne/IO | 3,3 – 5 V |
| Napięcie zasilania | 3,3 – 5 V |
| Prąd wyjściowy (na kanał) | … |
| Prąd szczytowy (na kanał) | … |
| Zalecana częstotliwość PWM | … |
| Progi logiczne wejściowe | … |
| Spadek napięcia / RDS(on) / nasycenie | … |
| Limity termiczne | … |
| Obudowa | QFN |
| Uwagi / warianty | … |
- Podłącz pin VCC do 3,3 V lub 5 V.
- Podłącz pin GND do masy.
- Użyj komunikacji I2C przez SDA (dane) i SCL (zegar).
- Upewnij się, że rezystory podciągające są obecne na liniach SDA i SCL.
- Sprawdź prawidłowe poziomy napięć, aby uniknąć uszkodzenia czujnika.
Instrukcje podłączenia

Aby podłączyć MPU-6050 do Arduino, zacznij od połączenia pinu VCC modułu MPU-6050 z pinem 5 V na Arduino. Następnie podłącz pin GND modułu MPU-6050 do jednego z pinów GND na Arduino. Do komunikacji I2C podłącz pin SDA modułu MPU-6050 do pinu A4 na Arduino, a pin SCL do pinu A5. Upewnij się, że Twoje Arduino jest skonfigurowane do komunikacji I2C, dołączając odpowiednie biblioteki w kodzie.
Sprawdź dokładnie połączenia przed włączeniem zasilania. Jeśli używasz płytki stykowej, upewnij się, że połączenia są pewne i nie ma zwarć. Jeśli moduł nie reaguje zgodnie z oczekiwaniami, zweryfikuj okablowanie i sprawdź adres I2C modułu MPU-6050 w kodzie.
Przykłady kodu i omówienie
Poniższy fragment kodu inicjalizuje MPU-6050 i zaczyna odczytywać z niego dane. Kluczowe identyfikatory to mpu6050, który jest instancją klasy MPU6050, oraz timer, używany do kontrolowania czasu wyświetlania danych.
MPU6050 mpu6050(Wire);
long timer = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
W tej funkcji setup inicjalizujemy komunikację szeregową oraz czujnik MPU-6050. Wywołanie mpu6050.calcGyroOffsets(true) jest kluczowe, ponieważ kalibruje offsety żyroskopu, zapewniając dokładne odczyty.
W funkcji loop ciągle aktualizujemy dane z czujnika i wyświetlamy je w monitorze szeregowym. Poniższy fragment kodu pokazuje, jak odczytać i wydrukować dane o temperaturze i przyspieszeniu:
if(millis() - timer > 1000){
Serial.print("temp : ");Serial.println(mpu6050.getTemp());
Serial.print("accX : ");Serial.print(mpu6050.getAccX());
Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
}
Ten blok sprawdza, czy od ostatniego wyjścia minęła sekunda. Następnie pobiera wartości temperatury i przyspieszenia z MPU-6050 i wyświetla je w monitorze szeregowym. Możesz obserwować, jak te wartości aktualizują się w czasie rzeczywistym.
Demonstracja / Czego się spodziewać
Po podłączeniu wszystkiego i wgraniu kodu możesz spodziewać się, że dane o temperaturze i przyspieszeniu będą wyświetlane w monitorze szeregowym co sekundę. Jeśli przechylisz lub poruszysz MPU-6050, wartości przyspieszenia powinny się odpowiednio zmieniać. Pamiętaj, że nieprawidłowe okablowanie lub niewystarczające zasilanie może prowadzić do nieregularnych odczytów lub braku danych (na wideo w 01:30).
/*
*
* This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
*
* This code displays all data:
* -Gyroscope X, Gyroscope Y, Gyroscope Z
* -Gyroscope Angle X, Gyroscope Angle Y, Gyroscope Angle Z
* -Accel X, Accel Y, Accel Z
* -Accel Angle X, Accel Angle Y, Accel Angle Z,
*
* Library and code have been taken from:
* https://github.com/tockn/MPU6050_tockn
*
* Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
*
*/
#include <MPU6050_tockn.h>
#include <Wire.h>
MPU6050 mpu6050(Wire);
long timer = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
void loop() {
mpu6050.update();
if(millis() - timer > 1000){
Serial.println("=======================================================");
Serial.print("temp : ");Serial.println(mpu6050.getTemp());
Serial.print("accX : ");Serial.print(mpu6050.getAccX());
Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
Serial.println("=======================================================\n");
timer = millis();
}
}
/*
*
* This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
*
* This code displays:
* - Angle X, Angle Y, Angle Z,
*
* Library and code have been taken from:
* https://github.com/tockn/MPU6050_tockn
*
* Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
*
*/
#include <MPU6050_tockn.h>
#include <Wire.h>
MPU6050 mpu6050(Wire);
long timer = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
void loop() {
mpu6050.update();
if(millis() - timer > 1000){
Serial.println("=======================================================");
Serial.print("temp : ");Serial.println(mpu6050.getTemp());
Serial.print("accX : ");Serial.print(mpu6050.getAccX());
Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
Serial.println("=======================================================\n");
timer = millis();
}
}
Rzeczy, których możesz potrzebować
-
AmazonPurchase MPU-6050 from Amazonamzn.to
Zasoby i odniesienia
-
ZewnętrznyManufacturer websiteinvensense.com
Pliki📁
Biblioteki Arduino (zip)
-
Arduino library for MPU9250
robojax-MPU9250-master.zip3.38 MB
Inne pliki
-
MPU6050_tockn-masterArduino library for the MPU6050 accelerometer and gyroscope module. Provides functions to read acceleration, gyro, and temperature data, with calibration and angle calculation. Designed for easy integration into motion-sensing projects.
robojax-MPU6050_tockn-master.zip