Tartalomjegyzék:

Valós idejű MPU-6050/A0 adatnaplózás Arduino és Android segítségével: 7 lépés (képekkel)
Valós idejű MPU-6050/A0 adatnaplózás Arduino és Android segítségével: 7 lépés (képekkel)

Videó: Valós idejű MPU-6050/A0 adatnaplózás Arduino és Android segítségével: 7 lépés (képekkel)

Videó: Valós idejű MPU-6050/A0 adatnaplózás Arduino és Android segítségével: 7 lépés (képekkel)
Videó: Besiege - Cool flying bicopter drone 2024, Július
Anonim
Valós idejű MPU-6050/A0 adatnaplózás Arduino és Android segítségével
Valós idejű MPU-6050/A0 adatnaplózás Arduino és Android segítségével

Érdekelt az Arduino használata gépi tanuláshoz. Első lépésként egy valós idejű (vagy ahhoz közel álló) adatkijelzőt és naplózót szeretnék felépíteni egy Android -eszközzel. A gyorsulásmérő adatait szeretném rögzíteni az MPU-6050-ből, ezért a konstrukciót úgy terveztem, hogy a HC-05-t használja 115200 baudon. Ezzel a konfigurációval 4 adatcsatorna továbbítható 250 mintával másodpercenként.

Az építésnek néhány lépése van:

  • Építsd meg a pajzsot vagy a kenyértáblát
  • Programozza be az Arduino programot
  • Töltse be az Android -alkalmazást a Google Playről, vagy telepítse a GitHub -ot, és állítsa össze saját maga
  • Csatlakoztassa az MPU-6050-t valami érdekes, vibráló dologhoz (én R/C autót használtam)
  • Az Android -eszközzel csatlakozzon az Arduino -hoz
  • Ábrázolja az adatokat, ha érdekli, mentse el
  • Importálja a Pythonba (vagy más platformra) további használatra

Lássunk neki!

1. lépés: Készítse el a pajzsot/kenyértáblát

Építsd meg a pajzsot/kenyértáblát
Építsd meg a pajzsot/kenyértáblát
Építsd meg a pajzsot/kenyértáblát
Építsd meg a pajzsot/kenyértáblát

Ez az Arduino, a HC-05 és az MPU-6050 kapcsolási rajza. Az MPU-6050 mellett az A0 analóg bemenetet egy fényérzékelőhöz kötöttem, jelezve, hogy az ADC működik. Bármilyen 0-5 voltos jelet be lehet hozni az A0 ADC-be. Ezeket az alkatrészeket használtam a konstrukcióhoz:

  • Arduino Uno
  • HC-05 (A HC-06-nak is működnie kell, de a konstrukcióm a HC-05-nél volt)
  • MPU-6050
  • Sparkfun fotorezisztor
  • 10 kOhm ellenállás (barna-fekete-narancs)

A legtöbb HC-05 Bluetooth modul alapértelmezés szerint 9600 baud. Az adatok sikeres továbbításához át kell programoznia 115200 baud sebességre. Van egy jó HC-05/HC-06 AT Command Instructable, amely elmagyarázza, hogyan kell csinálni.

2. lépés: Programozza be az Arduino programot

Programozza be az Arduino programot
Programozza be az Arduino programot
Programozza be az Arduino programot
Programozza be az Arduino programot

Az Arduino IDE 1.6.7 kiadását használtam az Arduino programozásához. A kód letölthető a linkekből ebben a lépésben vagy a GitHub repóból. Három verziót adtam meg: a Firmware125.ino a 125, a Firmware250.ino a 250 hertzes, a Firmware500.ino pedig az 500 hertzes verzió. Ahhoz, hogy az Arduino 500 hertz sebességgel ciklusozhasson, az A0 ADC -t nem gyűjtik.

A firmware tartalmaz egy órát a 9 -es tűn, amellyel ellenőriztem az időzítést. A nyomkövetés azt mutatja, hogy a ciklusidő 4 ms (1/250 hertznek felel meg). Azt tapasztaltam, hogy ha soros kapcsolati problémák vannak, az időzítés nem lesz egységes.

Az Arduino kód bitmaszkolást használ a csatorna számának minden csomaghoz való hozzáadásához, mivel a minták néha átesnek a Bluetooth -on. A három legjelentősebb bitet használom a csatorna számának tárolására. Az aláírt egész számok esetében a legjelentősebb bit (MSB) a jel számára van fenntartva. Mivel az MSB -t akarom használni a címemhez, nem pedig az egész szám előjelét, az aláírt gyorsulásmérő összes értékét át kell alakítanom előjel nélküli egész számokká. Ezt úgy teszem, hogy minden értékhez 32768 -at adok (az MPU gyorsulásmérő ADC -száma +32768 és -32768 között van), és előjel nélküli egész számként adom át:

(unsigned int) ((hosszú) iAccelData+32767);

A csatorna száma minden gyorsulásmérőnél és az A0 -portnál azonos, így az elejtett csomag észlelhető, ha a csatornaszámok nem működnek. Az Arduino Bluetooth-járól érkező csomagok esetében a bináris minta a következő (a jelek bölcsen változnak):

(xacc 3 címbit = 0x00, 13 bites előjel nélküli) (yacc 3 címbit = 0x01, 13 bites előjel nélküli) (zacc 3 címbit = 0x02, 13 bites előjel nélküli) (3 címbit = 0x03, iadc13bit alá nem írt)

(xacc 3 címbit = 0x00, 13 bites előjel nélküli) (yacc 3 címbit = 0x01, 13 bites előjel nélküli) (zacc 3 címbit = 0x02, 13 bites előjel nélküli) (3 címbit = 0x03, iadc13bit aláírás nélküli) (xacc 3 címbit = 0x00, 13 bites előjel nélküli) (yacc 3 címbit = 0x01, 13 bites előjel nélküli) (zacc 3 címbit = 0x02, 13 bites előjel nélküli) (3 címbit = 0x03, iadc13bit alá nem írva)…

Ha az Accel Plot Android alkalmazáson kívül mást használ a Bluetooth -adatok olvasásához, akkor tegye a következő lépéseket a cím kinyeréséhez (a változók neveit használom a GitHub repóból származó Accel Plot Bluetooth.java fájlból):

- Olvassa el a 16 alá nem írt int

- Bontsa ki a magas bájtot, és mentse btHigh -ba.

- Bontsa ki az alacsony bájtot, és mentse a btLow fájlba.

- A cím letöltése a btHigh -ból: (btHigh >> 5) & 0x07. Ez az utasítás a btHigh 5 bitet jobbra tolja, és a három címbitet a legalacsonyabb három regiszterbe helyezi. A & jel logikus ÉS, amely arra kényszeríti a 4 -es és magasabb biteket, hogy nulla legyen, az utolsó három bit pedig egyezzen a címbitekkel. Ennek a nyilatkozatnak az eredménye az Ön címe.

Az Accel Plot használata esetén nem kell aggódnia a címkivonás miatt.

3. lépés: Töltse be az Android -alkalmazást a Google Playről vagy a GitHub fiókjából

Töltse be az Android alkalmazást a Google Playről vagy a GitHub fiókjából
Töltse be az Android alkalmazást a Google Playről vagy a GitHub fiókjából

Pár lehetősége van az Android -alkalmazás betöltésére az eszközére. Ha el akarja kerülni a kódolást, keressen rá az „Accel Plot” kifejezésre, és az alkalmazásnak fel kell tűnnie a Google Play áruházban. A telepítéshez kövesse az áruház utasításait.

Ezzel az Instructable -nal az a vágyam, hogy bátorítsak másokat projektek építésére, ezért közzétettem a kódot egy GitHub repóban. Képesnek kell lennie arra, hogy ezt elágazza, felépítse és módosítsa, ahogy jónak látja. A kódot az MIT licenc alatt tettem közzé, így jó szórakozást!

4. lépés: Csatlakozzon az Arduino -hoz valami érdekeshez (R/C autót használtam)

Csatlakozás az Arduino -hoz valami érdekeshez (R/C autót használtam)
Csatlakozás az Arduino -hoz valami érdekeshez (R/C autót használtam)

Szeretném végül használni az eszközt az útfelület észlelésére, ezért úgy gondoltam, hogy egy kis távirányítású (R/C) autó megfelelő lenne. Azt hiszem, a következő lépésben segít, ha az ékezetek olyan dolgokon lehetnek, amelyek mozognak vagy rezegnek.

5. lépés: Az Android -eszköz használatával csatlakozzon az Arduino -hoz

Használja az Android -eszközt az Arduino -hoz való csatlakozáshoz
Használja az Android -eszközt az Arduino -hoz való csatlakozáshoz
Használja az Android -eszközt az Arduino -hoz való csatlakozáshoz
Használja az Android -eszközt az Arduino -hoz való csatlakozáshoz
Használja az Android -eszközt az Arduino -hoz való csatlakozáshoz
Használja az Android -eszközt az Arduino -hoz való csatlakozáshoz

Ha még nem tette meg, először párosítania kell a HC-05 készüléket Android-eszközével. Úgy gondolom, hogy a legtöbb eszközön ezt a beállításoknál teheti meg. A legtöbb HC-05 eszköz alapértelmezett csapja 1234 vagy 1111 lesz.

Nyissa meg az AccelPlot alkalmazást az Android -eszközön. Amikor az alkalmazás megnyílik, és mielőtt csatlakozna a HC-05-hez, módosíthatja a mintavételi gyakoriságot (ez az Arduino kódban van beállítva), a gyorsulásmérő skálákat (szintén az Arduino kódban van beállítva) és a mentendő minták számát.

A beállítások elvégzése után kattintson a "Csatlakozás" gombra. Fel kell hívnia a Bluetooth -eszközöket, és fel kell tüntetnie az eszközét. Válassza ki, és amint a kód létrehozza a kapcsolatot, megjelenik egy "Connected" pirítós.

A vissza nyílgombbal térjen vissza az Accel Plot -hez. Érintse meg a "Stream indítása" gombot a HC-05 eszköz adatainak megjelenítéséhez. Az adatok mentéséhez vagy a frekvenciamodulált tartalom audiocsatlakozón keresztül történő lejátszásához szintén rendelkezésre kell állnia a gombokkal.

6. lépés: Az adatok beszerzése és ábrázolása

Image
Image
Importálja a Pythonba (vagy más platformra) további használatra
Importálja a Pythonba (vagy más platformra) további használatra

A "Stream indítása" gombot engedélyezni kell. Érintse meg, hogy megkezdje az adatok streamelését a képernyőre.

Az "Adatok mentése" gomb is engedélyezve lesz, koppintson rá az adatok tárolásához.

Az Accel Plot tartalmaz egy lehetőséget arra is, hogy modulált jelet adjon ki az audiocsatornákon. Az Accel Plot alkalmazás 2 csatornája az Android -eszköz audio kimenetének bal és jobb csatornájára utal. Ez akkor hasznos, ha az MPU-6050 adatokat külön adatnaplózó rendszerbe szeretné hozni, például a National Instruments-be.

A videó példát mutat arra, hogy a rendszer adatokat gyűjt egy R/C autóról.

7. lépés: Importálás Pythonba (vagy más platformra) további használatra

Importálja a Pythonba (vagy más platformra) további használatra
Importálja a Pythonba (vagy más platformra) további használatra

A fájlokat az Android -eszközre menti. A fájlok az "AccelPlot" könyvtárban lesznek tárolva az Android API 18 és régebbi verzióihoz. A kód a.dat fájlokat a "\ Tablet / Documents / AccelPlot" mappába helyezi az API 19 (KitKat 4.4) és újabb verzióihoz. Problémáim adódtak néhány Android -eszközzel, amelyek USB -n keresztül csatlakoztatva jelenítik meg a fájlokat. Bizonyos esetekben újra kellett indítanom az Android -eszközt, hogy megjelenjenek. Nem tudom, miért van ez, de négy fájlnak kell lennie, egy -egy csatornánként. További munkák céljából átmásolhatók egy helyi könyvtárba.

A fájlok megnyitásához és az adatok megjelenítéséhez Anaconda/Python 2.7 -et használtam. Az "ExploratoryAnalysis.ipynb" fájl rendelkezik az IPython Notebook fájllal, amely megnyitja az összes adatfájlt és ábrázolja a mintaadatokat. A mintafájlok szerepelnek a GitHub repóban. Az adatokat nagyméretű 4 bájtos úszóként ('> f') menti a rendszer, így bármely elemző programnak képesnek kell lennie megnyitni őket.

Van egy egyszerűbb "ReadDataFiles.ipynb" nevű fájlom is, amely megmutatja, hogyan kell egyetlen fájlban olvasni név szerint.

Ajánlott: