3 tengelyes gyorsulás- és helyzetérzékelő Arduino-val

Ez a GY-521 modulra telepített MPU-6050 érzékelő chipről szól. Ennek a 3 tengelyes giroszkópnak és a 3 tengelyes gyorsulásérzékelőnek a segítségével egyidejűleg fel lehet ismerni 6 szabadságfokot (DOF = "szabadság fokai"). Az érzékelő képes mérni a környezeti hőmérsékletet is.

tengelyes
Ábra: GY-521 modul

A GY-521 alapvető jellemzői (a gyártó szerint)

  • Chip: MPU-6050 (az InvenSense gyártótól)
  • 16 bites AD átalakító
  • Gyorsulásmérő tartomány: ± 2, ± 4, ± 8, ± 16g
  • Giroszkóp tartomány: ± 250 °, 500 °, 1000 °, 2000 °/s
  • Feszültségtartomány: 3,3 V - 5 V (feszültségszabályozó = alacsony kiesésű LDO a modulon)

A GY-521 belső felépítése

A modul I²C busszal rendelkezik, amelyen keresztül egy mikrovezérlő - például egy Arduino - könnyen csatlakoztatható. Lehetséges, hogy a 3,3 V nem elegendő az I²C busz megfelelő működéséhez, ezért - ha lehetséges - mindig 5 V-ot kell tápegységként használni.
A modul felhúzási ellenállásokkal rendelkezik az I²C busz számára, amelyek néha 10kΩ, néha pedig 2,2KΩ lehetnek. Ez utóbbi érték meglehetősen alacsony, ami problémákat okozhat, ha más érzékelő modulokat használnak. Itt egy további, külső felhúzási ellenállás segíthet.
Néhány GY-521 modul hibás (vagy rossz) kondenzátorral rendelkezik, ami magas zajhoz vezethet a mérések során.

Ábra: A GY-521 modul 2,2KΩ felhúzási ellenállása

Az érzékelő rendelkezik egy DMP egységgel ("Digital Motion Processor") is, amely firmware-rel programozható, és lehetővé teszi az összetettebb számítások elvégzését közvetlenül az érzékelő chipen. Nyilvánvalóan azonban az InvenSense nem tesz közzé ehhez elegendő specifikációt, hogy ezeket a lehetőségeket a fordított mérnöki úton meg lehetne nyitni.

Ábra: A GY-521 modul belső kapcsolási rajza

A GY-521 csatlakozói

Pin Pin funkció Arduino Uno
VCC Tápellátás (3,3 V – 5 V) (belső feszültségszabályozó) 3,3 V vagy 5 V
GND Tömeg/föld GND
SCL Soros óra (I²C) A5
SDA Soros adatok (I²C) A4
XDA Kiegészítő adatok (= I²C törzssoros adatok, a modul külső modulokhoz történő csatlakoztatásához) (itt nem használatos)
XCL Kiegészítő óra (= I²C master soros óra, a modul külső modulokhoz történő csatlakoztatásához) (itt nem használatos)
AD0 Az I²C cím megváltozása:
LOW: 0x68
MAGAS: 0x69
GND
INT Digitális kimenet megszakítása (opcionális csatlakozás több modul soros csatlakoztatásához) (itt nem használatos)

Felhasznált alkatrészek

  • Alapvető eszközök és források
  • Arduino UNO (vagy kompatibilis kártya)
  • GY-521 modul
  • Dugaszolható kábel ("jumper kábel")
  • Kenyérlemez

Opcionális szoftverkönyvtár: I2Cdevlib és MPU6050 kód

Építkezés

1. példa: A nyers adatok kimenete a soros konzolon

Az alábbi vázlat vezérli a GY-521 modult, rögzített időközönként (itt: 1 s) beolvassa az összes rendelkezésre álló adatot, majd kimeneti a soros konzolra. Ez a nyers adat könnyen olvasható. Csak az "alvó üzemmódot" kell kikapcsolni, és most leolvashatók a giroszkóp, a gyorsulásérzékelő és a hőmérsékletérzékelő érzékelőjének értékei. A Wire.requestFrom (MPU6050_ADRESS, 7 * 2, true) pontban a regiszter 14 bájtját olvassák fel. Ennek oka, hogy mind a 7 rendelkezésre álló érzékelő által mért érték 2 bájttal rendelkezik (= 16 bit).

vázlat

Eredmény

Az Arduino IDE az 1.6.6-os verziótól kezdve az úgynevezett soros plotter elérhető a soros konzol mellett. Annak érdekében, hogy ezt használni lehessen, az értékeket szóközökkel (vagy tabulátorokkal) elválasztják, és a Serial.print () paranccsal kimeneti eredményeket kapnak, és sortöréssel zárják le, például Serial.println (). Így követhetők grafikusan a kimeneti értékek:

Ábra: A nyers adatok kimenete a soros plotterben

3. példa: Mérje meg a szögeket az MPU-6050 készülékkel

Az érzékelő adatainak kiolvasása után az alábbi vázlat kiszámítja az érzékelő helyes szögét, és ezt sorban kimeneti a soros konzolra.

vázlat

Eredmény

2. példa: Grafikus kimenet a "feldolgozásban"

Az érzékelő funkcionalitásának jobb képviselete érdekében a meghatározott értékeket most átvisszük a Processingba, és ott valós időben megjelenítjük. A vázlatok a "Geek Mom Projects" weboldalról származnak

Ábra: A soros konzol adatainak kimenete Videó: Élő bemutató feldolgozás közben

"Adafruit_MPU6050" könyvtár

Ha az Adafruit_MPU6050 könyvtárat használja, akkor tisztábban érheti el az MPU6050 értékeit, és nagyon egyszerűen használhatja a modul alvó módját is. Különösen érdekes lehet ez az akkumulátorral működtetett projektek esetében, ahol meg kell takarítani az áramot. Amint a következő példában látható, az MPU6050 értékeit először normál módon kiolvassuk referenciaként és elküldjük a soros plotternek. A második mód a ciklus mód, amely bizonyos időközönként mér, és így az adatok valamivel durvább felbontását eredményezi. A harmadik mód a modult alvó üzemmódba kapcsolja, vagyis nem végeznek újabb méréseket. Az utolsó mérési adatok azonban továbbra is kiolvashatók a modul regisztereiből.

Ábra: A nyers adatok kimenete a soros plotterben

"MPU6050_light" könyvtár

Egy másik hasznos könyvtár az MPU6050_light, amellyel például a szomszédos szögeket nagyon egyszerűen ki lehet olvasni:

Ábra: A szögadatok kimenete a soros konzolon