Innholdsfortegnelse:

Sanntids MPU-6050/A0 datalogging med Arduino og Android: 7 trinn (med bilder)
Sanntids MPU-6050/A0 datalogging med Arduino og Android: 7 trinn (med bilder)

Video: Sanntids MPU-6050/A0 datalogging med Arduino og Android: 7 trinn (med bilder)

Video: Sanntids MPU-6050/A0 datalogging med Arduino og Android: 7 trinn (med bilder)
Video: Amazing arduino project 2024, Juli
Anonim
Sanntids MPU-6050/A0 datalogging med Arduino og Android
Sanntids MPU-6050/A0 datalogging med Arduino og Android

Jeg har vært interessert i å bruke Arduino for maskinlæring. Som et første trinn vil jeg bygge en sanntids (eller ganske nær den) datavisning og logger med en Android -enhet. Jeg vil fange akselerometerdata fra MPU-6050, så jeg designet konstruksjonen for å bruke HC-05 på 115200 baud. Med denne konfigurasjonen kan 4 datakanaler overføres med 250 prøver per sekund.

Bygget har noen få trinn:

  • Bygg skjoldet eller brødbrettet
  • Programmer Arduino
  • Last Android -appen fra Google Play eller gren GitHub og kompiler den selv
  • Koble MPU-6050 til noe interessant som vibrerer (jeg brukte en R/C-bil)
  • Bruk Android -enheten for å koble til Arduino
  • Plott dataene, lagre hvis du er interessert
  • Importer til Python (eller annen plattform) for videre bruk

La oss komme i gang!

Trinn 1: Bygg skjoldet/brødbrettet

Bygg skjoldet/brødbrettet
Bygg skjoldet/brødbrettet
Bygg skjoldet/brødbrettet
Bygg skjoldet/brødbrettet

Dette er koblingsskjemaet for Arduino, HC-05 og MPU-6050. I tillegg til MPU-6050 har jeg den analoge inngangen A0 koblet til en lyssensor for å vise at ADC fungerer. Ethvert 0-5 volt signal kan bringes inn i A0 ADC. Dette er komponentene jeg brukte til bygget:

  • Arduino Uno
  • HC-05 (HC-06 burde også fungere, men min konstruksjon var med HC-05)
  • MPU-6050
  • Sparkfun fotoresistor
  • 10kOhm motstand (brun-svart-oransje)

De fleste HC-05 Bluetooth-moduler har som standard 9600 baud. For at dataene skal overføres vellykket, må du omprogrammere dem for en 115200 baudhastighet. Det er en god HC-05/HC-06 AT Command Instructable som forklarer hvordan du gjør det.

Trinn 2: Programmer Arduino

Programmer Arduino
Programmer Arduino
Programmer Arduino
Programmer Arduino

Jeg brukte Arduino IDE -utgivelsen 1.6.7 til å programmere Arduino. Koden kan lastes ned fra koblingene i dette trinnet eller fra GitHub -repoen. Jeg har inkludert tre versjoner: Firmware125.ino er 125 hertz -versjonen, Firmware250.ino er 250 hertz -versjonen, og Firmware500.ino er 500 hertz -versjonen. For å få Arduino til å sykle på 500 hertz, samles ikke A0 ADC.

Fastvaren inkluderer en klokke ut på Pin 9 som jeg brukte til å sjekke timingen. Sporet viser at syklustiden er 4 ms (tilsvarer 1/250 hertz). Jeg har funnet ut at hvis det er problemer med seriell kobling, vil timingen ikke være ensartet.

Arduino -koden bruker bitmaskering for å legge til et kanalnummer i hver pakke fordi prøver noen ganger faller over Bluetooth. Jeg bruker de tre viktigste bitene til å lagre et kanalnummer. For signerte heltall er den mest signifikante biten (MSB) reservert for tegnet. Siden jeg vil bruke MSB for adressen min, i stedet for helhetstegnet, må jeg konvertere alle signerte akselerometerverdier til usignerte heltall. Jeg gjør dette ved å legge til 32768 til hver verdi (MPU -akselerometerets ADC -tall er +32768 til -32768) og kastes som usignerte heltall:

(usignert int) ((lang) iAccelData+32767);

Kanalnummeret er det samme for hvert akselerometer og A0 -porten, slik at en tapt pakke kan oppdages hvis kanalnumrene er ute av drift. For pakkene som kommer fra Bluetooth på Arduino, er det binære mønsteret (tegnene skifter bitvis):

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

(xacc 3 adressebiter = 0x00, 13bit usignert) (yacc 3 adressebiter = 0x01, 13bit usignert) (zacc 3 adressebiter = 0x02, 13bit usignert) (3 adressebiter = 0x03, iadc13bit usignerte) (xacc 3 adressebiter = 0x00, 13bit usignert) (yacc 3 adressebiter = 0x01, 13bit usignerte) (zacc 3 adressebiter = 0x02, 13bit usignerte) (3 adressebiter = 0x03, iadc13bit usignerte) …

Hvis du bruker noe annet enn Accel Plot Android -appen til å lese Bluetooth -data, er her trinnene for å trekke ut adressen (jeg bruker variabelnavnene fra Accel Plot Bluetooth.java -filen fra GitHub -repoen):

- Les i de 16 usignerte int

- Trekk ut høy byte og lagre den til btHigh.

- Trekk ut den lave byten og lagre den på btLow.

- Hent adressen fra btHigh ved å bruke: (btHigh >> 5) & 0x07. Denne setningen flytter btHigh 5 bits til høyre og flytter de tre adressebitsene til de tre laveste registerene. & -Tegnet er et logisk OG som tvinger bit 4 og høyere til å være null og de tre siste bitene til å matche adressebitene. Resultatet av denne erklæringen er adressen din.

Du trenger ikke å bekymre deg for adresseutvinning hvis du bruker Accel Plot.

Trinn 3: Last inn Android -appen fra Google Play eller gren GitHub

Last inn Android -appen fra Google Play eller gren GitHub
Last inn Android -appen fra Google Play eller gren GitHub

Du har et par valg for å laste inn Android -appen på enheten din. Hvis du vil unngå koding, kan du søke etter "Accel Plot", og appen skal komme opp i Google Play -butikken. Følg butikkens instruksjoner for installasjon.

Mitt ønske med denne Instructable er virkelig å oppmuntre andre til å bygge prosjekter, så jeg har også publisert koden i en GitHub -repo. Du bør kunne forgrene dette, bygge det og endre det som du synes. Jeg publiserte koden under MIT -lisensen, så ha det gøy!

Trinn 4: Koble til Arduino til noe interessant (jeg brukte en R/C -bil)

Koble til Arduino til noe interessant (jeg brukte en R/C -bil)
Koble til Arduino til noe interessant (jeg brukte en R/C -bil)

Jeg vil til slutt bruke enheten til deteksjon av veibane, så jeg tenkte at en liten fjernstyrt (R/C) bil ville være passende. Jeg tror det hjelper i neste trinn hvis accels kan være på noe som beveger seg eller vibrerer.

Trinn 5: Bruk Android -enheten til å koble til Arduino

Bruk Android -enheten for å koble til Arduino
Bruk Android -enheten for å koble til Arduino
Bruk Android -enheten for å koble til Arduino
Bruk Android -enheten for å koble til Arduino
Bruk Android -enheten for å koble til Arduino
Bruk Android -enheten for å koble til Arduino

Hvis du ikke allerede har gjort det, må du først koble HC-05 til Android-enheten din. Jeg tror at du kan gjøre dette på de fleste enheter ved å gå til innstillinger. Standardnålen for de fleste HC-05-enheter vil være 1234 eller 1111.

Åpne AccelPlot -appen på Android -enheten. Når appen åpnes, og før du kobler deg til HC-05, kan du endre samplingshastigheten (denne er angitt i Arduino-koden), akselerometervekter (også angitt i Arduino-koden) og antall prøver som skal lagres.

Når disse innstillingene er gjort, klikker du på "Koble til" -knappen. Det skal hente opp Bluetooth -enhetene, og enheten din skal være oppført. Velg den, og når koden oppretter tilkoblingen, vil du se en "Tilkoblet" toast dukke opp.

Bruk pilknappen tilbake for å gå tilbake til Accel Plot. Trykk på "Start Stream" -knappen for å vise data fra HC-05-enheten. Du bør også bruke knapper for å lagre dataene eller spille av det frekvensmodulerte innholdet gjennom lydkontakten.

Trinn 6: Skaff deg og plott dataene

Image
Image
Importer til Python (eller annen plattform) for videre bruk
Importer til Python (eller annen plattform) for videre bruk

"Start Stream" -knappen bør være aktivert. Trykk på den for å begynne å streame data til skjermen.

"Lagre data" -knappen vil også være aktivert. Trykk på den for å lagre dataene.

Accel Plot inkluderer også et alternativ for å sende ut et modulert signal på lydkanalene. De to kanalene i Accel Plot -appen refererer til venstre og høyre kanal i lydutgangen på Android -enheten. Dette er nyttig hvis du vil bringe MPU-6050-dataene inn i et eget dataloggingssystem, som et nasjonalt instrument.

Videoen viser et eksempel på at systemet samler inn data på en R/C -bil.

Trinn 7: Importer til Python (eller annen plattform) for videre bruk

Importer til Python (eller annen plattform) for videre bruk
Importer til Python (eller annen plattform) for videre bruk

Filene lagres på Android -enheten. Filene vil bli lagret under "AccelPlot" -katalogen for Android API 18 og eldre. Koden plasserer.dat -filene i mappen "\ Tablet / Documents / AccelPlot" for API 19 (KitKat 4.4) og høyere. Jeg har hatt problemer med at noen Android -enheter viser filene når de er tilkoblet via USB. I noen tilfeller har jeg måttet starte Android -enheten på nytt for å få dem til å dukke opp. Ikke sikker på hvorfor dette er, men det bør være fire filer, en for hver kanal. De kan kopieres over til en lokal katalog for ekstra arbeid.

Jeg brukte Anaconda/Python 2.7 til å åpne filene og vise dataene. "ExploratoryAnalysis.ipynb" -filen har IPython Notebook -filen som åpner alle datafilene og plotter eksempeldataene. Eksempelfiler er inkludert i GitHub -repoen. Dataene lagres som big-endian 4 byte floats ('> f'), så ethvert analyseprogram bør kunne åpne dem.

Jeg har også tatt med en enklere fil som heter "ReadDataFiles.ipynb" som viser hvordan du leser i en enkelt fil ved navn.

Anbefalt: