Tabla de contenido:
- Paso 1: construye el escudo / tablero
- Paso 2: programa el Arduino
- Paso 3: cargue la aplicación de Android desde Google Play o bifurque el GitHub
- Paso 4: Conéctese al Arduino a algo interesante (usé un automóvil R / C)
- Paso 5: usa el dispositivo Android para conectarte al Arduino
- Paso 6: Adquirir y graficar los datos
- Paso 7: importar a Python (u otra plataforma) para su uso posterior
Video: Registro de datos MPU-6050 / A0 en tiempo real con Arduino y Android: 7 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
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
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
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
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)
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
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
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
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:
Cómo hacer un registrador de datos en tiempo real de humedad y temperatura con Arduino UNO y tarjeta SD - Simulación del registrador de datos DHT11 en Proteus: 5 pasos
Cómo hacer un registrador de datos en tiempo real de humedad y temperatura con Arduino UNO y tarjeta SD | Simulación del registrador de datos DHT11 en Proteus: Introducción: hola, soy Liono Maker, aquí está el enlace de YouTube. Estamos haciendo un proyecto creativo con Arduino y trabajamos en sistemas embebidos. Data-Logger: Un registrador de datos (también registrador de datos o registrador de datos) es un dispositivo electrónico que registra datos a lo largo del tiempo w
Programa MicroPython: Actualice los datos de la enfermedad por coronavirus (COVID-19) en tiempo real: 10 pasos (con imágenes)
Programa MicroPython: Actualización de los datos de la enfermedad por coronavirus (COVID-19) en tiempo real: En las últimas semanas, el número de casos confirmados de enfermedad por coronavirus (COVID 19) en todo el mundo ha superado los 100.000, y la organización mundial de la salud (OMS) ha declarado el El nuevo brote de neumonía por coronavirus será una pandemia mundial. Fui muy
Registro de datos remoto de alta precisión con multímetro / Arduino / pfodApp: 10 pasos (con imágenes)
Registro remoto de datos de alta precisión usando Multímetro / Arduino / pfodApp: actualizado el 26 de abril de 2017 Circuito y placa revisados para usar con medidores USB 4000ZC No se requiere codificación de Android Este instructivo le muestra cómo acceder a una amplia gama de mediciones de alta precisión desde su Arduino y también enviarlas de forma remota para registrar y
Estación meteorológica con registro de datos: 7 pasos (con imágenes)
Estación meteorológica con registro de datos: en este instructivo, le mostraré cómo hacer usted mismo un sistema de estación meteorológica. Todo lo que necesitas son conocimientos básicos de electrónica, programación y un poco de tiempo. Este proyecto aún está en proceso. Esta es solo la primera parte. Las actualizaciones serán
IoT Data Science PiNet para visualización de datos en pantalla inteligente en tiempo real: 4 pasos
IoT Data Science PiNet para visualización de datos en pantalla inteligente en tiempo real: puede armar fácilmente una red de IoT de pantallas inteligentes para la visualización de datos para potenciar sus esfuerzos de investigación en ciencia de datos o en cualquier campo cuantitativo. Puede llamar al " push " de sus parcelas a los clientes directamente desde su