Sommario:

Registrazione dati MPU-6050/A0 in tempo reale con Arduino e Android: 7 passaggi (con immagini)
Registrazione dati MPU-6050/A0 in tempo reale con Arduino e Android: 7 passaggi (con immagini)

Video: Registrazione dati MPU-6050/A0 in tempo reale con Arduino e Android: 7 passaggi (con immagini)

Video: Registrazione dati MPU-6050/A0 in tempo reale con Arduino e Android: 7 passaggi (con immagini)
Video: SOLIDWORKS Simulation e l'acquisizione dati con Arduino analisi a fatica integrate dai dati reali 2024, Luglio
Anonim
Registrazione dati MPU-6050/A0 in tempo reale con Arduino e Android
Registrazione dati MPU-6050/A0 in tempo reale con Arduino e Android

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

Costruisci lo scudo/tagliere
Costruisci lo scudo/tagliere
Costruisci lo scudo/tagliere
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

Programma l'Arduino
Programma l'Arduino
Programma l'Arduino
Programma l'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

Carica l'app Android da Google Play o dirama il GitHub
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)

Collegati ad Arduino a qualcosa di interessante (ho usato un'auto R/C)
Collegati 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

Usa il dispositivo Android per connetterti ad Arduino
Usa il dispositivo Android per connetterti ad Arduino
Usa il dispositivo Android per connetterti ad Arduino
Usa il dispositivo Android per connetterti ad Arduino
Usa il dispositivo Android per connetterti ad Arduino
Usa il dispositivo Android per connetterti 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

Image
Image
Importa in Python (o altra piattaforma) per un ulteriore utilizzo
Importa in Python (o altra piattaforma) per un ulteriore utilizzo

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

Importa in Python (o altra piattaforma) per un ulteriore utilizzo
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: