Inhoudsopgave:
- Stap 1: Bouw het schild/broodbord
- Stap 2: Programmeer de Arduino
- Stap 3: Laad de Android-app van Google Play of vertak de GitHub
- Stap 4: Maak verbinding met de Arduino met iets interessants (ik gebruikte een R / C-auto)
- Stap 5: Gebruik het Android-apparaat om verbinding te maken met de Arduino
- Stap 6: Verkrijg en plot de gegevens
- Stap 7: Importeren in Python (of ander platform) voor verder gebruik
Video: Realtime MPU-6050/A0 datalogging met Arduino en Android - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
Ik was geïnteresseerd in het gebruik van de Arduino voor machine learning. Als eerste stap wil ik een realtime (of redelijk dichtbij) dataweergave en logger bouwen met een Android-apparaat. Ik wil versnellingsmetergegevens van de MPU-6050 vastleggen, dus ik heb de build ontworpen om de HC-05 te gebruiken met 115200 baud. Met deze configuratie kunnen 4 datakanalen worden verzonden met 250 samples per seconde.
De build heeft een paar stappen:
- Bouw het schild of breadboard
- Programmeer de Arduino
- Laad de Android-app van Google Play of vertak de GitHub en compileer deze zelf
- Sluit de MPU-6050 aan op iets interessants dat trilt (ik gebruikte een RC-auto)
- Gebruik het Android-apparaat om verbinding te maken met de Arduino
- Plot de gegevens, sla op als je geïnteresseerd bent
- Importeren in Python (of ander platform) voor verder gebruik
Laten we beginnen!
Stap 1: Bouw het schild/broodbord
Dit is het bedradingsschema voor de Arduino, HC-05 en de MPU-6050. Naast de MPU-6050 heb ik de analoge ingang A0 aangesloten op een lichtsensor om te laten zien dat de ADC werkt. Elk 0-5 volt signaal kan in de A0 ADC worden gebracht. Dit zijn de componenten die ik heb gebruikt voor de build:
- Arduino Uno
- HC-05 (De HC-06 zou ook moeten werken, maar mijn build was met de HC-05)
- MPU-6050
- Sparkfun fotoweerstand
- 10kOhm weerstand (bruin-zwart-oranje)
De meeste HC-05 Bluetooth-modules zijn standaard ingesteld op 9600 baud. Om de gegevens met succes te verzenden, moet u deze opnieuw programmeren voor een baudrate van 115200. Er is een goede HC-05/HC-06 AT Command Instructable die uitlegt hoe het moet.
Stap 2: Programmeer de Arduino
Ik heb de Arduino IDE versie 1.6.7 gebruikt om de Arduino te programmeren. De code kan worden gedownload via de links in deze stap of vanuit de GitHub-repo. Ik heb drie versies toegevoegd: Firmware125.ino is de 125 hertz-versie, Firmware250.ino is de 250 hertz-versie en Firmware500.ino is de 500 hertz-versie. Om de Arduino op 500 hertz te laten fietsen, wordt de A0 ADC niet verzameld.
De firmware bevat een klok uit op Pin 9 die ik heb gebruikt om de timing te controleren. De trace laat zien dat de cyclustijd 4 ms is (gelijk aan 1/250 hertz). Ik heb ontdekt dat als er problemen met de seriële verbinding zijn, de timing niet uniform is.
De Arduino-code gebruikt bitmaskering om een kanaalnummer aan elk pakket toe te voegen, omdat samples soms over Bluetooth vallen. Ik gebruik de drie meest significante bits om een kanaalnummer op te slaan. Voor gehele getallen met teken is de meest significante bit (MSB) gereserveerd voor het teken. Omdat ik de MSB voor mijn adres wil gebruiken in plaats van het teken van het gehele getal, moet ik alle getekende accelerometerwaarden converteren naar niet-ondertekende gehele getallen. Ik doe dit door 32768 aan elke waarde toe te voegen (de MPU-accelerometer ADC-tellingen zijn +32768 tot -32768) en cast als niet-ondertekende gehele getallen:
(unsigned int)((long)iAccelData+32767);
Het kanaalnummer is hetzelfde voor elke versnellingsmeter en de A0-poort, zodat een weggevallen pakket kan worden gedetecteerd als de kanaalnummers niet in orde zijn. Voor de pakketten die van de Bluetooth op de Arduino komen, is het binaire patroon (de tekens verschuiven bitsgewijs):
(xacc 3 adresbits = 0x00, 13bit unsigned) (yacc 3 adresbits = 0x01, 13bit unsigned) (zacc 3 adresbits = 0x02, 13bit unsigned) (3 adresbits = 0x03, iadc13bit unsigned)
(xacc 3 adresbits = 0x00, 13bit unsigned) (yacc 3 adresbits = 0x01, 13bit unsigned) (zacc 3 adresbits = 0x02, 13bit unsigned) (3 adresbits = 0x03, iadc13bit unsigned) (xacc 3 adresbits = 0x00, 13bit unsigned) (yacc 3 adresbits = 0x01, 13bit unsigned) (zacc 3 adresbits = 0x02, 13bit unsigned) (3 adresbits = 0x03, iadc13bit unsigned) …
Als u iets anders gebruikt dan de Accel Plot Android-app om de Bluetooth-gegevens te lezen, volgen hier de stappen om het adres te extraheren (ik gebruik de variabelenamen uit het Accel Plot Bluetooth.java-bestand uit de GitHub-repo):
- Lees de 16 niet-ondertekende int. in
- Extraheer de hoge byte en sla deze op in btHigh.
- Pak de lage byte uit en sla deze op in btLow.
- Haal het adres op van btHigh met: (btHigh >> 5) & 0x07. Deze instructie verschuift btHigh 5 bits naar rechts en verplaatst de drie adresbits naar de laagste drie registers. Het &-teken is een logische EN die ervoor zorgt dat bits 4 en hoger nul zijn en de laatste drie bits overeenkomen met de adresbits. Het resultaat van deze verklaring is uw adres.
U hoeft zich geen zorgen te maken over de adresextractie als u Accel Plot gebruikt.
Stap 3: Laad de Android-app van Google Play of vertak de GitHub
Je hebt een aantal keuzes om de Android-app op je apparaat te laden. Als u codering wilt vermijden, kunt u zoeken naar "Accel Plot" en de app zou in de Google Play Store moeten verschijnen. Volg de winkelinstructies voor installatie.
Mijn wens met deze Instructable is echt om anderen aan te moedigen projecten te bouwen, dus ik heb de code ook gepubliceerd in een GitHub-repo. Je zou dit naar eigen inzicht moeten kunnen vertakken, bouwen en aanpassen. Ik heb de code gepubliceerd onder de MIT-licentie, dus veel plezier!
Stap 4: Maak verbinding met de Arduino met iets interessants (ik gebruikte een R / C-auto)
Ik wil het apparaat uiteindelijk gebruiken voor wegdekdetectie, dus ik dacht dat een kleine op afstand bestuurbare (R/C) auto geschikt zou zijn. Ik denk dat het bij de volgende stap helpt als de versnellingen op iets kunnen staan dat beweegt of trilt.
Stap 5: Gebruik het Android-apparaat om verbinding te maken met de Arduino
Als je dit nog niet hebt gedaan, moet je de HC-05 eerst koppelen aan je Android-apparaat. Ik geloof dat je dit op de meeste apparaten kunt doen door naar instellingen te gaan. De standaardpin voor de meeste HC-05-apparaten is 1234 of 1111.
Open de AccelPlot-app op het Android-apparaat. Wanneer de app wordt geopend en voordat u verbinding maakt met de HC-05, kunt u de bemonsteringssnelheid (dit wordt ingesteld in de Arduino-code), de versnellingsmeterschalen (ook ingesteld in de Arduino-code) en het aantal monsters dat moet worden opgeslagen, wijzigen.
Zodra deze instellingen zijn gemaakt, klikt u op de knop "Verbinden". Het zou de Bluetooth-apparaten moeten oproepen en uw apparaat zou in de lijst moeten staan. Selecteer het en zodra de code de verbinding tot stand brengt, ziet u een "Verbonden" toast verschijnen.
Gebruik de pijl-terug-knop om terug te keren naar Accel Plot. Tik op de knop "Start Stream" om gegevens van het HC-05-apparaat weer te geven. Er moeten ook knoppen beschikbaar zijn om de gegevens op te slaan of de frequentiegemoduleerde inhoud af te spelen via de audio-aansluiting.
Stap 6: Verkrijg en plot de gegevens
De knop "Start Stream" moet zijn ingeschakeld. Tik erop om gegevens naar het scherm te streamen.
De knop "Gegevens opslaan" wordt ook ingeschakeld, tik erop om de gegevens op te slaan.
Accel Plot bevat ook een optie om een gemoduleerd signaal op de audiokanalen uit te voeren. De 2 kanalen in de Accel Plot-app verwijzen naar de linker- en rechterkanalen van de audio-uitgang op het Android-apparaat. Dit is handig als u de gegevens van de MPU-6050 in een apart dataloggingsysteem wilt opnemen, zoals een National Instruments.
De video toont een voorbeeld van het systeem dat gegevens verzamelt over een RC-auto.
Stap 7: Importeren in Python (of ander platform) voor verder gebruik
De bestanden worden opgeslagen op het Android-apparaat. De bestanden worden opgeslagen in de map "AccelPlot" voor Android API 18 en ouder. De code plaatst de.dat-bestanden in de map "\Tablet\Documents\AccelPlot" voor API 19 (KitKat 4.4) en hoger. Ik heb problemen gehad met sommige Android-apparaten die de bestanden weergeven wanneer ze via USB zijn aangesloten. In sommige gevallen moest ik het Android-apparaat opnieuw opstarten om ze te laten verschijnen. Ik weet niet zeker waarom dit zo is, maar er zouden vier bestanden moeten zijn, één voor elk kanaal. Ze kunnen worden gekopieerd naar een lokale map voor extra werk.
Ik heb Anaconda/Python 2.7 gebruikt om de bestanden te openen en de gegevens weer te geven. Het bestand "ExploratoryAnalysis.ipynb" heeft het IPython Notebook-bestand dat alle gegevensbestanden opent en de voorbeeldgegevens plot. Voorbeeldbestanden zijn opgenomen in de GitHub-opslagplaats. De gegevens worden opgeslagen als big-endian 4 byte floats ('>f'), dus elk analyseprogramma zou ze moeten kunnen openen.
Ik heb ook een eenvoudiger bestand met de naam "ReadDataFiles.ipynb" toegevoegd dat laat zien hoe een enkel bestand op naam kan worden gelezen.
Aanbevolen:
Realtime grafiek plotten op Android vanaf Arduino via HC-05: 3 stappen
Realtime grafiek plotten op Android van Arduino via HC-05: Hallo, hier is een tutorial over hoe je een realtime grafiek met waarden van een microcontroller zoals een Arduino naar de app kunt plotten. Het gebruikt een Bluetooth-module zoals de HC-05 om te fungeren als een berichtenapparaat om de gegevens tussen de Ar
Experimenten in geavanceerde datalogging (met behulp van Python): 11 stappen
Experimenten in geavanceerde datalogging (met behulp van Python): er zijn veel instructies voor datalogging, dus toen ik een eigen logging-project wilde bouwen, keek ik naar een heleboel. Sommige waren goed, andere minder, dus besloot ik enkele van de betere ideeën te gebruiken en mijn eigen toepassing te maken. Dit res
SCARA-robot: leren over voorwaartse en inverse kinematica!!! (Plot Twist Leer hoe u een realtime-interface maakt in ARDUINO met PROCESSING !!!!): 5 stappen (met afbeeldingen)
SCARA-robot: leren over voorwaartse en inverse kinematica!!! (Plot Twist Leer hoe u een realtime interface maakt in ARDUINO met PROCESSING !!!!): Een SCARA-robot is een zeer populaire machine in de industriewereld. De naam staat voor zowel Selective Compliant Assembly Robot Arm als Selective Compliant Articulated Robot Arm. Het is in feite een robot met drie vrijheidsgraden, de eerste twee displ
Weerstation met datalogging: 7 stappen (met afbeeldingen)
Weerstation met datalogging: in deze instructable laat ik je zien hoe je zelf een weerstationsysteem kunt maken. Het enige wat je nodig hebt is basiskennis van elektronica, programmeren en een beetje tijd. Dit project is nog in de maak. Dit is pas het eerste deel. Upgraden zal
Realtime gebeurtenismeldingen met NodeMCU (Arduino), Google Firebase en Laravel: 4 stappen (met afbeeldingen)
Realtime gebeurtenismeldingen met NodeMCU (Arduino), Google Firebase en Laravel: heb je ooit een melding willen ontvangen wanneer er een actie op je website wordt uitgevoerd, maar e-mail is niet de juiste keuze? Wil je bij elke verkoop een geluid of een belletje horen? Of er is direct uw aandacht nodig vanwege een calamiteit