Análisis exploratorio de datos de sensores MEMS

Exploratory analysis of MEMS sensor data

Leyendo, recopilando y analizando datos del sensor MPU6050

Los sensores MEMS (Sistemas Microelectromecánicos) se utilizan ampliamente en diferentes aplicaciones, desde controladores de juegos y teléfonos inteligentes hasta vehículos aéreos no tripulados. En este artículo, mostraré cómo conectar un sensor de giroscopio y acelerómetro, qué tipo de datos es posible obtener de él y cómo se pueden procesar y visualizar estos datos.

Empecemos.

Hardware

El MPU-6050 es un sensor de 6 ejes que combina un giroscopio de 3 ejes, un acelerómetro de 3 ejes y la interfaz I2C. Según se indica en la hoja de datos, se utiliza ampliamente en tabletas y teléfonos inteligentes. Cuando nuestro teléfono inteligente o reloj inteligente calcula los pasos y las calorías durante el entrenamiento, en realidad se utilizan los datos de los sensores MEMS. Pero sensores como este pueden usarse para más que solo deportes. Decidí colocar el sensor en mi apartamento durante varios días y averiguar si sería capaz de detectar y analizar diferentes vibraciones en el edificio donde vivo.

Si queremos recopilar datos durante varios días, la Raspberry Pi es una buena solución para eso. La Raspberry Pi es una computadora de placa única barata (30–50$); consume poca energía y tiene muchos pines para conectar diferentes tipos de hardware. Una placa de prototipado MPU-6050 se puede pedir en Amazon por 3–5$. El propio sensor utiliza el bus I2C para la transferencia de datos y se puede conectar a una Raspberry Pi utilizando solo 4 cables:

Diagrama de conexión, Imagen del autor

Antes de usar el sensor, el bus I2C debe estar habilitado en el sistema operativo Raspbian (hay suficientes tutoriales sobre cómo conectar el MPU6050 a la Raspberry Pi, así que omitiré los detalles “hardware” aquí). Después de conectar el sensor, creé una aplicación simple en Python que lee los datos del sensor y los escribe “tal cual” en archivos de registro:

from datetime import datetimeimport smbusimport mathimport time# Registros MPU6050PWR_MGMT_1   = 0x6BSMPLRT_DIV   = 0x19CONFIG       = 0x1AGYRO_CONFIG  = 0x1BINT_ENABLE   = 0x38ACCEL_XOUT_H = 0x3BACCEL_YOUT_H = 0x3DACCEL_ZOUT_H = 0x3FGYRO_XOUT_H  = 0x43GYRO_YOUT_H  = 0x45GYRO_ZOUT_H  = 0x47bus = smbus.SMBus(1)address = 0x68def device_init():    """ Inicializar el MPU-6050 """    bus.write_byte_data(address, SMPLRT_DIV, 0x4)...