Taula de continguts:

Registre de dades MPU-6050 / A0 en temps real amb Arduino i Android: 7 passos (amb imatges)
Registre de dades MPU-6050 / A0 en temps real amb Arduino i Android: 7 passos (amb imatges)

Vídeo: Registre de dades MPU-6050 / A0 en temps real amb Arduino i Android: 7 passos (amb imatges)

Vídeo: Registre de dades MPU-6050 / A0 en temps real amb Arduino i Android: 7 passos (amb imatges)
Vídeo: Registre de dades del bé 2024, Desembre
Anonim
Registre de dades MPU-6050 / A0 en temps real amb Arduino i Android
Registre de dades MPU-6050 / A0 en temps real amb Arduino i Android

M’ha interessat fer servir l’Arduino per a l’aprenentatge automàtic. Com a primer pas, vull crear una pantalla i registre de dades en temps real (o bastant a prop) amb un dispositiu Android. Vull capturar les dades de l’acceleròmetre de la MPU-6050, així que vaig dissenyar la versió per utilitzar l’HC-05 a 115200 baud. Amb aquesta configuració es poden transmetre 4 canals de dades a 250 mostres per segon.

La compilació té uns quants passos:

  • Construeix l'escut o la taula de treball
  • Programa l'Arduino
  • Carregueu l'aplicació d'Android des de Google Play o ramifiqueu el GitHub i compileu-la vosaltres mateixos
  • Connecteu el MPU-6050 a alguna cosa interessant que vibri (he utilitzat un cotxe R / C)
  • Utilitzeu el dispositiu Android per connectar-vos a l'Arduino
  • Traceu les dades, deseu-les si us interessa
  • Importeu-lo a Python (o a una altra plataforma) per a un ús posterior

Comencem!

Pas 1: creeu l’escut / tauleta de suport

Construeix l’escut / la taula de treball
Construeix l’escut / la taula de treball
Construeix l’escut / la taula de treball
Construeix l’escut / la taula de treball

Aquest és el diagrama de cablejat de l’Arduino, l’HC-05 i l’MPU-6050. A més de la MPU-6050, tinc l'entrada analògica A0 connectada a un sensor de llum per demostrar que l'ADC funciona. Qualsevol senyal de 0-5 volts es podria introduir a l'A0 ADC. Aquests són els components que he utilitzat per a la construcció:

  • Arduino Uno
  • HC-05 (L'HC-06 també hauria de funcionar, però la meva versió va ser amb l'HC-05)
  • MPU-6050
  • Fotoresistor de Sparkfun
  • Resistència de 10kOhm (marró-negre-taronja)

La majoria dels mòduls Bluetooth HC-05 són per defecte 9600 baud. Perquè les dades es transmetin amb èxit, haureu de reprogramar-les per a una velocitat de 115200 bauds. Hi ha una bona instrucció HC-05 / HC-06 AT instructable que explica com fer-ho.

Pas 2: programa l'Arduino

Programa l'Arduino
Programa l'Arduino
Programa l'Arduino
Programa l'Arduino

He utilitzat la versió 1.6.7 d'Arduino IDE per programar l'Arduino. El codi es pot descarregar des dels enllaços d’aquest pas o des del repositori de GitHub. He inclòs tres versions: Firmware125.ino és la versió de 125 Hz, Firmware250.ino és la versió de 250 Hz i Firmware500.ino és la versió de 500 Hz. Per aconseguir que l'Arduino circuli a 500 Hz, no es recull l'A0 ADC.

El firmware inclou un rellotge al Pin 9 que he utilitzat per comprovar el temps. La traça mostra que el temps del cicle és de 4 ms (equivalent a 1/250 Hz). He comprovat que si hi ha problemes d’enllaços en sèrie, el temps no serà uniforme.

El codi Arduino utilitza l’emmascarament de bits per afegir un número de canal a cada paquet perquè de vegades les mostres passen per Bluetooth. Utilitzo els tres bits més significatius per emmagatzemar un número de canal. Per als enters signats, el bit més significatiu (MSB) està reservat per al signe. Com que vull utilitzar el MSB per a la meva adreça, en lloc del signe de l'enter, he de convertir tots els valors de l'acceleròmetre signat a enters sense signar. Ho faig afegint 32768 a cada valor (els recomptes ADC de l’acceleròmetre MPU són de +32768 a -32768) i es converteixen en enters sense signar:

(sense signar int) ((llarg) iAccelData + 32767);

El número de canal és el mateix per a cada acceleròmetre i el port A0, de manera que es pot detectar un paquet caigut si els números de canal estan fora d’ordre. Per als paquets que provenen del Bluetooth a l'Arduino, el patró binari és (els signes canvien de forma bits):

(xacc 3 bits d'adreça = 0x00, 13 bits sense signar) (yacc 3 bits d'adreça = 0x01, 13 bits sense signar) (zacc 3 bits d'adreça = 0x02, 13 bits sense signar) (3 bits d'adreça = 0x03, iadc13bit sense signar)

(xacc 3 bits d'adreça = 0x00, 13 bits sense signar) (yacc 3 bits d'adreça = 0x01, 13 bits sense signar) (zacc 3 bits d'adreça = 0x02, 13 bits sense signar) (3 bits d'adreça = 0x03, iadc13bit sense signar) (xacc 3 bits d'adreça = 0x00, 13 bits sense signar) (yacc 3 bits d'adreça = 0x01, 13 bits sense signar) (zacc 3 bits d'adreça = 0x02, 13 bits sense signar) (3 bits d'adreça = 0x03, iadc13bit sense signar) …

Si utilitzeu una altra cosa que l’aplicació Accel Plot per a Android per llegir les dades de Bluetooth, aquí teniu els passos per extreure l’adreça (estic fent servir els noms de les variables del fitxer Accel Plot Bluetooth.java del repositori de GitHub):

- Llegiu els 16 int signats

- Extraieu el byte alt i deseu-lo a btHigh.

- Extraieu el byte baix i deseu-lo a btLow.

- Recupereu l'adreça de btHigh mitjançant: (btHigh >> 5) i 0x07. Aquesta afirmació canvia btHigh 5 bits cap a la dreta movent els tres bits d’adreça als tres registres més baixos. El signe & és un AND lògic que obliga a que els bits 4 i superiors siguin zero i els darrers tres bits coincideixin amb els bits d’adreça. El resultat d’aquesta declaració és la vostra adreça.

No us haureu de preocupar per l’extracció d’adreces si utilitzeu Accel Plot.

Pas 3: carregueu l'aplicació d'Android des de Google Play o des de GitHub

Carregueu l'aplicació d'Android des de Google Play o feu servir GitHub
Carregueu l'aplicació d'Android des de Google Play o feu servir GitHub

Teniu un parell d'opcions per carregar l'aplicació Android al dispositiu. Si voleu evitar la codificació, podeu cercar "Accel Plot" i l'aplicació apareixerà a la botiga Google Play. Seguiu les instruccions de la botiga per a la instal·lació.

El meu desig amb aquest Instructable és realment animar els altres a construir projectes, així que també he publicat el codi en un repositori de GitHub. Hauríeu de poder ramificar-lo, construir-lo i modificar-lo com convingueu. He publicat el codi sota la llicència MIT, així que diverteix-te!

Pas 4: connecteu-vos a l'Arduino a alguna cosa interessant (he utilitzat un cotxe R / C)

Connecteu-vos a l'Arduino a Alguna cosa interessant (he utilitzat un cotxe R / C)
Connecteu-vos a l'Arduino a Alguna cosa interessant (he utilitzat un cotxe R / C)

Finalment, vull fer servir el dispositiu per a la detecció de la superfície de la carretera, de manera que vaig pensar que seria adequat un petit cotxe de control remot (R / C). Crec que ajuda en el següent pas si els accels poden estar en alguna cosa que es mou o vibra.

Pas 5: utilitzeu el dispositiu Android per connectar-vos a l'Arduino

Utilitzeu el dispositiu Android per connectar-vos a l'Arduino
Utilitzeu el dispositiu Android per connectar-vos a l'Arduino
Utilitzeu el dispositiu Android per connectar-vos a l'Arduino
Utilitzeu el dispositiu Android per connectar-vos a l'Arduino
Utilitzeu el dispositiu Android per connectar-vos a Arduino
Utilitzeu el dispositiu Android per connectar-vos a Arduino

Si encara no ho heu fet, primer haureu de pair l’HC-05 al vostre dispositiu Android. Crec que a la majoria de dispositius podeu fer-ho anant a la configuració. El pin predeterminat per a la majoria de dispositius HC-05 serà 1234 o 1111.

Obriu l'aplicació AccelPlot al dispositiu Android. Quan s’obre l’aplicació i abans de connectar-vos a l’HC-05, podeu canviar la freqüència de mostreig (es defineix al codi Arduino), les escales de l’acceleròmetre (també es defineixen al codi Arduino) i el nombre de mostres que cal desar.

Un cop feta aquesta configuració, feu clic al botó "Connecta". Hauria de mostrar els dispositius Bluetooth i el dispositiu hauria d’estar llistat. Seleccioneu-lo i un cop el codi estableixi la connexió, veureu un brindis "Connectat".

Utilitzeu el botó de fletxa enrere per tornar a Accel Plot. Toqueu el botó "Inicia la transmissió" per mostrar les dades del dispositiu HC-05. També heu de tenir botons disponibles per desar les dades o reproduir el contingut modulat en freqüència mitjançant la presa d’àudio.

Pas 6: adquirir i representar les dades

Image
Image
Importeu a Python (o una altra plataforma) per a un ús posterior
Importeu a Python (o una altra plataforma) per a un ús posterior

El botó "Inicia la reproducció" hauria d'estar habilitat. Toqueu-lo per començar a transmetre dades a la pantalla.

El botó "Desa les dades" també estarà habilitat; toqueu-lo per emmagatzemar les dades.

Accel Plot també inclou una opció per emetre un senyal modulat als canals d’àudio. Els dos canals de l’aplicació Accel Plot fan referència als canals esquerre i dret del connector de sortida d’àudio del dispositiu Android. Això és útil si voleu portar les dades MPU-6050 a un sistema de registre de dades separat, com ara National Instruments.

El vídeo mostra un exemple del sistema que recopila dades sobre un cotxe de R / C.

Pas 7: importeu a Python (o a una altra plataforma) per a un ús posterior

Importeu a Python (o una altra plataforma) per a un ús posterior
Importeu a Python (o una altra plataforma) per a un ús posterior

Els fitxers es desen al dispositiu Android. Els fitxers s'emmagatzemaran al directori "AccelPlot" per a l'API d'Android 18 i versions anteriors. El codi situa els fitxers.dat a la carpeta "\ Tablet / Documents / AccelPlot" per a l'API 19 (KitKat 4.4) i versions posteriors. He tingut problemes amb alguns dispositius Android que mostren els fitxers quan estic connectat mitjançant USB. En alguns casos, he hagut de reiniciar el dispositiu Android per mostrar-los. No sé ben bé per què és així, però hi hauria d’haver quatre fitxers, un per a cada canal. Es poden copiar a un directori local per obtenir més treball.

He utilitzat Anaconda / Python 2.7 per obrir els fitxers i mostrar les dades. El fitxer "ExploratoryAnalysis.ipynb" té el fitxer IPython Notebook que obrirà tots els fitxers de dades i representarà les dades de mostra. Els fitxers de mostra s’inclouen al repositori de GitHub. Les dades es guarden com a flotadors big-endian de 4 bytes ('> f'), de manera que qualsevol programa d'anàlisi hauria de poder obrir-los.

També he inclòs un fitxer més senzill anomenat "ReadDataFiles.ipynb" que mostra com llegir en un sol fitxer per nom.

Recomanat: