Senzor de accelerație și poziție pe 3 axe cu Arduino

Este vorba despre cipul senzorului MPU-6050 instalat pe modulul GY-521. Folosind acest giroscop cu 3 axe și senzorul de accelerație cu 3 axe, se pot recunoaște simultan 6 grade de libertate (DOF = "Degrees of Freedom"). Senzorul poate măsura, de asemenea, temperatura ambiantă.

senzor
Fig.: Modulul GY-521

Caracteristicile principale ale GY-521 (conform producătorului)

  • Cip: MPU-6050 (de la producătorul InvenSense)
  • Convertor AD pe 16 biți
  • Gama accelerometrului: ± 2, ± 4, ± 8, ± 16g
  • Domeniul giroscopului: ± 250 °, 500 °, 1000 °, 2000 °/s
  • Gama de tensiune: 3,3 V - 5 V (regulator de tensiune = LDO scăzut scăzut pe modul)

Structura internă a GY-521

Modulul are o magistrală I²C prin care se poate conecta cu ușurință un microcontroler - ca un Arduino. Este posibil ca 3,3V să nu fie suficient pentru funcționarea corectă a magistralei I²C, deci - dacă este posibil - 5V ar trebui să fie întotdeauna folosit ca sursă de alimentare.
Modulul are rezistențe de tracțiune pentru magistrala I²C, care poate fi uneori 10kΩ și alteori 2.2KΩ. Această din urmă valoare este destul de mică, ceea ce poate duce la probleme dacă se utilizează alte module de senzori. Un rezistor de tracțiune extern suplimentar ar trebui să vă ajute aici.
Unele dintre modulele GY-521 au condensatorul greșit (sau rău), ceea ce poate duce la zgomot ridicat în măsurători.

Fig.: Rezistențe de tracțiune de 2,2 KΩ ale modulului GY-521

Senzorul are și o unitate DMP („Digital Motion Processor”), care poate fi programată cu firmware și permite efectuarea unor calcule mai complexe direct pe cipul senzorului. Aparent, InvenSense nu publică suficiente specificații pentru acest lucru, astfel încât aceste posibilități ar putea fi deschise prin inginerie inversă.

Fig.: Diagrama circuitului intern al modulului GY-521

Conexiuni ale GY-521

Funcția Pin Pin Arduino Uno
VCC Alimentare (3.3V la 5V) (regulator de tensiune intern) 3,3V sau 5V
GND Masă/sol GND
SCL Ceas serial (I²C) A5
SDA Date seriale (I²C) A4
XDA Date auxiliare (= date seriale master I²C, pentru a conecta modulul la module externe) (nu este folosit aici)
XCL Ceas auxiliar (= I²C master serial clock, pentru a conecta modulul la module externe) (nu este folosit aici)
AD0 Schimbarea adresei I²C:
MINIM: 0x68
ÎNALT: 0x69
GND
INT Ieșire digitală întreruptă (conexiune opțională pentru conectarea mai multor module în serie) (nu este folosit aici)

Componente utilizate

  • Instrumente și resurse de bază
  • Arduino UNO (sau placa compatibilă)
  • Modulul GY-521
  • Cablu plug-in („cablu jumper”)
  • Breadboard

Bibliotecă software opțională: cod I2Cdevlib și cod MPU6050

constructie

Ex. 1: ieșirea datelor brute în consola serială

Următoarea schiță controlează modulul GY-521, citește toate datele disponibile într-un interval de timp fixat (aici: 1s) și apoi le transmite consolelor seriale. Aceste date brute sunt ușor de citit. Trebuie doar să dezactivați „modul sleep” și acum pot fi citite valorile senzorilor giroscopului, senzorului de accelerație și senzorului de temperatură. La punctul Wire.requestFrom (MPU6050_ADRESS, 7 * 2, adevărat) se citesc 14 octeți din registru. Acest lucru se datorează faptului că toate cele 7 valori disponibile ale senzorului măsurat au 2 octeți (= 16 biți).

schiță

Rezultat

În Arduino IDE de la versiunea 1.6.6, așa-numitul plotter serial este disponibil în plus față de consola serială. Pentru a putea utiliza acest lucru, valorile sunt separate prin spații (sau file) cu Serial.print () și tipărite cu o întrerupere de linie, de ex. Serial.println () finalizat. Acesta este modul în care valorile de ieșire pot fi urmărite grafic:

Fig.: Ieșirea datelor brute în plotterul serial

Ex. 3: Măsurați unghiurile cu MPU-6050

Următoarea schiță calculează unghiul corect al senzorului după citirea datelor senzorului și le transmite pe rând la consola serială.

schiță

Rezultat

Ex. 2: ieșire grafică în „Procesare”

Pentru a reprezenta mai bine funcționalitatea senzorului, valorile determinate sunt acum transferate în Procesare și vizualizate acolo în timp real. Schițele sunt de pe site-ul web "Proiecte mama Geek"

Fig.: Ieșirea datelor din consola serial Video: demonstrație live în procesare

Biblioteca „Adafruit_MPU6050”

Dacă utilizați biblioteca Adafruit_MPU6050, puteți accesa valorile MPU6050 mai clar și puteți utiliza modul de repaus al modulului foarte ușor. Acest lucru poate avea un interes deosebit în proiectele cu baterii în care trebuie economisită energie electrică. Așa cum se arată în exemplul următor, valorile MPU6050 sunt citite mai întâi în mod normal ca referință și trimise către plotterul serial. Al doilea mod este modul ciclului, care măsoară la anumite intervale și astfel rezultă o rezoluție oarecum mai grea a datelor. Al treilea mod pune modulul în modul de repaus, adică nu se mai fac măsurători. Cu toate acestea, ultimele date de măsurare pot fi citite în continuare din registrele modulului.

Fig.: Ieșirea datelor brute în plotterul serial

Biblioteca „MPU6050_light”

O altă bibliotecă utilă este MPU6050_light, cu care puteți ex. poate citi foarte ușor unghiurile adiacente:

Fig.: Ieșirea datelor unghiului în consola serială