Tabla de contenido:

Registro de datos MPU-6050 / A0 en tiempo real con Arduino y Android: 7 pasos (con imágenes)
Registro de datos MPU-6050 / A0 en tiempo real con Arduino y Android: 7 pasos (con imágenes)

Video: Registro de datos MPU-6050 / A0 en tiempo real con Arduino y Android: 7 pasos (con imágenes)

Video: Registro de datos MPU-6050 / A0 en tiempo real con Arduino y Android: 7 pasos (con imágenes)
Video: ¿Cómo PROGRAMAR el MPU6050 con ARDUINO? ▶ ACELERÓMETRO y GIROSCOPIO en un MÓDULO 2024, Mes de julio
Anonim
Registro de datos MPU-6050 / A0 en tiempo real con Arduino y Android
Registro de datos MPU-6050 / A0 en tiempo real con Arduino y Android

Me ha interesado utilizar Arduino para el aprendizaje automático. Como primer paso, quiero construir una pantalla de datos y un registrador en tiempo real (o bastante cercano a él) con un dispositivo Android. Quiero capturar datos del acelerómetro del MPU-6050, así que diseñé la compilación para usar el HC-05 a 115200 baudios. Con esta configuración, se pueden transmitir 4 canales de datos a 250 muestras por segundo.

La compilación tiene algunos pasos:

  • Construye el escudo o la placa de pruebas
  • Programa el Arduino
  • Cargue la aplicación de Android desde Google Play o ramifique el GitHub y compílelo usted mismo
  • Conecte el MPU-6050 a algo interesante que vibre (usé un automóvil R / C)
  • Utilice el dispositivo Android para conectarse al Arduino
  • Grafique los datos, guárdelos si está interesado
  • Importar a Python (u otra plataforma) para su uso posterior

¡Empecemos!

Paso 1: construye el escudo / tablero

Construye el escudo / tablero
Construye el escudo / tablero
Construye el escudo / tablero
Construye el escudo / tablero

Este es el diagrama de cableado para Arduino, HC-05 y MPU-6050. Además del MPU-6050, tengo la entrada analógica A0 conectada a un sensor de luz para mostrar que el ADC está funcionando. Cualquier señal de 0-5 voltios podría introducirse en el ADC A0. Estos son los componentes que utilicé para la compilación:

  • Arduino Uno
  • HC-05 (El HC-06 también debería funcionar, pero mi construcción fue con el HC-05)
  • MPU-6050
  • Fotorresistor Sparkfun
  • Resistencia de 10 kOhmios (marrón-negro-naranja)

La mayoría de los módulos Bluetooth HC-05 tienen un valor predeterminado de 9600 baudios. Para que los datos se transmitan correctamente, deberá reprogramarlos para una velocidad de 115200 baudios. Hay un buen Instructable de comando HC-05 / HC-06 AT que explica cómo hacerlo.

Paso 2: programa el Arduino

Programa el Arduino
Programa el Arduino
Programa el Arduino
Programa el Arduino

Usé la versión 1.6.7 del IDE de Arduino para programar el Arduino. El código se puede descargar desde los enlaces de este paso o desde el repositorio de GitHub. He incluido tres versiones: Firmware125.ino es la versión de 125 hertz, Firmware250.ino es la versión de 250 hertz y Firmware500.ino es la versión de 500 hertz. Para que el Arduino funcione a 500 hercios, no se recopila el A0 ADC.

El firmware incluye un reloj de salida en el Pin 9 que usé para verificar el tiempo. La traza muestra que el tiempo del ciclo es de 4 ms (equivalente a 1/250 hercios). Descubrí que si hay problemas con el enlace en serie, la sincronización no será uniforme.

El código Arduino usa enmascaramiento de bits para agregar un número de canal a cada paquete porque las muestras a veces caen sobre Bluetooth. Utilizo los tres bits más significativos para almacenar un número de canal. Para enteros con signo, el bit más significativo (MSB) está reservado para el signo. Como quiero usar el MSB para mi dirección, en lugar del signo del número entero, tengo que convertir todos los valores del acelerómetro con signo en números enteros sin signo. Hago esto agregando 32768 a cada valor (los recuentos de ADC del acelerómetro MPU son +32768 a -32768) y lo lanzo como enteros sin firmar:

(int sin firmar) ((largo) iAccelData + 32767);

El número de canal es el mismo para cada acelerómetro y el puerto A0 para que se pueda detectar un paquete perdido si los números de canal están fuera de orden. Para los paquetes que provienen del Bluetooth en el Arduino, el patrón binario es (los signos cambian a nivel de bits):

(xacc 3 bits de dirección = 0x00, 13 bits sin signo) (yacc 3 bits de dirección = 0x01, 13 bits sin signo) (zacc 3 bits de dirección = 0x02, 13 bits sin signo) (3 bits de dirección = 0x03, iadc13bit sin signo)

(xacc 3 bits de dirección = 0x00, 13 bits sin signo) (yacc 3 bits de dirección = 0x01, 13 bits sin signo) (zacc 3 bits de dirección = 0x02, 13 bits sin signo) (3 bits de dirección = 0x03, iadc13bit sin signo) (xacc 3 bits de dirección = 0x00, 13 bits sin signo) (yacc 3 bits de dirección = 0x01, 13 bits sin signo) (zacc 3 bits de dirección = 0x02, 13 bits sin signo) (3 bits de dirección = 0x03, iadc13bit sin signo)…

Si está usando algo que no sea la aplicación Accel Plot de Android para leer los datos de Bluetooth, estos son los pasos para extraer la dirección (estoy usando los nombres de las variables del archivo Accel Plot Bluetooth.java del repositorio de GitHub):

- Leer en los 16 int sin firmar

- Extraiga el byte alto y guárdelo en btHigh.

- Extraiga el byte bajo y guárdelo en btLow.

- Recupere la dirección de btHigh usando: (btHigh >> 5) & 0x07. Esta declaración desplaza btHigh 5 bits a la derecha moviendo los tres bits de dirección a los tres registros más bajos. El signo & es un Y lógico que obliga a que los bits 4 y superiores sean cero y que los últimos tres bits coincidan con los bits de la dirección. El resultado de esta declaración es su dirección.

No tiene que preocuparse por la extracción de direcciones si está utilizando Accel Plot.

Paso 3: cargue la aplicación de Android desde Google Play o bifurque el GitHub

Cargue la aplicación de Android desde Google Play o bifurque el GitHub
Cargue la aplicación de Android desde Google Play o bifurque el GitHub

Tiene un par de opciones para cargar la aplicación de Android en su dispositivo. Si desea evitar la codificación, puede buscar "Accel Plot" y la aplicación debería aparecer en la tienda Google Play. Siga las instrucciones de la tienda para la instalación.

Mi deseo con este Instructable es realmente animar a otros a crear proyectos, así que también publiqué el código en un repositorio de GitHub. Debería poder ramificar esto, construirlo y modificarlo como mejor le parezca. Publiqué el código bajo la licencia MIT, ¡así que diviértete!

Paso 4: Conéctese al Arduino a algo interesante (usé un automóvil R / C)

Conéctese al Arduino a algo interesante (usé un automóvil R / C)
Conéctese al Arduino a algo interesante (usé un automóvil R / C)

Finalmente, quiero usar el dispositivo para la detección de la superficie de la carretera, por lo que pensé que sería apropiado un automóvil pequeño con control remoto (R / C). Creo que ayuda en el siguiente paso si los acentos pueden estar en algo que se mueve o vibra.

Paso 5: usa el dispositivo Android para conectarte al Arduino

Utilice el dispositivo Android para conectarse al Arduino
Utilice el dispositivo Android para conectarse al Arduino
Utilice el dispositivo Android para conectarse al Arduino
Utilice el dispositivo Android para conectarse al Arduino
Utilice el dispositivo Android para conectarse al Arduino
Utilice el dispositivo Android para conectarse al Arduino

Si aún no lo ha hecho, primero deberá emparejar el HC-05 con su dispositivo Android. Creo que en la mayoría de los dispositivos puedes hacer esto yendo a la configuración. El pin predeterminado para la mayoría de los dispositivos HC-05 será 1234 o 1111.

Abra la aplicación AccelPlot en el dispositivo Android. Cuando se abre la aplicación, y antes de conectarse al HC-05, puede cambiar la frecuencia de muestreo (esto se establece en el código Arduino), las escalas del acelerómetro (también configuradas en el código Arduino) y la cantidad de muestras que se guardarán.

Una vez realizada esta configuración, haga clic en el botón "Conectar". Debería mostrar los dispositivos Bluetooth y su dispositivo debería aparecer en la lista. Selecciónelo y una vez que el código establezca la conexión, verá un mensaje emergente "Conectado".

Utilice el botón de flecha hacia atrás para volver a Accel Plot. Toque el botón "Iniciar transmisión" para mostrar los datos del dispositivo HC-05. También debe disponer de botones para guardar los datos o reproducir el contenido de frecuencia modulada a través del conector de audio.

Paso 6: Adquirir y graficar los datos

Image
Image
Importar a Python (u otra plataforma) para su uso posterior
Importar a Python (u otra plataforma) para su uso posterior

El botón "Iniciar transmisión" debe estar habilitado. Tóquelo para comenzar a transmitir datos a la pantalla.

El botón "Guardar datos" también estará habilitado, tóquelo para almacenar los datos.

Accel Plot también incluye una opción para emitir una señal modulada en los canales de audio. Los 2 canales de la aplicación Accel Plot se refieren a los canales izquierdo y derecho del conector de salida de audio del dispositivo Android. Esto es útil si desea llevar los datos del MPU-6050 a un sistema de registro de datos separado, como un National Instruments.

El video muestra un ejemplo del sistema que recopila datos en un automóvil R / C.

Paso 7: importar a Python (u otra plataforma) para su uso posterior

Importar a Python (u otra plataforma) para su uso posterior
Importar a Python (u otra plataforma) para su uso posterior

Los archivos se guardan en el dispositivo Android. Los archivos se almacenarán en el directorio "AccelPlot" para la API de Android 18 y anteriores. El código coloca los archivos.dat en la carpeta "\ Tablet / Documents / AccelPlot" para API 19 (KitKat 4.4) y superior. He tenido problemas con algunos dispositivos Android que muestran los archivos cuando están conectados a través de USB. En algunos casos he tenido que reiniciar el dispositivo Android para que aparezcan. No estoy seguro de por qué es así, pero debería haber cuatro archivos, uno para cada canal. Se pueden copiar a un directorio local para trabajo adicional.

Usé Anaconda / Python 2.7 para abrir los archivos y mostrar los datos. El archivo "ExploratoryAnalysis.ipynb" tiene el archivo IPython Notebook que abrirá todos los archivos de datos y trazará los datos de muestra. Los archivos de muestra se incluyen en el repositorio de GitHub. Los datos se guardan como flotantes big-endian de 4 bytes ('> f'), por lo que cualquier programa de análisis debería poder abrirlos.

También he incluido un archivo más simple llamado "ReadDataFiles.ipynb" que muestra cómo leer en un solo archivo por nombre.

Recomendado: