Szukaj kodu

Jak używać modułu akcelerometru i żyroskopu MPU-6050

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

ProducentInvenSense
Numer częściMPU-6050
Napięcie logiczne/IO3,3 – 5 V
Napięcie zasilania3,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
ObudowaQFN
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

arduino_wiring_MPU-6050

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).

Obrazy

arduino_wiring_MPU-6050
arduino_wiring_MPU-6050
MPU-6050-module-1
MPU-6050-module-1
MPU-6050-module-2
MPU-6050-module-2
MPU-6050-module-schematic
MPU-6050-module-schematic
MPU-6050-module-1
MPU-6050-module-1
116-Arduino code for the MPU-6050 accelerometer and gyroscope sensor (all data)
Język: C++
/*
 * 
 * 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();
    
  }

}
117-Arduino code for an MPU-6050 accelerometer and gyroscope sensor (just angle)
Język: C++
/*
 * 
 * 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ć

Zasoby i odniesienia

Pliki📁

Biblioteki Arduino (zip)

Inne pliki

  • MPU6050_tockn-master
    Arduino 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