Innehållsförteckning:

Realtid MPU-6050/A0 dataloggning med Arduino och Android: 7 steg (med bilder)
Realtid MPU-6050/A0 dataloggning med Arduino och Android: 7 steg (med bilder)

Video: Realtid MPU-6050/A0 dataloggning med Arduino och Android: 7 steg (med bilder)

Video: Realtid MPU-6050/A0 dataloggning med Arduino och Android: 7 steg (med bilder)
Video: Realtid 2024, Juni
Anonim
Realtid MPU-6050/A0 dataloggning med Arduino och Android
Realtid MPU-6050/A0 dataloggning med Arduino och Android

Jag har varit intresserad av att använda Arduino för maskininlärning. Som ett första steg vill jag bygga en realtid (eller ganska nära det) datavisning och logger med en Android -enhet. Jag vill fånga accelerometerdata från MPU-6050 så jag konstruerade byggnaden för att använda HC-05 vid 115200 baud. Med denna konfiguration kan 4 datakanaler överföras med 250 sampel per sekund.

Bygget har några steg:

  • Bygg skölden eller brödbrädan
  • Programmera Arduino
  • Ladda Android -appen från Google Play eller förgrena GitHub och kompilera den själv
  • Anslut MPU-6050 till något intressant som vibrerar (jag använde en R/C-bil)
  • Använd Android -enheten för att ansluta till Arduino
  • Rita upp data, spara om du är intresserad
  • Importera till Python (eller annan plattform) för vidare användning

Låt oss börja!

Steg 1: Bygg skärmen/brödbrädan

Bygg Skölden/brödbrädan
Bygg Skölden/brödbrädan
Bygg Skölden/brödbrädan
Bygg Skölden/brödbrädan

Detta är kopplingsschemat för Arduino, HC-05 och MPU-6050. Förutom MPU-6050 har jag den analoga ingången A0 ansluten till en ljussensor för att visa att ADC: n fungerar. Varje 0-5 volt signal kan föras in i A0 ADC. Det här är komponenterna jag använde för bygget:

  • Arduino Uno
  • HC-05 (HC-06 borde också fungera, men min konstruktion var med HC-05)
  • MPU-6050
  • Sparkfun fotoresistor
  • 10kOhm motstånd (brun-svart-orange)

De flesta HC-05 Bluetooth-moduler har som standard 9600 baud. För att data ska kunna överföras framgångsrikt måste du omprogrammera den för en 115200 baudhastighet. Det finns en bra HC-05/HC-06 AT Command Instructable som förklarar hur man gör.

Steg 2: Programmera Arduino

Programmera Arduino
Programmera Arduino
Programmera Arduino
Programmera Arduino

Jag använde Arduino IDE release 1.6.7 för att programmera Arduino. Koden kan laddas ner från länkarna i det här steget eller från GitHub -repo. Jag har inkluderat tre versioner: Firmware125.ino är versionen på 125 hertz, Firmware250.ino är versionen på 250 hertz och Firmware500.ino är versionen på 500 hertz. För att få Arduino att cykla med 500 hertz samlas inte A0 ADC in.

Firmware inkluderar en klocka på Pin 9 som jag använde för att kontrollera timingen. Spårningen visar att cykeltiden är 4 ms (motsvarande 1/250 hertz). Jag har upptäckt att om det finns problem med seriell länk kommer tidpunkten inte att vara enhetlig.

Arduino -koden använder bitmaskering för att lägga till ett kanalnummer till varje paket eftersom prover ibland faller över Bluetooth. Jag använder de tre viktigaste bitarna för att lagra ett kanalnummer. För signerade heltal är den mest signifikanta biten (MSB) reserverad för tecknet. Eftersom jag vill använda MSB för min adress, snarare än heltalets tecken, måste jag konvertera alla signerade accelerometervärden till osignerade heltal. Jag gör detta genom att lägga till 32768 till varje värde (MPU -accelerometerns ADC -antal är +32768 till -32768) och kastas som osignerade heltal:

(osignerad int) ((lång) iAccelData+32767);

Kanalnumret är samma för varje accelerometer och A0 -porten så att ett tappat paket kan detekteras om kanalnumren är ur funktion. För paketen som kommer från Bluetooth på Arduino är det binära mönstret (tecknen är bitvis skiftande):

(xacc 3 adressbitar = 0x00, 13bit osignerade) (yacc 3 adressbitar = 0x01, 13bit osignerade) (zacc 3 adressbitar = 0x02, 13bit osignerade) (3 adressbitar = 0x03, iadc13bit osignerade)

(xacc 3 adressbitar = 0x00, 13bit osignerade) (yacc 3 adressbitar = 0x01, 13bit osignerade) (zacc 3 adressbitar = 0x02, 13bit osignerade) (3 adressbitar = 0x03, iadc13bit osignerade) (xacc 3 adressbitar = 0x00, 13bit osignerad) (yacc 3 adressbitar = 0x01, 13bit osignerade) (zacc 3 adressbitar = 0x02, 13bit osignerade) (3 adressbitar = 0x03, iadc13bit osignerade) …

Om du använder något annat än Accel Plot Android -appen för att läsa Bluetooth -data, här är stegen för att extrahera adressen (jag använder variabelnamnen från Accel Plot Bluetooth.java -filen från GitHub -repo):

- Läs i de 16 osignerade int

- Extrahera den höga byten och spara den till btHigh.

- Extrahera den låga byten och spara den till btLow.

- Hämta adressen från btHigh med: (btHigh >> 5) & 0x07. Detta uttalande flyttar btHigh 5 bitar till höger och flyttar de tre adressbitarna till de tre lägsta registren. & -Tecknet är ett logiskt OCH som tvingar bitar 4 och högre att vara noll och de tre sista bitarna för att matcha adressbitarna. Resultatet av detta uttalande är din adress.

Du behöver inte oroa dig för adressuttaget om du använder Accel Plot.

Steg 3: Ladda Android -appen från Google Play eller förgrena GitHub

Ladda Android -appen från Google Play eller förgrena GitHub
Ladda Android -appen från Google Play eller förgrena GitHub

Du har ett par val för att ladda Android -appen på din enhet. Om du vill undvika kodning kan du söka efter "Accel Plot" och appen ska komma upp i Google Play -butiken. Följ butiksinstruktionerna för installation.

Min önskan med denna Instructable är verkligen att uppmuntra andra att bygga projekt så jag har också publicerat koden i en GitHub -repo. Du borde kunna förgrena detta, bygga det och ändra det som du tycker passar. Jag publicerade koden under MIT -licensen så ha kul!

Steg 4: Anslut till Arduino till något intressant (jag använde en R/C -bil)

Anslut till Arduino till något intressant (jag använde en R/C -bil)
Anslut till Arduino till något intressant (jag använde en R/C -bil)

Jag vill så småningom använda enheten för detektering av vägytor så jag trodde att en liten fjärrstyrd (R/C) bil skulle vara lämplig. Jag tror att det hjälper i nästa steg om accellerna kan vara på något som rör sig eller vibrerar.

Steg 5: Använd Android -enheten för att ansluta till Arduino

Använd Android -enheten för att ansluta till Arduino
Använd Android -enheten för att ansluta till Arduino
Använd Android -enheten för att ansluta till Arduino
Använd Android -enheten för att ansluta till Arduino
Använd Android -enheten för att ansluta till Arduino
Använd Android -enheten för att ansluta till Arduino

Om du inte redan har gjort det måste du först koppla ihop HC-05 med din Android-enhet. Jag tror att på de flesta enheter kan du göra detta genom att gå till inställningar. Standardnålen för de flesta HC-05-enheter är 1234 eller 1111.

Öppna AccelPlot -appen på Android -enheten. När appen öppnas och innan du ansluter till HC-05 kan du ändra samplingsfrekvens (detta är inställt i Arduino-koden), accelerometervågar (även inställt i Arduino-koden) och antalet prov som ska sparas.

När dessa inställningar har gjorts klickar du på knappen "Anslut". Det ska ta upp Bluetooth -enheterna och din enhet ska listas. Välj den och när koden upprättar anslutningen ser du en "Connected" toast dyker upp.

Använd tillbaka -pilknappen för att återgå till Accel Plot. Tryck på "Start Stream" -knappen för att visa data från HC-05-enheten. Du bör också använda knapparna för att spara data eller spela det frekvensmodulerade innehållet via ljuduttaget.

Steg 6: Skaffa och planera data

Image
Image
Importera till Python (eller annan plattform) för vidare användning
Importera till Python (eller annan plattform) för vidare användning

Knappen "Start Stream" bör vara aktiverad. Tryck på den för att börja strömma data till skärmen.

Knappen "Spara data" aktiveras också, tryck på den för att lagra data.

Accel Plot innehåller också ett alternativ för att mata ut en modulerad signal på ljudkanalerna. De två kanalerna i Accel Plot -appen hänvisar till vänster och höger kanal i ljudutgången på Android -enheten. Detta är användbart om du vill föra MPU-6050-data till ett separat dataloggningssystem, som ett National Instruments.

Videon visar ett exempel på hur systemet samlar in data på en R/C -bil.

Steg 7: Importera till Python (eller annan plattform) för vidare användning

Importera till Python (eller annan plattform) för vidare användning
Importera till Python (eller annan plattform) för vidare användning

Filerna sparas på Android -enheten. Filerna kommer att lagras under katalogen "AccelPlot" för Android API 18 och äldre. Koden placerar.dat -filerna i mappen "\ Tablet / Documents / AccelPlot" för API 19 (KitKat 4.4) och högre. Jag har haft problem med att vissa Android -enheter visar filerna när de är anslutna via USB. I vissa fall har jag fått starta om Android -enheten för att få dem att dyka upp. Vet inte varför det är så, men det ska finnas fyra filer, en för varje kanal. De kan kopieras över till en lokal katalog för ytterligare arbete.

Jag använde Anaconda/Python 2.7 för att öppna filerna och visa data. Filen "ExploratoryAnalysis.ipynb" har filen IPython Notebook som öppnar alla datafiler och plottar provdata. Exempelfiler ingår i GitHub -repo. Data sparas som big-endian 4 byte floats ('> f') så alla analysprogram bör kunna öppna dem.

Jag har också inkluderat en enklare fil som heter "ReadDataFiles.ipynb" som visar hur man läser i en enda fil med namn.

Rekommenderad: