Sommario:
- Passaggio 1: costruisci lo scudo/tagliere
- Passaggio 2: programma Arduino
- Passaggio 3: carica l'app Android da Google Play o dirama il GitHub
- Passaggio 4: collegarsi ad Arduino a qualcosa di interessante (ho usato un'auto R/C)
- Passaggio 5: utilizzare il dispositivo Android per connettersi ad Arduino
- Passaggio 6: acquisire e tracciare i dati
- Passaggio 7: importa in Python (o altra piattaforma) per un ulteriore utilizzo
Video: Registrazione dati MPU-6050/A0 in tempo reale con Arduino e Android: 7 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
Mi interessava utilizzare Arduino per l'apprendimento automatico. Come primo passo, voglio costruire un display e un logger dati in tempo reale (o abbastanza vicino) con un dispositivo Android. Voglio acquisire i dati dell'accelerometro dall'MPU-6050, quindi ho progettato la build per utilizzare l'HC-05 a 115200 baud. Con questa configurazione è possibile trasmettere 4 canali di dati a 250 campioni al secondo.
La build ha alcuni passaggi:
- Costruisci lo scudo o la breadboard
- Programma l'Arduino
- Carica l'app Android da Google Play o ramifica GitHub e compilalo tu stesso
- Collega l'MPU-6050 a qualcosa di interessante che vibra (ho usato un'auto R/C)
- Usa il dispositivo Android per connetterti ad Arduino
- Traccia i dati, salva se interessati
- Importa in Python (o altra piattaforma) per un ulteriore utilizzo
Iniziamo!
Passaggio 1: costruisci lo scudo/tagliere
Questo è lo schema elettrico per Arduino, HC-05 e MPU-6050. Oltre all'MPU-6050 ho l'ingresso analogico A0 collegato a un sensore di luce per mostrare che l'ADC sta funzionando. Qualsiasi segnale 0-5 volt potrebbe essere portato nell'ADC A0. Questi sono i componenti che ho usato per la build:
- Arduino Uno
- HC-05 (Anche l'HC-06 dovrebbe funzionare, ma la mia build era con l'HC-05)
- MPU-6050
- Fotoresistenza Sparkfun
- Resistenza 10kOhm (marrone-nero-arancio)
La maggior parte dei moduli Bluetooth HC-05 ha un valore predefinito di 9600 baud. Affinché i dati vengano trasmessi correttamente, sarà necessario riprogrammarli per una velocità di trasmissione di 115200. C'è un buon HC-05/HC-06 AT Command Instructable che spiega come farlo.
Passaggio 2: programma Arduino
Ho usato la versione 1.6.7 dell'IDE Arduino per programmare Arduino. Il codice può essere scaricato dai collegamenti in questo passaggio o dal repository GitHub. Ho incluso tre versioni: Firmware125.ino è la versione da 125 hertz, Firmware250.ino è la versione da 250 hertz e Firmware500.ino è la versione da 500 hertz. Per far funzionare Arduino a 500 hertz, l'ADC A0 non viene raccolto.
Il firmware include un clock out sul Pin 9 che ho usato per controllare i tempi. La traccia mostra che il tempo di ciclo è di 4 ms (equivalente a 1/250 hertz). Ho scoperto che se ci sono problemi di collegamento seriale i tempi non saranno uniformi.
Il codice Arduino utilizza il mascheramento dei bit per aggiungere un numero di canale a ciascun pacchetto perché i campioni a volte cadono su Bluetooth. Uso i tre bit più significativi per memorizzare un numero di canale. Per gli interi con segno il bit più significativo (MSB) è riservato al segno. Dal momento che voglio usare l'MSB per il mio indirizzo, piuttosto che il segno dell'intero, devo convertire tutti i valori dell'accelerometro con segno in interi senza segno. Lo faccio aggiungendo 32768 a ciascun valore (i conteggi ADC dell'accelerometro MPU sono da +32768 a -32768) e cast come interi senza segno:
(unsigned int)((long)iAccelData+32767);
Il numero del canale è lo stesso per ogni accelerometro e la porta A0 in modo che un pacchetto perso possa essere rilevato se i numeri dei canali sono fuori servizio. Per i pacchetti provenienti dal Bluetooth su Arduino, il modello binario è (i segni cambiano bit per bit):
(xacc 3 bit di indirizzo = 0x00, 13bit unsigned) (yacc 3 bit di indirizzo = 0x01, 13bit unsigned) (zacc 3 bit di indirizzo = 0x02, 13bit unsigned) (3 bit di indirizzo = 0x03, iadc13bit unsigned)
(xacc 3 bit di indirizzo = 0x00, 13bit unsigned) (yacc 3 bit di indirizzo = 0x01, 13bit unsigned) (zacc 3 bit di indirizzo = 0x02, 13bit unsigned) (3 bit di indirizzo = 0x03, iadc13bit unsigned) (xacc 3 bit di indirizzo = 0x00, 13bit unsigned) (yacc 3 bit di indirizzo = 0x01, 13bit unsigned) (zacc 3 bit di indirizzo = 0x02, 13bit unsigned) (3 bit di indirizzo = 0x03, iadc13bit unsigned) …
Se stai usando qualcosa di diverso dall'app Accel Plot Android per leggere i dati Bluetooth, ecco i passaggi per estrarre l'indirizzo (sto usando i nomi delle variabili dal file Accel Plot Bluetooth.java dal repository GitHub):
- Leggi nei 16 unsigned int
- Estrarre il byte alto e salvarlo in btHigh.
- Estrarre il byte basso e salvarlo in btLow.
- Recupera l'indirizzo da btHigh usando: (btHigh >> 5) & 0x07. Questa istruzione sposta btHigh di 5 bit a destra spostando i tre bit di indirizzo nei tre registri più bassi. Il segno & è un AND logico che forza i bit 4 e superiori a zero e gli ultimi tre bit a corrispondere ai bit dell'indirizzo. Il risultato di questa dichiarazione è il tuo indirizzo.
Non devi preoccuparti dell'estrazione dell'indirizzo se stai usando Accel Plot.
Passaggio 3: carica l'app Android da Google Play o dirama il GitHub
Hai un paio di scelte per caricare l'app Android sul tuo dispositivo. Se vuoi evitare la codifica, puoi cercare "Accel Plot" e l'app dovrebbe apparire nel Google Play Store. Seguire le istruzioni del negozio per l'installazione.
Il mio desiderio con questo Instructable è davvero quello di incoraggiare gli altri a costruire progetti, quindi ho anche pubblicato il codice in un repository GitHub. Dovresti essere in grado di ramificarlo, costruirlo e modificarlo come meglio credi. Ho pubblicato il codice sotto la licenza MIT quindi divertiti!
Passaggio 4: collegarsi ad Arduino a qualcosa di interessante (ho usato un'auto R/C)
Voglio eventualmente utilizzare il dispositivo per il rilevamento della superficie stradale, quindi ho pensato che una piccola auto telecomandata (R/C) sarebbe stata appropriata. Penso che sia d'aiuto nel passaggio successivo se gli accel possono essere su qualcosa che si muove o vibra.
Passaggio 5: utilizzare il dispositivo Android per connettersi ad Arduino
Se non lo hai già fatto, dovrai prima associare l'HC-05 al tuo dispositivo Android. Credo che sulla maggior parte dei dispositivi sia possibile farlo andando nelle impostazioni. Il pin predefinito per la maggior parte dei dispositivi HC-05 sarà 1234 o 1111.
Apri l'app AccelPlot sul dispositivo Android. Quando si apre l'app, e prima di connettersi all'HC-05, è possibile modificare la frequenza di campionamento (impostata nel codice Arduino), le scale dell'accelerometro (impostate anche nel codice Arduino) e il numero di campioni da salvare.
Una volta effettuate queste impostazioni, fare clic sul pulsante "Connetti". Dovrebbe far apparire i dispositivi Bluetooth e il tuo dispositivo dovrebbe essere elencato. Selezionalo e una volta che il codice stabilisce la connessione vedrai un pop-up "Connesso".
Utilizzare il pulsante freccia indietro per tornare a Accel Plot. Toccare il pulsante "Avvia streaming" per visualizzare i dati dal dispositivo HC-05. Dovresti anche avere a disposizione i pulsanti per salvare i dati o riprodurre il contenuto con modulazione di frequenza attraverso il jack audio.
Passaggio 6: acquisire e tracciare i dati
Il pulsante "Avvia streaming" dovrebbe essere abilitato. Toccalo per avviare lo streaming dei dati sullo schermo.
Sarà abilitato anche il pulsante "Salva dati", toccalo per memorizzare i dati.
Accel Plot include anche un'opzione per emettere un segnale modulato sui canali audio. I 2 canali nell'app Accel Plot si riferiscono ai canali sinistro e destro del jack di uscita audio sul dispositivo Android. Ciò è utile se si desidera portare i dati dell'MPU-6050 in un sistema di registrazione dati separato, come un National Instruments.
Il video mostra un esempio del sistema di raccolta dati su un'auto R/C.
Passaggio 7: importa in Python (o altra piattaforma) per un ulteriore utilizzo
I file vengono salvati sul dispositivo Android. I file verranno archiviati nella directory "AccelPlot" per l'API Android 18 e versioni precedenti. Il codice inserisce i file.dat nella cartella "\Tablet\Documents\AccelPlot" per API 19 (KitKat 4.4) e versioni successive. Ho avuto problemi con alcuni dispositivi Android che mostrano i file quando sono collegati tramite USB. In alcuni casi ho dovuto riavviare il dispositivo Android per farli apparire. Non sono sicuro del motivo, ma dovrebbero esserci quattro file, uno per ogni canale. Possono essere copiati in una directory locale per ulteriore lavoro.
Ho usato Anaconda/Python 2.7 per aprire i file e visualizzare i dati. Il file "ExploratoryAnalysis.ipynb" contiene il file IPython Notebook che aprirà tutti i file di dati e traccerà i dati di esempio. I file di esempio sono inclusi nel repository GitHub. I dati vengono salvati come float big-endian da 4 byte ('>f') quindi qualsiasi programma di analisi dovrebbe essere in grado di aprirli.
Ho anche incluso un file più semplice chiamato "ReadDataFiles.ipynb" che mostra come leggere in un singolo file per nome.
Consigliato:
Crea bellissimi grafici dai dati di Arduino in tempo reale (e salva i dati in Excel): 3 passaggi
Crea bellissimi grafici dai dati di Arduino in tempo reale (e salva i dati in Excel): a tutti noi piace giocare con la nostra funzione P…lotter nell'IDE di Arduino. Tuttavia, sebbene possa essere utile per le applicazioni di base, i dati vengono cancellati man mano che più si aggiungono punti e non è particolarmente gradevole alla vista. Il plotter Arduino IDE non
Come creare un registratore di dati in tempo reale di umidità e temperatura con Arduino UNO e SD-Card - Simulazione del data logger DHT11 in Proteus: 5 passaggi
Come creare un registratore di dati in tempo reale di umidità e temperatura con Arduino UNO e SD-Card | Simulazione DHT11 Data-logger in Proteus: Introduzione: ciao, sono Liono Maker, ecco il link YouTube. Stiamo realizzando un progetto creativo con Arduino e lavoriamo su sistemi embedded.Data-Logger: Un data logger (anche data-logger o data recorder) è un dispositivo elettronico che registra i dati nel tempo w
Programma MicroPython: aggiornamento dei dati sulla malattia da coronavirus (COVID-19) in tempo reale: 10 passaggi (con immagini)
Programma MicroPython: aggiornamento dei dati sulla malattia da coronavirus (COVID-19) in tempo reale: nelle ultime settimane, il numero di casi confermati di malattia da coronavirus (COVID 19) in tutto il mondo ha superato i 100.000 e l'Organizzazione mondiale della sanità (OMS) ha dichiarato nuovo focolaio di polmonite da coronavirus per essere una pandemia globale. Io ero molto
Tracker Covid19 in tempo reale che utilizza ESP8266 e OLED - Dashboard Covid19 in tempo reale: 4 passaggi
Tracker Covid19 in tempo reale che utilizza ESP8266 e OLED | Dashboard Covid19 in tempo reale: visita il sito Web Techtronic Harsh: http://techtronicharsh.com Ovunque c'è un enorme focolaio del Novel Corona Virus (COVID19). È diventato necessario tenere d'occhio l'attuale scenario di COVID-19 nel mondo. Quindi, essendo a casa, questo è stato il p
ARUPI - un'unità di registrazione automatizzata a basso costo/unità di registrazione autonoma (ARU) per ecologisti del paesaggio sonoro: 8 passaggi (con immagini)
ARUPI - un'unità di registrazione automatizzata a basso costo/unità di registrazione autonoma (ARU) per ecologisti del paesaggio sonoro: questa istruzione è stata scritta da Anthony Turner. Il progetto è stato sviluppato con molto aiuto dallo Shed in the School of Computing, University of Kent (il signor Daniel Knox è stato di grande aiuto!). Ti mostrerà come costruire un sistema di registrazione audio automatizzato