Kako koristiti MPU-6050 akcelerometar i žiroskop modul
MPU-6050 je svestrani senzor koji kombinuje 3-osni akcelerometar i 3-osni žiroskop u jednom paketu. U ovom tutorijalu ćemo istražiti kako povezati ovaj modul sa Arduinom za mjerenje ubrzanja i ugaone brzine. Rezultat će biti jednostavan program koji prikazuje podatke u realnom vremenu sa senzora, omogućavajući vam da pratite i ubrzanje i orijentaciju vašeg uređaja.

Prateći ovaj vodič, naučit ćete kako postaviti hardver, pravilno povezati komponente i napisati potreban kod da MPU-6050 proradi. Ovo će vam pružiti osnovu za daljnje projekte koji uključuju detekciju pokreta i orijentacije. Za dodatnu jasnoću, obavezno pogledajte video koji prati ovaj tutorijal (u videu na 00:00).
Objašnjenje hardvera
Glavna komponenta u ovom projektu je MPU-6050 senzor, koji pruža podatke i akcelerometra i žiroskopa. Akcelerometar mjeri linearno ubrzanje duž X, Y i Z osa, dok žiroskop mjeri brzine rotacije oko tih istih osa. Ova kombinacija čini MPU-6050 odličnim izborom za aplikacije koje zahtijevaju praćenje pokreta.
Dodatno, modul koristi I2C interfejs za komunikaciju, što pojednostavljuje povezivanje i omogućava povezivanje više uređaja na istu magistralu. Senzor se napaja preko VCC pina, koji obično zahtijeva napon između 3.3V i 5V. Uzemljenje se povezuje na zajedničko uzemljenje Arduina.
Detalji iz tehničke dokumentacije
| Proizvođač | InvenSense |
|---|---|
| Oznaka dijela | MPU-6050 |
| Logički/IO napon | 3.3 – 5 V |
| Napon napajanja | 3.3 – 5 V |
| Izlazna struja (po kanalu) | … |
| Maksimalna struja (po kanalu) | … |
| Smjernice za PWM frekvenciju | … |
| Ulazni logički pragovi | … |
| Pad napona / RDS(on) / zasićenje | … |
| Termička ograničenja | … |
| Paket | QFN |
| Napomene / varijante | … |
- Spojite VCC pin na 3.3V ili 5V.
- Spojite GND pin na uzemljenje.
- Koristite I2C komunikaciju preko SDA (podaci) i SCL (takt).
- Osigurajte prisustvo pull-up otpornika na SDA i SCL linijama.
- Provjerite ispravne nivoe napona kako biste izbjegli oštećenje senzora.
Upute za povezivanje

Da biste povezali MPU-6050 sa vašim Arduinom, počnite spajanjem VCC pina MPU-6050 na 5V pin na Arduinu. Zatim spojite GND pin MPU-6050 na jedan od GND pinova na Arduinu. Za I2C komunikaciju, spojite SDA pin MPU-6050 na A4 pin Arduina, a SCL pin na A5 pin. Osigurajte da je vaš Arduino podešen za I2C komunikaciju uključivanjem odgovarajućih biblioteka u vaš kod.
Dvaput provjerite svoje veze prije uključivanja sistema. Ako koristite breadboard, osigurajte da su veze sigurne i da nema kratkih spojeva. Ako modul ne reaguje očekivano, provjerite ožičenje i provjerite I2C adresu MPU-6050 u vašem kodu.
Primjeri koda i objašnjenje
Sljedeći isječak koda inicijalizira MPU-6050 i počinje čitati podatke s njega. Ključni identifikatori uključuju mpu6050, koji je instanca MPU6050 klase, i timer, koji se koristi za kontrolu vremenskog rasporeda izlaza podataka.
MPU6050 mpu6050(Wire);
long timer = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
U ovoj setup funkciji, inicijaliziramo serijsku komunikaciju i MPU-6050 senzor. Poziv mpu6050.calcGyroOffsets(true) je ključan jer kalibrira offsete žiroskopa, osiguravajući tačna očitavanja.
U loop funkciji, kontinuirano ažuriramo podatke senzora i ispisujemo ih na serijski monitor. Sljedeći isječak koda pokazuje kako čitati i ispisati podatke o temperaturi i ubrzanju:
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());
}
Ovaj blok provjerava da li je prošla sekunda od posljednjeg izlaza. Zatim preuzima vrijednosti temperature i ubrzanja sa MPU-6050 i ispisuje ih na serijski monitor. Možete primijetiti da se ove vrijednosti ažuriraju u realnom vremenu.
Demonstracija / Šta očekivati
Kada je sve povezano i kod je uploadan, možete očekivati da će se podaci o temperaturi i ubrzanju ispisivati na serijskom monitoru svake sekunde. Ako nagnete ili pomjerite MPU-6050, vrijednosti ubrzanja bi se trebale promijeniti u skladu s tim. Imajte na umu da nepravilno ožičenje ili nedovoljno napajanje može dovesti do nepravilnih očitavanja ili potpunog izostanka podataka (u videu na 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