Arduino + IMU MPU-6050 con Python y Gráficos (3D)


La combinación de Python con Arduino puede sonar complicada al inicio, especialmente cuando se trabaja con sensores que generan múltiples variables en tiempo real. 

Sin embargo, integrar ambas tecnologías permite aprovechar lo mejor de cada una como la capacidad de adquisición de datos de Arduino y la potencia de procesamiento, visualización y análisis de Python. 

En este desarrollo, el objetivo principal fue controlar dispositivos utilizando el sensor IMU-6050, el cual ofrece mediciones de aceleración, giroscopio y orientación espacial.


IMU MPU-6050

Además de lograr la comunicación fluida entre Arduino y Python, se buscó generar un registro visual claro y detallado de los movimientos del sensor, permitiendo interpretar sus valores en gráficos y animaciones que facilitan el análisis, depuración y expansión del proyecto hacia aplicaciones más avanzadas, como control gestual, robótica o sistemas interactivos.




Diagrama de conexión y sensor MPU6050 

Blink de Arduino UNO

Lo primero es descargar el código al Arduino de este sensor, este código envía por medio de la terminal serial los diferentes datos como aceleración en los ejes XYZ y de giroscopio también en XYZ, adicionalmente nos da una variable con la información de la temperatura.

Proyectos con Arduino y Python


Descargamos al Arduino el código para que envíe los datos del sensor vía serial.

¿Que es la Comunicación Serial?

https://github.com/iarobotixyz/Arduino/blob/master/Sensores/IMU%20MPU-6050/Inclinometro.ino


Variables del IMU6050 vía Serial

Introducción a Python con PyDroid


Arduino ==> USB Serial ==> Python


El código que vamos a correr en python para la lectura serial es el siguiente:

https://raw.githubusercontent.com/iarobotixyz/Python/main/Lectura%20Serial%20Python/Lectura_Serial_Python.py

Teniendo como resultado:


Lo primero que notamos es que el envío de esta información no esta organizada, esto es funcional pero para que se nos facilite la lectura de datos desde python vamos a modificar la estructura de la cadena desde Arduino:

  • 1a modificación es para la prueba en python y lograr reducir el tamaño de la cadena

https://github.com/iarobotixyz/Arduino/blob/master/Sensores/IMU%20MPU-6050/ArduinoSensorIMUSerial1.ino

  • 2a modificación es para ajustar la cadena y poder manipular las variables para la gráfica con python.

https://github.com/iarobotixyz/Arduino/blob/master/Sensores/IMU%20MPU-6050/GraficaSensorIMU2.ino


En este punto ya contamos con la comunicación estable entre Arduino y Python, por lo que ahora procederemos a organizar y visualizar las variables directamente desde Python utilizando el siguiente código:


Código: 


Volvemos a conectar el Arduino y al ejecutar el programa tenemos como resultado las variables del Acelerómetro y del Giroscopio ya organizadas en XYZ:




Una vez establecida la conexión entre Arduino y Python, y con todas las variables correctamente organizadas, el siguiente paso consiste en generar la gráfica de los datos del sensor. 

Para ello utilizaremos distintas librerías de Python que permiten visualizar la información de forma dinámica y detallada.


GRÁFICA 1

https://github.com/iarobotixyz/Python/blob/main/Sensor%20Python%20Grafica/Graficando_1_Lectura_Serial_Python_Cadena_Arduino.py



GRÁFICA 2

https://github.com/iarobotixyz/Python/blob/main/Sensor%20Python%20Grafica/Graficando_2_Lectura_Serial_Python_Cadena_Arduino.py



GRÁFICA 3

https://github.com/iarobotixyz/Python/blob/main/Sensor%20Python%20Grafica/Graficando_3_Lectura_Serial_Python_Cadena_Arduino.py



Links:

https://iarobotixyz.blogspot.com/p/imu-mpu-6050.html

Comentarios