Search Code

Ako používať modul akcelerometra a gyroskopu MPU-6050

Ako používať modul akcelerometra a gyroskopu MPU-6050

MPU-6050 je všestranný senzor, ktorý kombinuje 3-osový akcelerometer a 3-osový gyroskop v jednom balení. V tomto návode preskúmame, ako pripojiť tento modul k Arduinu na meranie zrýchlenia a uhlovej rýchlosti. Výsledkom bude jednoduchý program, ktorý zobrazuje údaje zo senzora v reálnom čase, čo vám umožní sledovať zrýchlenie aj orientáciu vášho zariadenia.

Podľa tohto sprievodcu sa naučíte, ako zostaviť hardvér, správne zapojiť komponenty a napísať potrebný kód na spustenie MPU-6050. To vám poskytne základ pre ďalšie projekty zahŕňajúce snímanie pohybu a detekciu orientácie. Pre väčšiu jasnosť si pozrite video sprevádzajúce tento návod (vo videu o 00:00).

Vysvetlenie hardvéru

Hlavným komponentom tohto projektu je senzor MPU-6050, ktorý poskytuje údaje z akcelerometra aj gyroskopu. Akcelerometer meria lineárne zrýchlenie pozdĺž osí X, Y a Z, zatiaľ čo gyroskop meria rýchlosti rotácie okolo týchto osí. Táto kombinácia robí z MPU-6050 vynikajúcu voľbu pre aplikácie vyžadujúce sledovanie pohybu.

Modul navyše používa na komunikáciu rozhranie I2C, čo zjednodušuje zapojenie a umožňuje pripojiť viacero zariadení na rovnakú zbernicu. Senzor je napájaný cez pin VCC, ktorý zvyčajne vyžaduje napätie medzi 3,3 V a 5 V. Uzemnenie sa pripája na spoločnú zem Arduina.

Podrobnosti z datasheetu

VýrobcaInvenSense
Označenie dieluMPU-6050
Logické/I-O napätie3,3 – 5 V
Napájacie napätie3,3 – 5 V
Výstupný prúd (na kanál)
Špičkový prúd (na kanál)
Odporúčaná frekvencia PWM
Vstupné logické prahy
Pokles napätia / RDS(on) / saturácia
Tepelné limity
PuzdroQFN
Poznámky / varianty

  • Pripojte pin VCC na 3,3 V alebo 5 V.
  • Pripojte pin GND na zem.
  • Použite komunikáciu I2C cez SDA (dáta) a SCL (hodiny).
  • Uistite sa, že na linkách SDA a SCL sú pull-up rezistory.
  • Skontrolujte správne úrovne napätia, aby ste nepoškodili senzor.

Pokyny na zapojenie

arduino_wiring_MPU-6050

Na zapojenie MPU-6050 k Arduinu začnite pripojením pinu VCC modulu MPU-6050 na pin 5V Arduina. Potom pripojte pin GND modulu MPU-6050 na jeden z pinov GND Arduina. Pre komunikáciu I2C pripojte pin SDA modulu MPU-6050 na pin A4 Arduina a pin SCL na pin A5. Uistite sa, že vaše Arduino je nastavené na komunikáciu I2C zahrnutím príslušných knižníc do vášho kódu.

Pred napájaním systému si dôkladne skontrolujte zapojenie. Ak používate breadboard, uistite sa, že sú spojenia pevné a že nedochádza ku skratom. Ak modul nereaguje podľa očakávania, overte zapojenie a skontrolujte adresu I2C modulu MPU-6050 vo vašom kóde.

Príklady kódu a vysvetlenie

Nasledujúci úryvok kódu inicializuje MPU-6050 a začne z neho čítať údaje. Kľúčové identifikátory zahŕňajú mpu6050, čo je inštancia triedy MPU6050, a timer, ktorý sa používa na riadenie časovania výstupu údajov.

MPU6050 mpu6050(Wire);
long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

V tejto funkcii setup inicializujeme sériovú komunikáciu a senzor MPU-6050. Volanie mpu6050.calcGyroOffsets(true) je kľúčové, pretože kalibruje offsety gyroskopu, čím zabezpečuje presné merania.

Vo funkcii loop nepretržite aktualizujeme údaje senzora a vypisujeme ich do sériového monitora. Nasledujúci úryvok kódu ukazuje, ako čítať a vypisovať údaje o teplote a zrýchlení:

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());
}

Tento blok skontroluje, či od posledného výstupu uplynula sekunda. Potom načíta hodnoty teploty a zrýchlenia z MPU-6050 a vypíše ich do sériového monitora. Tieto hodnoty môžete pozorovať, ako sa aktualizujú v reálnom čase.

Demonštrácia / Čo očakávať

Keď je všetko zapojené a kód je nahraný, môžete očakávať, že sa teplota a údaje o zrýchlení budú každú sekundu vypisovať do sériového monitora. Ak nakloníte alebo pohnete MPU-6050, hodnoty zrýchlenia by sa mali zodpovedajúcim spôsobom zmeniť. Majte na pamäti, že nesprávne zapojenie alebo nedostatočné napájanie môže viesť k nepravidelným údajom alebo žiadnym údajom (vo videu o 01:30).

Images

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)
Language: 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)
Language: 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();
    
  }

}

Things you might need

Resources & references

Files📁

Arduino Libraries (zip)

Other files

  • 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