Search Code

Kako koristiti MPU-6050 akcelerometar i žiroskop modul

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 dijelaMPU-6050
Logički/IO napon3.3 – 5 V
Napon napajanja3.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
PaketQFN
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

arduino_wiring_MPU-6050

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

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