INHOUDSOPGAWE:

Real-time MPU-6050/A0-data-aanmelding met Arduino en Android: 7 stappe (met foto's)
Real-time MPU-6050/A0-data-aanmelding met Arduino en Android: 7 stappe (met foto's)

Video: Real-time MPU-6050/A0-data-aanmelding met Arduino en Android: 7 stappe (met foto's)

Video: Real-time MPU-6050/A0-data-aanmelding met Arduino en Android: 7 stappe (met foto's)
Video: Thorium: An energy solution - THORIUM REMIX 2011 2024, Julie
Anonim
Real-time MPU-6050/A0 data-aanmelding met Arduino en Android
Real-time MPU-6050/A0 data-aanmelding met Arduino en Android

Ek was geïnteresseerd in die gebruik van die Arduino vir masjienleer. As 'n eerste stap wil ek 'n realtime (of redelik naby daaraan) data -vertoning en logger bou met 'n Android -toestel. Ek wil versnellingsmeterdata van die MPU-6050 opneem, so ek het die ontwerp ontwerp om die HC-05 op 115200 baud te gebruik. Met hierdie opset kan 4 datakanale met 250 monsters per sekonde oorgedra word.

Die konstruksie het 'n paar stappe:

  • Bou die skild of broodbord
  • Program die Arduino
  • Laai die Android -app van Google Play af of vertak die GitHub en stel dit self saam
  • Koppel die MPU-6050 aan iets interessant wat vibreer (ek het 'n R/C-motor gebruik)
  • Gebruik die Android -toestel om aan te sluit op die Arduino
  • Skets die data, stoor indien u belangstel
  • Voer in Python (of ander platform) in vir verdere gebruik

Laat ons begin!

Stap 1: Bou die skild/broodbord

Bou die skild/broodbord
Bou die skild/broodbord
Bou die skild/broodbord
Bou die skild/broodbord

Dit is die bedradingsdiagram vir die Arduino, HC-05 en die MPU-6050. Benewens die MPU-6050, het ek die analoog ingang A0 aan 'n ligsensor gekoppel om aan te toon dat die ADC werk. Enige 0-5 volt sein kan na die A0 ADC gebring word. Dit is die komponente wat ek vir die bou gebruik het:

  • Arduino Uno
  • HC-05 (Die HC-06 behoort ook te werk, maar my bouwerk was by die HC-05)
  • MPU-6050
  • Vonkfunksionele fotoresistor
  • 10kOhm weerstand (bruin-swart-oranje)

Die meeste HC-05 Bluetooth-modules is standaard 9600 baud. Om die data suksesvol oor te dra, moet u dit herprogrammeer vir 'n 115200 baud -tempo. Daar is 'n goeie HC-05/HC-06 AT Command Instructable wat verduidelik hoe u dit moet doen.

Stap 2: Programmeer die Arduino

Program die Arduino
Program die Arduino
Program die Arduino
Program die Arduino

Ek het die Arduino IDE release 1.6.7 gebruik om die Arduino te programmeer. Die kode kan afgelaai word vanaf die skakels in hierdie stap of vanaf die GitHub -repo. Ek het drie weergawes ingesluit: Firmware125.ino is die 125 hertz weergawe, Firmware250.ino is die 250 hertz weergawe, en Firmware500.ino is die 500 hertz weergawe. Om die Arduino op 500 hertz te laat ry, word die A0 ADC nie versamel nie.

Die firmware bevat 'n horlosie op Pin 9 waarmee ek die tydsberekening nagegaan het. Die spoor toon dat die siklustyd 4 ms is (gelykstaande aan 1/250 hertz). Ek het gevind dat die tydsberekening nie eenvormig sal wees as daar probleme met die seriële skakel is nie.

Die Arduino -kode gebruik wel bitmaskering om 'n kanaalnommer by elke pakkie te voeg omdat monsters soms oor Bluetooth val. Ek gebruik die drie belangrikste stukkies om 'n kanaalnommer op te slaan. Vir getekende heelgetalle is die belangrikste bit (MSB) gereserveer vir die teken. Aangesien ek die MSB vir my adres wil gebruik, eerder as die teken van die heelgetal, moet ek al die getekende versnellingsmeterwaardes omskakel na ongetekende heelgetalle. Ek doen dit deur 32768 by elke waarde te voeg (die MPU -versnellingsmeter ADC -tellings is +32768 tot -32768) en as ongetekende heelgetalle gegooi:

(ongetekende int) ((lank) iAccelData+32767);

Die kanaalnommer is dieselfde vir elke versnellingsmeter en die A0 -poort, sodat 'n pakkie gedaal kan word as die kanaalnommers buite werking is. Vir die pakkies wat van die Bluetooth op die Arduino afkomstig is, is die binêre patroon (die tekens verander bietjie)

(xacc 3 adresbits = 0x00, 13bit ongeteken) (yacc 3 adresbits = 0x01, 13bit ongeteken) (zacc 3 adresbits = 0x02, 13bit ongetekende) (3 adresbits = 0x03, iadc13bit ongetekende)

(xacc 3 adresbits = 0x00, 13bit ongeteken) (yacc 3 adresbits = 0x01, 13bit ongeteken) (zacc 3 adresbits = 0x02, 13bit ongetekende) (3 adresbits = 0x03, iadc13bit ongetekende) (xacc 3 adresbits = 0x00, 13bit ongetekend) (yacc 3 adresbits = 0x01, 13bit ongeteken) (zacc 3 adresbits = 0x02, 13bit ongeteken) (3 adresbits = 0x03, iadc13bit ongeteken) …

As u iets anders as die Accel Plot Android -app gebruik om die Bluetooth -data te lees, is die volgende stappe om die adres te onttrek (ek gebruik die veranderlike name uit die Accel Plot Bluetooth.java -lêer uit die GitHub -repo):

- Lees die 16 ongetekende int

- Pak die hoë byte uit en stoor dit in btHigh.

- Pak die lae byte uit en stoor dit in btLow.

- Haal die adres van btHigh op met: (btHigh >> 5) & 0x07. Hierdie stelling verskuif btHigh 5 bisse na regs en skuif die drie adresbits na die laagste drie registers. Die & teken is 'n logiese EN wat stukkies 4 en hoër dwing om nul te wees en die laaste drie bisse pas by die adresstukkies. Die resultaat van hierdie verklaring is u adres.

U hoef nie bekommerd te wees oor die adresontginning as u Accel Plot gebruik nie.

Stap 3: Laai die Android -app vanaf Google Play of vertak die GitHub

Laai die Android -app vanaf Google Play of vertak die GitHub
Laai die Android -app vanaf Google Play of vertak die GitHub

U het 'n paar keuses om die Android -app op u toestel te laai. As u kodering wil vermy, kan u na 'Accel Plot' soek, en die app moet in die Google Play -winkel verskyn. Volg die winkelinstruksies vir installasie.

My begeerte met hierdie Instructable is regtig om ander aan te moedig om projekte te bou, so ek het die kode ook in 'n GitHub -repo gepubliseer. U behoort dit te kan vertak, te bou en aan te pas soos u dit goedvind. Ek het die kode onder die MIT -lisensie gepubliseer, so geniet dit!

Stap 4: Koppel aan die Arduino aan iets interessants (ek het 'n R/C -motor gebruik)

Koppel aan die Arduino aan iets interessants (ek het 'n R/C -motor gebruik)
Koppel aan die Arduino aan iets interessants (ek het 'n R/C -motor gebruik)

Ek wil die toestel uiteindelik gebruik vir die opsporing van padoppervlakke, en ek het gedink dat 'n klein afstandbeheerde (R/C) motor geskik sou wees. Ek dink dit help in die volgende stap as die aksels kan wees op iets wat beweeg of vibreer.

Stap 5: Gebruik die Android -toestel om aan te sluit op die Arduino

Gebruik die Android -toestel om aan te sluit op die Arduino
Gebruik die Android -toestel om aan te sluit op die Arduino
Gebruik die Android -toestel om aan te sluit op die Arduino
Gebruik die Android -toestel om aan te sluit op die Arduino
Gebruik die Android -toestel om aan te sluit op die Arduino
Gebruik die Android -toestel om aan te sluit op die Arduino

As u dit nog nie gedoen het nie, moet u eers die HC-05 aan u Android-toestel koppel. Ek glo dat u dit op die meeste toestelle kan doen deur na die instellings te gaan. Die standaardpen vir die meeste HC-05-toestelle is 1234 of 1111.

Maak die AccelPlot -program op die Android -toestel oop. As die app oopmaak en voordat u met die HC-05 aansluit, kan u die bemonsteringsnelheid (dit word in die Arduino-kode bepaal), die versnellingsmeterskale (ook in die Arduino-kode) en die aantal monsters wat gestoor moet word, verander.

Sodra hierdie instellings gemaak is, klik op die "Connect" knoppie. Die Bluetooth -toestelle moet verskyn, en u toestel moet gelys word. Kies dit en sodra die kode die verbinding tot stand gebring het, sien u 'n "Connected" roosterbroodjie.

Gebruik die pyltjie terug om terug te keer na Accel Plot. Tik op die "Start Stream" -knoppie om data van die HC-05-toestel te vertoon. U moet ook knoppies beskikbaar hê om die data te stoor of om die frekwensie -gemoduleerde inhoud deur die klankaansluiting te speel.

Stap 6: Verkry en teken die data op

Image
Image
Voer in Python (of ander platform) in vir verdere gebruik
Voer in Python (of ander platform) in vir verdere gebruik

Die "Start Stream" -knoppie moet geaktiveer wees. Tik daarop om data na die skerm te begin stroom.

Die knoppie "Stoor data" sal ook aangeskakel wees. Tik daarop om die data te stoor.

Accel Plot bevat ook 'n opsie om 'n gemoduleerde sein op die klankkanale uit te voer. Die 2 kanale in die Accel Plot -app verwys na die linker- en regterkanale van die audio out -aansluiting op die Android -toestel. Dit is handig as u die MPU-6050-data in 'n aparte datalogstelsel wil plaas, soos 'n National Instruments.

Die video toon 'n voorbeeld van hoe die stelsel data op 'n R/C -motor versamel.

Stap 7: Voer in Python (of ander platform) in vir verdere gebruik

Voer in Python (of ander platform) in vir verdere gebruik
Voer in Python (of ander platform) in vir verdere gebruik

Die lêers word op die Android -toestel gestoor. Die lêers sal gestoor word onder die 'AccelPlot' -gids vir Android API 18 en ouer. Die kode plaas die.dat -lêers in die gids "\ Tablet / Documents / AccelPlot" vir API 19 (KitKat 4.4) en hoër. Ek het probleme ondervind met 'n paar Android -toestelle wat die lêers wys wanneer dit via USB gekoppel is. In sommige gevalle moes ek die Android -toestel herlaai sodat hulle kon verskyn. Ek weet nie hoekom dit is nie, maar daar behoort vier lêers te wees, een vir elke kanaal. Hulle kan oorgedra word na 'n plaaslike gids vir ekstra werk.

Ek het Anaconda/Python 2.7 gebruik om die lêers oop te maak en die data te vertoon. Die lêer "ExploratoryAnalysis.ipynb" het die IPython Notebook -lêer wat al die datalêers sal oopmaak en die steekproefdata kan teken. Voorbeeldlêers word in die GitHub -repo ingesluit. Die data word gestoor as groot-endian 4 byte floats ('> f'), sodat enige ontledingsprogram dit moet kan oopmaak.

Ek het ook 'n eenvoudiger lêer met die naam "ReadDataFiles.ipynb" ingesluit wat wys hoe om in 'n enkele lêer by die naam te lees.

Aanbeveel: