0% encontró este documento útil (0 votos)
27 vistas8 páginas

Generación de Datos con MPU6050 y Python

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
27 vistas8 páginas

Generación de Datos con MPU6050 y Python

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

BAUTISTA PAZ MARIANA

BMED_09_01

PROYECTO 1: GENERAR CONJUNTO


DE DATOS
Introducción.
El MPU6050 es un dispositivo de rastreo de movimiento de seis ejes basado en MEMS
(Sistemas Microelectromecánicos). Este módulo es conocido por su tamaño compacto, bajo
consumo de energía, alta precisión y resistencia a los golpes. Es un dispositivo digital que
combina un giroscopio de tres ejes y un acelerómetro de tres ejes, además de un sensor de
temperatura, todo en un solo chip.
El MPU6050 puede procesar algoritmos de nueve ejes y capturar el movimiento en los ejes X, Y
y Z simultáneamente. Se utiliza en una variedad de proyectos industriales y dispositivos
electrónicos para controlar y detectar el movimiento tridimensional de diferentes objetos.
Además, puede conectarse fácilmente a otros sensores, como magnetómetros y
microcontroladores, lo que lo hace muy versátil para aplicaciones de navegación, goniometría,
estabilización y control por gestos.
Una red neuronal es un modelo computacional inspirado en la estructura y funcionamiento del
cerebro humano. Utilizado en inteligencia artificial, está compuesto por un conjunto
interconectado de nodos o neuronas artificiales que procesan información y realizan tareas
específicas. Las redes neuronales aprenden y mejoran su precisión con el tiempo basándose en
datos de entrenamiento, siendo herramientas poderosas para clasificar y agrupar datos
rápidamente, como en el reconocimiento de voz o imágenes.
En esta práctica, se busca generar un conjunto de datos para entrenar una red neuronal. Se debe
elegir un movimiento e identificarlo con la ayuda del sensor MPU6050. Este conjunto de datos
debe incluir 100 mediciones, tanto del movimiento elegido como de otros movimientos
diferentes, y los datos deben estar bien identificados. Cada medición debe tener los datos de los
tres ejes almacenados por separado, resultando en 300 datos, uno por cada eje en las 100
mediciones, todo en archivos .txt.

Desarrollo y Resultados.
Inicialmente, se debe crear un programa en Arduino para obtener los datos del sensor MPU6050.
El siguiente código se explica línea por línea para mejor comprensión:
#include<Wire.h> // Incluye la biblioteca Wire para la comunicación I2C
#include<MPU6050.h> // Incluye la biblioteca MPU6050 para manejar el sensor
MPU6050

MPU6050 sensor; // Crea un objeto 'sensor' de la clase MPU6050


int gx, gy, gz; // Declara variables enteras para almacenar los datos del
giroscopio en los ejes X, Y y Z

void setup() {
Serial.begin(9600); // Inicializa la comunicación serial a 9600 baudios
Wire.begin(); // Inicia la biblioteca Wire para la comunicación I2C
sensor.initialize(); // Inicializa el sensor MPU6050

// Verifica si el sensor está conectado correctamente


if(sensor.testConnection()) {
Serial.print("Sensor iniciado correctamente"); // Imprime un mensaje si el sensor
se inicializó correctamente
} else {
Serial.print("Error al iniciar el sensor"); // Imprime un mensaje de error si
la inicialización falla
}
}

void loop() {
// Obtiene los valores de rotación (giroscopio) y los almacena en gx, gy y gz
sensor.getRotation(&gx, &gy, &gz);

// Imprime los valores del giroscopio en los ejes X, Y y Z en la consola serial


Serial.println(gx); // Imprime el valor de gx (rotación en el eje X)
Serial.println(gy); // Imprime el valor de gy (rotación en el eje Y)
Serial.println(gz); // Imprime el valor de gz (rotación en el eje Z)
Serial.println(); // Imprime una línea en blanco para separar las lecturas

delay(1000); // Espera 1000 milisegundos (1 segundo) antes de repetir el


bucle
}

Una vez que el programa está funcionando, necesitamos guardar los datos en un archivo .txt para
el entrenamiento de la red neuronal. Para esto, se usa un código en Python con el software
Spyder, que establece una conexión con el Serial Monitor de Arduino usando la librería pyserial
y guarda los 100 datos de cada eje en .txt. A continuación se muestra el código y su explicación
línea por línea:
import serial # Importa la biblioteca 'serial' para la comunicación serial

import time # Importa la biblioteca 'time' para manejar retardos y tiempos

import os # Importa la biblioteca 'os' para manejar operaciones del


sistema operativo

# Establece la conexión serial con el puerto COM5 a una velocidad de 9600 baudios

serialArduino = serial.Serial("COM5", 9600)

time.sleep(1)

with open(os.path.join(directorio, "lecturas.txt"), "w") as archivo:

# Lee 300 líneas de datos del Arduino

for x in range(300):

# Lee una línea de datos desde el puerto serial, la decodifica de 'ascii' y


elimina espacios en blanco

dato = serialArduino.readline().decode("ascii").strip()

# Escribe el dato en el archivo seguido de una nueva línea

archivo.write(dato + "\n")
# Imprime el dato en la consola

print(dato)

Se hará uso del movimiento del giroscopio, mostrando el movimiento deseado sobre el eje Y del
giroscopio.
Al finalizar las 100 lecturas, se obtuvieron las siguientes gráficas por cada eje del giroscopio.
Primero se muestra la gráfica con el movimiento deseado y después con los movimientos no
deseados.
EJE X

EJE Y
EJE Z

Conclusiones.
En esta práctica, se lograron cumplir los objetivos de recolección y organización de datos usando
el sensor MPU6050 para capturar movimientos específicos. Las gráficas obtenidas muestran que
aproximadamente la mitad de los movimientos registrados corresponden al movimiento elegido,
mientras que la otra mitad incluye movimientos al azar. Esta variación en los datos es crucial
para el entrenamiento efectivo de la red neuronal, permitiéndole aprender a distinguir entre
diferentes tipos de movimientos.
El proceso de implementación, que abarcó desde la programación del sensor en Arduino hasta la
recolección y almacenamiento de los datos en archivos .txt mediante Python, demostró ser
eficaz. La precisión y fiabilidad del sensor MPU6050 permitieron obtener datos consistentes en
los ejes X, Y y Z, proporcionando una base sólida para el entrenamiento de la red neuronal.
La práctica destacó la importancia de combinar herramientas y lenguajes de programación
(Arduino y Python) para lograr objetivos complejos. El uso de pyserial en Python para leer los
datos del monitor serial de Arduino y almacenarlos sistemáticamente en archivos de texto fue
clave en la metodología adoptada
Referencias.

1. Brownlee, J. (2019). Deep Learning for Time Series Forecasting: Predict the Future with
MLPs, CNNs and LSTMs in Python. Machine Learning Mastery.
2. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
3. Shiffman, D. (2015). The Nature of Code: Simulating Natural Systems with Processing.
D. Shiffman.
4. Karpathy, A. (2016). CS231n: Convolutional Neural Networks for Visual Recognition.
Stanford University. Recuperado de http://cs231n.stanford.edu/

También podría gustarte