Indholdsfortegnelse:

Realtime MPU-6050/A0 datalogning med Arduino og Android: 7 trin (med billeder)
Realtime MPU-6050/A0 datalogning med Arduino og Android: 7 trin (med billeder)

Video: Realtime MPU-6050/A0 datalogning med Arduino og Android: 7 trin (med billeder)

Video: Realtime MPU-6050/A0 datalogning med Arduino og Android: 7 trin (med billeder)
Video: M2MLogger LoRa based wireless datalogger 2024, Juli
Anonim
Realtime MPU-6050/A0 datalogning med Arduino og Android
Realtime MPU-6050/A0 datalogning med Arduino og Android

Jeg har været interesseret i at bruge Arduino til maskinlæring. Som et første trin vil jeg bygge en realtime (eller temmelig tæt på det) datavisning og logger med en Android -enhed. Jeg vil fange accelerometerdata fra MPU-6050, så jeg designet konstruktionen til at bruge HC-05 ved 115200 baud. Med denne konfiguration kan 4 datakanaler transmitteres med 250 sampler pr. Sekund.

Bygningen har et par trin:

  • Byg skjoldet eller brødbrættet
  • Programmer Arduino
  • Indlæs Android -appen fra Google Play, eller forgren GitHub, og kompilér den selv
  • Tilslut MPU-6050 til noget interessant, der vibrerer (jeg brugte en R/C-bil)
  • Brug Android -enheden til at oprette forbindelse til Arduino
  • Plot dataene, gem hvis det er interesseret
  • Import til Python (eller anden platform) til yderligere brug

Lad os komme igang!

Trin 1: Byg skjoldet/brødbrættet

Byg skjoldet/brødbrættet
Byg skjoldet/brødbrættet
Byg skjoldet/brødbrættet
Byg skjoldet/brødbrættet

Dette er ledningsdiagrammet for Arduino, HC-05 og MPU-6050. Ud over MPU-6050 har jeg den analoge indgang A0 forbundet til en lyssensor for at vise, at ADC'en fungerer. Ethvert 0-5 volt signal kunne bringes ind i A0 ADC. Dette er de komponenter, jeg brugte til bygningen:

  • Arduino Uno
  • HC-05 (HC-06 burde også fungere, men min build var med HC-05)
  • MPU-6050
  • Sparkfun fotoresistor
  • 10kOhm modstand (brun-sort-orange)

De fleste HC-05 Bluetooth-moduler har som standard 9600 baud. For at dataene kan overføres med succes, skal du omprogrammere dem til en 115200 baudhastighed. Der er en god HC-05/HC-06 AT Command Instructable, der forklarer, hvordan man gør det.

Trin 2: Programmer Arduino

Programmer Arduino
Programmer Arduino
Programmer Arduino
Programmer Arduino

Jeg brugte Arduino IDE release 1.6.7 til at programmere Arduino. Koden kan downloades fra linkene i dette trin eller fra GitHub -repoen. Jeg har inkluderet tre versioner: Firmware125.ino er 125 hertz -versionen, Firmware250.ino er 250 hertz -versionen, og Firmware500.ino er 500 hertz -versionen. For at få Arduino til at cykle ved 500 hertz, indsamles A0 ADC ikke.

Firmwaren indeholder et ur på Pin 9, som jeg brugte til at kontrollere timingen. Sporet viser, at cyklustiden er 4 ms (svarende til 1/250 hertz). Jeg har fundet ud af, at hvis der er problemer med serielle forbindelser, vil timingen ikke være ensartet.

Arduino -koden bruger bitmaskering til at tilføje et kanalnummer til hver pakke, fordi prøver nogle gange falder over Bluetooth. Jeg bruger de tre mest betydningsfulde bits til at gemme et kanalnummer. For signerede heltal er den mest betydningsfulde bit (MSB) forbeholdt tegnet. Da jeg vil bruge MSB til min adresse i stedet for heltalets tegn, skal jeg konvertere alle de signerede accelerometerværdier til usignerede heltal. Jeg gør dette ved at tilføje 32768 til hver værdi (MPU -accelerometerets ADC -tællinger er +32768 til -32768) og castes som usignerede heltal:

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

Kanalnummeret er det samme for hvert accelerometer og A0 -porten, så en tabt pakke kan detekteres, hvis kanalnumrene er ude af drift. For de pakker, der kommer fra Bluetooth på Arduino, er det binære mønster (tegnene er bitvis skiftende):

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

(xacc 3 adressebit = 0x00, 13bit usigneret) (yacc 3 adressebit = 0x01, 13bit usigneret) (zacc 3 adressebit = 0x02, 13bit usigneret) (3 adressebit = 0x03, iadc13bit usigneret) (xacc 3 adressebit = 0x00, 13bit usigneret) (yacc 3 adressebit = 0x01, 13bit usigneret) (zacc 3 adressebit = 0x02, 13bit usigneret) (3 adressebit = 0x03, iadc13bit usigneret) …

Hvis du bruger noget andet end Accel Plot Android -appen til at læse Bluetooth -data, er her trinene til at udtrække adressen (jeg bruger variabelnavne fra Accel Plot Bluetooth.java -filen fra GitHub -repoen):

- Læs i de 16 usignerede int

- Udtræk den høje byte, og gem den på btHigh.

- Udtræk den lave byte, og gem den på btLow.

- Hent adressen fra btHigh ved hjælp af: (btHigh >> 5) & 0x07. Denne sætning flytter btHigh 5 bit til højre og flytter de tre adressebits til de laveste tre registre. & -Tegnet er et logisk OG, der tvinger bits 4 og højere til at være nul og de sidste tre bits til at matche adressebitsene. Resultatet af denne erklæring er din adresse.

Du behøver ikke bekymre dig om adresseudtrækningen, hvis du bruger Accel Plot.

Trin 3: Indlæs Android -appen fra Google Play eller forgren GitHub

Indlæs Android -appen fra Google Play eller forgren GitHub
Indlæs Android -appen fra Google Play eller forgren GitHub

Du har et par valgmuligheder for at indlæse Android -appen på din enhed. Hvis du vil undgå kodning, kan du søge efter "Accel Plot", og appen skulle komme op i Google Play -butikken. Følg butiksinstruktionerne for installation.

Mit ønske med denne Instructable er virkelig at tilskynde andre til at bygge projekter, så jeg har også offentliggjort koden i en GitHub -repo. Du bør være i stand til at forgrene dette, bygge det og ændre det, som du finder passende. Jeg udgav koden under MIT -licensen, så hav det sjovt!

Trin 4: Opret forbindelse til Arduino til noget interessant (jeg brugte en R/C -bil)

Opret forbindelse til Arduino til noget interessant (jeg brugte en R/C -bil)
Opret forbindelse til Arduino til noget interessant (jeg brugte en R/C -bil)

Jeg vil til sidst bruge enheden til registrering af vejoverflader, så jeg tænkte, at en lille fjernbetjent (R/C) bil ville være passende. Jeg tror, det hjælper i det næste trin, hvis accellerne kan være på noget, der bevæger sig eller vibrerer.

Trin 5: Brug Android -enheden til at oprette forbindelse til Arduino

Brug Android -enheden til at oprette forbindelse til Arduino
Brug Android -enheden til at oprette forbindelse til Arduino
Brug Android -enheden til at oprette forbindelse til Arduino
Brug Android -enheden til at oprette forbindelse til Arduino
Brug Android -enheden til at oprette forbindelse til Arduino
Brug Android -enheden til at oprette forbindelse til Arduino

Hvis du ikke allerede har gjort det, skal du først parre HC-05 med din Android-enhed. Jeg tror, at du på de fleste enheder kan gøre dette ved at gå til indstillinger. Standardnålen for de fleste HC-05-enheder er 1234 eller 1111.

Åbn AccelPlot -appen på Android -enheden. Når appen åbnes, og før du opretter forbindelse til HC-05, kan du ændre samplingshastighed (dette er angivet i Arduino-koden), accelerometervægte (også angivet i Arduino-koden) og antallet af prøver, der skal gemmes.

Når disse indstillinger er foretaget, skal du klikke på knappen "Tilslut". Det skal vise Bluetooth -enhederne, og din enhed skal være angivet. Vælg den, og når koden etablerer forbindelsen, vil du se en "Connected" toast dukke op.

Brug knappen tilbage til at vende tilbage til Accel Plot. Tryk på knappen "Start Stream" for at få vist data fra HC-05-enheden. Du bør også have knapper til rådighed for at gemme data eller afspille det frekvensmodulerede indhold gennem lydstikket.

Trin 6: Indhent og plot dataene

Image
Image
Import til Python (eller anden platform) til videre brug
Import til Python (eller anden platform) til videre brug

Knappen "Start Stream" skal være aktiveret. Tryk på den for at begynde at streame data til skærmen.

Knappen "Gem data" er også aktiveret. Tryk på den for at gemme dataene.

Accel Plot indeholder også en mulighed for at udsende et moduleret signal på lydkanalerne. De 2 kanaler i Accel Plot -appen refererer til venstre og højre kanal i lydudgangsstikket på Android -enheden. Dette er nyttigt, hvis du vil bringe MPU-6050-dataene til et separat datalogningssystem, f.eks. Et nationalt instrument.

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

Trin 7: Import til Python (eller anden platform) til videre brug

Import til Python (eller anden platform) til videre brug
Import til Python (eller anden platform) til videre brug

Filerne gemmes på Android -enheden. Filerne gemmes under biblioteket "AccelPlot" til Android API 18 og ældre. Koden placerer.dat -filerne i mappen "\ Tablet / Documents / AccelPlot" til API 19 (KitKat 4.4) og højere. Jeg har haft problemer med, at nogle Android -enheder viser filerne, når de er tilsluttet via USB. I nogle tilfælde har jeg været nødt til at genstarte Android -enheden for at få dem til at dukke op. Ikke sikker på hvorfor dette er, men der skal være fire filer, en for hver kanal. De kan kopieres til et lokalt bibliotek for yderligere arbejde.

Jeg brugte Anaconda/Python 2.7 til at åbne filerne og vise dataene. Filen "ExploratoryAnalysis.ipynb" har filen IPython Notebook, der åbner alle datafiler og plotter eksempeldataene. Eksempelfiler er inkluderet i GitHub -repoen. Dataene gemmes som big-endian 4 byte floats ('> f'), så ethvert analyseprogram burde kunne åbne dem.

Jeg har også inkluderet en enklere fil kaldet "ReadDataFiles.ipynb", der viser, hvordan man læser i en enkelt fil ved navn.

Anbefalede: