El MPU-6050 es un dispositivo de seguimiento de movimiento de 6 ejes con giroscopio y acelerómetro, lo que lo hace ideal para aplicaciones de detección de movimiento como robótica, drones y proyectos IoT. En esta guía, aprenderás cómo conectar y usar el MPU-6050 con una Raspberry Pi para capturar datos de movimiento y orientación.
Qué necesitarás
- Raspberry Pi (cualquier modelo con soporte GPIO, p. ej., Pi 3, Pi 4)
- Módulo MPU-6050
- Protoboard y cables de conexión
- Un ordenador con acceso SSH a la Raspberry Pi o un teclado y monitor conectados
- Python instalado en la Raspberry Pi
Paso 1: Cableado del MPU-6050 a la Raspberry Pi
El MPU-6050 se comunica con la Raspberry Pi utilizando el protocolo I2C.
Conexiones
| Pin del MPU-6050 | Pin de la Raspberry Pi |
|---|---|
| VCC | 3.3V (Pin 1) |
| GND | Tierra (Pin 6) |
| SDA | SDA (Pin 3, GPIO2) |
| SCL | SCL (Pin 5, GPIO3) |
Nota: Asegúrate de que el módulo MPU-6050 funcione a 3.3V. La mayoría de los módulos incluyen un regulador de voltaje, lo que permite alimentarlos con 5V.
Paso 2: Habilitar la interfaz I2C en la Raspberry Pi
- Abre la herramienta de configuración de Raspberry Pi:
sudo raspi-config - Navega a Interface Options > I2C y actívala.
- Reinicia la Raspberry Pi:
sudo reboot
Paso 3: Instalar herramientas y librerías necesarias
- Actualiza tu Raspberry Pi:
sudo apt update && sudo apt upgrade -y - Instala las herramientas I2C:
sudo apt install -y i2c-tools - Instala librerías de Python para comunicación I2C y procesamiento de datos:
pip install smbus2
Paso 4: Verificar la conexión
- Usa
i2cdetectpara verificar que el MPU-6050 sea detectado en el bus I2C:sudo i2cdetect -y 1 - Deberías ver el MPU-6050 en la dirección
0x68(o0x69si el pin AD0 está puesto en alto). Si no:- Revisa tu cableado.
- Asegúrate de que el MPU-6050 esté alimentado.
Paso 5: Leer datos del MPU-6050
El siguiente script en Python lee datos del acelerómetro y del giroscopio del MPU-6050.
Ejemplo de código en Python
import smbus2
import time
# Registros y dirección del MPU-6050
MPU6050_ADDR = 0x68
PWR_MGMT_1 = 0x6B
ACCEL_XOUT_H = 0x3B
GYRO_XOUT_H = 0x43
# Inicializar bus I2C
bus = smbus2.SMBus(1)
# Despertar el MPU-6050
bus.write_byte_data(MPU6050_ADDR, PWR_MGMT_1, 0)
def read_raw_data(addr):
# Leer dos bytes de datos desde la dirección dada
high = bus.read_byte_data(MPU6050_ADDR, addr)
low = bus.read_byte_data(MPU6050_ADDR, addr+1)
value = (high << 8) | low
# Convertir a valor con signo
if value > 32767:
value -= 65536
return value
try:
while True:
# Leer datos del acelerómetro
accel_x = read_raw_data(ACCEL_XOUT_H)
accel_y = read_raw_data(ACCEL_XOUT_H + 2)
accel_z = read_raw_data(ACCEL_XOUT_H + 4)
# Leer datos del giroscopio
gyro_x = read_raw_data(GYRO_XOUT_H)
gyro_y = read_raw_data(GYRO_XOUT_H + 2)
gyro_z = read_raw_data(GYRO_XOUT_H + 4)
# Convertir datos sin procesar a valores significativos (puede requerir escalado opcional)
accel_x_scaled = accel_x / 16384.0
accel_y_scaled = accel_y / 16384.0
accel_z_scaled = accel_z / 16384.0
gyro_x_scaled = gyro_x / 131.0
gyro_y_scaled = gyro_y / 131.0
gyro_z_scaled = gyro_z / 131.0
print(f"Acelerómetro: X={accel_x_scaled:.2f}, Y={accel_y_scaled:.2f}, Z={accel_z_scaled:.2f}")
print(f"Giroscopio: X={gyro_x_scaled:.2f}, Y={gyro_y_scaled:.2f}, Z={gyro_z_scaled:.2f}")
time.sleep(1)
except KeyboardInterrupt:
print("Saliendo...")
Paso 6: Aplicaciones del MPU-6050
- Seguimiento de movimiento: Rastrear movimiento y orientación en robótica o dispositivos wearables.
- Sistemas de estabilización: Implementar estabilización giroscópica para drones o gimbals.
- Juegos: Crear controladores de juegos basados en movimiento.
- Proyectos IoT: Usar datos de movimiento para disparar eventos de automatización.
Solución de problemas
-
Dispositivo no detectado:
- Verifica las conexiones SDA y SCL.
- Asegúrate de que la interfaz I2C esté habilitada en la Raspberry Pi.
- Revisa la alimentación del MPU-6050.
-
Lecturas inexactas:
- Calibra el sensor implementando un offset para cada eje.
- Asegúrate de que el sensor esté colocado sobre una superficie estable.
-
Errores I2C:
- Asegúrate de que no haya dispositivos en conflicto en el bus I2C.
Conclusión
El MPU-6050 es un sensor de movimiento versátil que puede añadir capacidades precisas de seguimiento de movimiento a tus proyectos con Raspberry Pi. Siguiendo esta guía, puedes configurar y usar el MPU-6050 para aplicaciones como robótica, sistemas de estabilización y automatización IoT. ¡Experimenta con el escalado y el filtrado de datos para ajustar el sensor a tus necesidades!




