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

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
| 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ă