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ýrobca | InvenSense |
|---|---|
| Označenie dielu | MPU-6050 |
| Logické/I-O napätie | 3,3 – 5 V |
| Napájacie napätie | 3,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 | … |
| Puzdro | QFN |
| 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

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).
/*
*
* 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();
}
}
Things you might need
-
AmazonPurchase MPU-6050 from Amazonamzn.to
Resources & references
-
ExternalManufacturer websiteinvensense.com
Files📁
Arduino Libraries (zip)
-
Arduino library for MPU9250
robojax-MPU9250-master.zip3.38 MB
Other files
-
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