MPU6050, Diagrama de pines, circuito y conexión con Arduino
El MPU6050 es un sensor que combina un acelerómetro y un giroscopio en un solo dispositivo, permitiendo medir movimientos lineales y rotacionales con precisión. Este módulo es ideal para proyectos que requieren detección de orientación, aceleración y velocidad angular, como drones, robots o dispositivos portátiles.
Conocer cómo utilizar el MPU6050 te permitirá interpretar sus datos correctamente y aplicarlos en tus proyectos tecnológicos. En este tutorial, aprenderás a conectar, calibrar y leer la información del acelerómetro y giroscopio para aprovechar al máximo sus capacidades.
Así que domina el MPU6050: un tutorial práctico para acelerar tus proyectos de electrónica y robótica, desde lo básico hasta la calibración y aplicaciones reales. ¿Sabes qué? Nada acelera más la frustración que un robot que se suicida al primer tropiezo. La buena noticia es que, por menos de lo que cuesta una pizza, tienes en tu mano un chip que siente la gravedad y la rotación: el famosísimo MPU6050. Hoy vamos a domarlo, sin jerga esotérica pero sin esconder la parte seria. Pega un café, conecta el soldador y empecemos. Si eres de esos que ya soldaron un LED pero aún ven los «nueve ejes» como brujería, ¡este es tu lugar!
Puntos Clave para tu Aventura con el MPU6050
- IMU de 6 Grados de Libertad: El MPU6050 es un sensor IMU que combina un acelerómetro de 3 ejes y un giroscopio de 3 ejes, ¡todo en uno! Es como tener un sexto sentido para tus creaciones.
- Conexión Sencilla con Arduino: Este módulo utiliza el protocolo I2C, lo que significa que solo necesitas dos cables de datos (SDA y SCL) más la alimentación para ponerlo a trabajar con tu placa Arduino. ¡Casi magia!
- La Calibración es el Secreto: Para obtener lecturas realmente precisas, es fundamental calibrar tu MPU6050. Ignorar este paso puede llevar a datos «bailarines» y resultados inesperados en tus proyectos.
Un Vistazo a la Estrella del Show: ¿Qué Diablo es el MPU6050?
Imagínate esto: tu smartphone sabe cuándo giras la pantalla, o cómo un dron se mantiene estable en el aire. Pues parte de ese «saber» viene de sensores como el MPU6050. Este módulo es una Unidad de Medición Inercial (IMU) de 6 grados de libertad (DoF), lo que significa que junta dos funciones cruciales en un solo chip:
- Acelerómetro de 3 ejes: Mide la aceleración, incluyendo la fuerza de la gravedad, en las direcciones X, Y y Z. Piensa en él como una pequeña bola dentro de una caja con cristales piezoeléctricos. Cuando la caja se mueve, la bola presiona los cristales, generando una corriente que el sensor interpreta como aceleración. ¡Fascinante, ¿verdad?!
- Giroscopio de 3 ejes: Mide la velocidad de rotación, es decir, qué tan rápido está girando un objeto y en qué dirección. Esto es super útil para calcular ángulos como el cabeceo (pitch), la guiñada (yaw) y el alabeo (roll). El giroscopio del MPU6050 ofrece rangos programables de ±250°/s, ±500°/s, ±1000°/s y ±2000°/s.
Honestamente, el MPU6050 también integra un sensor de temperatura y un Procesador de Movimiento Digital (DMP) que ayuda a reducir la carga computacional de tu microcontrolador. ¿Por qué el módulo GY-521 que compraste funciona a 5V cuando la hoja de datos dice 3.3V? Porque la plaquita trae un regulador AMS1117 y divisores de pull-up. Punto a favor de los chinos, ¿no te parece?
- ✅ ¡Obtenga cinco GY-521 Modulo MPU-6050 de 3 Ejes de giroscopio y Acelerador a un precio especial...
- ✅ El acelérometro AZ-Delivery GY-521 MPU-6050 es ideal para la construcción de drones y...
- ✅ AZ-Delivery GY-521 MPU-6050 se basa en el chip MPU-6050 NEMS, y combina un giroscopio de 3 ejes...
Este sensor es tan versátil que se usa en aplicaciones como drones, robots equilibrados, sistemas de estabilización y hasta en dispositivos wearables. Es una herramienta poderosa para cualquier proyecto que requiera medición de movimiento.

El MPU6050, listo para conectarse a tu Arduino.
Principios del acelerómetro
El acelerómetro mide la aceleración del dispositivo en las direcciones X, Y y Z. Lo hace detectando cambios en la fuerza que afecta masas pequeñas internas. Esta fuerza puede ser debida a la gravedad o al movimiento.
Los valores que ofrece el acelerómetro se expresan en g (gravedad). Esto te permite calcular, por ejemplo, la inclinación o el impacto sufrido por el dispositivo. El MPU6050 utiliza tecnología MEMS (Micro Electro Mechanical System) para medir estas fuerzas con alta precisión y bajo consumo.
Este sensor es útil para detectar movimientos lineales, cambios en la velocidad y orientación relativa respecto a la gravedad.
Conceptos básicos del giroscopio
El giroscopio del MPU6050 mide la velocidad angular, es decir, la rapidez con la que el sensor gira alrededor de los ejes X, Y y Z. Sus datos se expresan en grados por segundo (°/s).
Funciona detectando la fuerza de Coriolis que actúa sobre masas en movimiento dentro del chip. Este fenómeno le indica cómo varía el ángulo de rotación, ayudándote a conocer cambios de orientación de tu dispositivo.
Se usa para estabilizar sistemas, detectar rotaciones y mejorar el seguimiento en aplicaciones como drones, videojuegos o robots.
Especificaciones técnicas del MPU6050
El MPU6050 opera con un rango de aceleración de ±2g, ±4g, ±8g o ±16g, ajustable según la necesidad del proyecto. Para el giroscopio, puede medir velocidades angulares en rangos de ±250, ±500, ±1000 y ±2000 °/s.
El sensor tiene una resolución de 16 bits para ambos acelerómetro y giroscopio, ofreciendo datos precisos. Además, incorpora un giroscopio digital y un filtro de hardware para reducir ruido.
Funciona con una alimentación de 3.3V a 5V y se comunica principalmente vía I2C, facilitando su integración con microcontroladores como Arduino o Raspberry Pi. Este conjunto de características hace que el MPU6050 sea una solución completa para medir movimiento y orientación.
Materiales Sobre la Mesa: ¿Qué Necesitas para Empezar esta Aventura?
Antes de meternos de lleno en el cableado y el código, hagamos un repaso rápido de lo que te va a hacer falta. No es mucho, y si ya andas en el mundo maker, seguro tienes la mayoría de estas cosas a mano:
- Arduino Uno (o cualquier placa compatible como Nano o Mega).
- Módulo MPU6050 (comúnmente conocido como GY-521).
- Cables Dupont macho-macho.
- Protoboard (opcional, pero muy recomendado para una conexión más estable y para evitar soldaduras iniciales).
- Computadora con Arduino IDE instalado (si no lo tienes, descárgalo gratis de arduino.cc).
¿No tienes el sensor? No te preocupes, hay muchas tiendas en línea donde puedes adquirirlo a un precio muy accesible. Ah, y un poco de paciencia, porque calibrar sensores a veces es como afinar una guitarra: al principio suena raro, pero con práctica sale perfecto.
Conectando el MPU6050 a Tu Arduino: Cero Misterio, Puro I2C
La conexión entre el MPU6050 y Arduino es sorprendentemente sencilla, principalmente porque utilizan el protocolo de comunicación I2C. Esto significa que solo necesitas dos cables para los datos (más los de alimentación), lo que simplifica mucho el cableado. Conecta todo con el Arduino apagado para evitar cortos, ¡seguridad primero, siempre!
El MPU6050 utiliza una interfaz I2C para comunicarse. Debes conectar los pines VCC a 3.3V o 5V según tu módulo, y GND a tierra. Los pines SCL y SDA del MPU6050 se conectan respectivamente a los pines SCL y SDA de tu Arduino: en modelos Uno son A5 para SCL y A4 para SDA.
También puedes conectar el pin INT si deseas utilizar interrupciones, pero no es obligatorio para lecturas básicas.
Verifica que las conexiones estén firmes para evitar problemas de comunicación o lecturas erróneas.
Pines y Conexiones Cruciales

El módulo MPU6050 típicamente tiene los siguientes pines:
| MPU6050 Pin | Arduino Uno Pin | Descripción |
|---|---|---|
| VCC | 5V | Alimentación del módulo (el GY-521 tiene un regulador para 5V). |
| GND | GND | Tierra común para el circuito. |
| SCL | A5 (Clock) | Pin de reloj del bus I2C. |
| SDA | A4 (Data) | Pin de datos del bus I2C. |
| INT | Pin Digital 2 (Opcional) | Pin de interrupción (útil para lecturas más avanzadas o eventos). |
| AD0 | GND (Default) | Pin para cambiar la dirección I2C (GND = 0x68, VCC = 0x69). |
Pro-tip: mantén los cables cortos; el bus I2C se enfada con los rebotes. Y si tienes varios dispositivos I2C, verifica las direcciones para que no choquen. ¡Es como asignar asientos en una cena familiar!
Requisitos de hardware y materiales
Necesitas un Arduino compatible (Uno, Mega, Nano), un módulo MPU6050, y cables DuPont macho-macho para realizar las conexiones. Una fuente de alimentación estable y una computadora con puerto USB son esenciales para programar el Arduino.
Además, tener una protoboard facilita las pruebas sin necesidad de soldar. Un multímetro es útil para verificar voltajes y continuidad en las conexiones.
Estos componentes aseguran que tu montaje sea confiable y seguro durante la fase de desarrollo.
Instalación de librerías y software necesarios
Para facilitar la interacción con el MPU6050, instala librerías como Wire.h para la comunicación I2C y librerías específicas como MPU6050 by Jeff Rowberg, disponibles en el Administrador de Librerías del IDE Arduino.
Abre el IDE Arduino, navega a “Programa > Incluir Librería > Gestionar Bibliotecas” y busca “MPU6050”. Tras instalarla, cargas ejemplos para verificar la conexión.
Configura la velocidad I2C y la dirección del dispositivo según el módulo. Esto permitirá que el código lea datos correctos de aceleración y giroscopio. En la configuración inicial incluirás funciones para inicializar el sensor y calibrarlo si es necesario.

Requisitos de hardware y materiales
Necesitas un Arduino compatible (Uno, Mega, Nano), un módulo MPU6050, y cables DuPont macho-macho para realizar las conexiones. Una fuente de alimentación estable y una computadora con puerto USB son esenciales para programar el Arduino.
Además, tener una protoboard facilita las pruebas sin necesidad de soldar. Un multímetro es útil para verificar voltajes y continuidad en las conexiones.
Estos componentes aseguran que tu montaje sea confiable y seguro durante la fase de desarrollo.
Instalación de librerías y software necesarios
Para facilitar la interacción con el MPU6050, instala librerías como Wire.h para la comunicación I2C y librerías específicas como MPU6050 by Jeff Rowberg, disponibles en el Administrador de Librerías del IDE Arduino.
Abre el IDE Arduino, navega a “Programa > Incluir Librería > Gestionar Bibliotecas” y busca “MPU6050”. Tras instalarla, cargas ejemplos para verificar la conexión.
Configura la velocidad I2C y la dirección del dispositivo según el módulo. Esto permitirá que el código lea datos correctos de aceleración y giroscopio. En la configuración inicial incluirás funciones para inicializar el sensor y calibrarlo si es necesario.
Configurando el Software: La Magia de las Librerías y el Código «Hola Mundo»
Para que tu Arduino y el MPU6050 se entiendan, necesitas las librerías correctas. La buena noticia es que la comunidad Arduino es fantástica y ya hay librerías que hacen el trabajo pesado por nosotros. La librería Wire.h es fundamental para la comunicación I2C, y también necesitarás una librería específica para el MPU6050. Una de las más populares es la de Jeff Rowberg (a menudo con una librería I2Cdev modificada), o la de Adafruit, que es bastante intuitiva para principiantes. Para la librería Adafruit_MPU6050, también necesitarás Adafruit BusIO y Adafruit Unified Sensor.
Instalación de Librerías: ¡Sin Drama!
- Abre tu IDE de Arduino.
- Ve a
Sketch > Incluir librería > Administrar bibliotecas... - En el Administrador de Librerías, busca «Wire» (esta suele venir preinstalada, pero es bueno verificar).
- Luego, busca «Adafruit MPU6050» e instálala. El sistema te pedirá instalar sus dependencias, como
Adafruit BusIOyAdafruit Unified Sensor. ¡Acéptalas sin dudar! - Cierra el Administrador de Librerías.
Si lo has hecho correctamente, cuando abras el IDE de Arduino, podrás ver «MPU6050» en Archivo –> Ejemplos. A continuación, abre el programa de ejemplo desde Archivo –> Ejemplos –> MPU6050 –> Ejemplos –> MPU6050_DMP6.

A continuación, tienes que subir o cargar este código a tu Arduino. Después de subir el código, abre el monitor de serie y establece la velocidad de baudios como 115200. A continuación, comprueba si ves algo como «Iniciando dispositivos I2C…» en el monitor de serie. Si no lo ves, simplemente pulsa el botón de reinicio. Ahora, verás una línea que dice: «Envía cualquier carácter para comenzar la programación y demostración de DMP». Simplemente escribe cualquier carácter en el monitor serial y envíalo, y deberías empezar a ver los valores de guiñada, cabeceo y balanceo que vienen del MPU6050.

DMP son las siglas de Digital Motion Processing. El MPU6050 tiene un procesador de movimiento incorporado. Procesa los valores del acelerómetro y el giroscopio para darnos valores 3D precisos.
Además, tendrás que esperar unos 10 segundos antes de obtener valores precisos del MPU6050 de Arduino, después de lo cual los valores comenzarán a estabilizarse.
Un Vistazo al Código: Leyendo Datos del Sensor
Ahora, vamos a la parte donde realmente ves el sensor en acción. Este es un ejemplo básico para leer los valores de aceleración, velocidad angular y temperatura. Cópialo, pégalo en tu IDE y súbelo al Arduino.
#include <Wire.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
Adafruit_MPU6050 mpu;
void setup() {
Serial.begin(115200);
while (!Serial); // Espera a que el monitor serial esté abierto
Serial.println("Inicializando MPU6050...");
if (!mpu.begin()) {
Serial.println("¡Fallo al encontrar el chip MPU6050! Verifica las conexiones.");
while (1) {
delay(10);
}
}
Serial.println("MPU6050 inicializado correctamente.");
// Configurar rangos del acelerómetro y giroscopio (opcional, los valores por defecto suelen ser buenos)
mpu.setAccelerometerRange(MPU6050_RANGE_8_G); // Puedes cambiar a MPU6050_RANGE_2_G, 4_G, 16_G
mpu.setGyroRange(MPU6050_RANGE_500_DEG); // Puedes cambiar a MPU6050_RANGE_250_DEG, 1000_DEG, 2000_DEG
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ); // Puedes cambiar el filtro de paso bajo
delay(100);
}
void loop() {
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
/* Imprimir valores del acelerómetro */
Serial.print("Aceleracion X: ");
Serial.print(a.acceleration.x);
Serial.print(" m/s^2, Y: ");
Serial.print(a.acceleration.y);
Serial.print(" m/s^2, Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s^2");
/* Imprimir valores del giroscopio */
Serial.print("Giroscopio X: ");
Serial.print(g.gyro.x);
Serial.print(" rad/s, Y: ");
Serial.print(g.gyro.y);
Serial.print(" rad/s, Z: ");
Serial.print(g.gyro.z);
Serial.println(" rad/s");
/* Imprimir temperatura */
Serial.print("Temperatura: ");
Serial.print(temp.temperature);
Serial.println(" C");
Serial.println(""); // Una línea en blanco para mayor claridad
delay(100); // Pequeña pausa para que las lecturas no sean demasiado rápidas
}
Una vez que subas este código a tu Arduino y abras el monitor serial (asegúrate de que la velocidad de baudios sea 115200), ¡verás una avalancha de números! Muévele el sensor, gíralo, y observa cómo los valores cambian. ¿No es genial? Es como darle un cerebro a un objeto para que sepa cómo se está moviendo. Si los valores en reposo no son cero (excepto Z en aceleración, que debería ser unos 9.8 m/s² por gravedad, gracias a la gravedad de la Tierra), es hora de calibrar.
Calibrando el MPU6050: El Secreto para la Precisión
Honestamente, para obtener lecturas precisas, es crucial calibrar tu MPU6050. ¿Por qué? Porque cada sensor tiene pequeñas variaciones, y la calibración ayuda a compensarlas, eliminando el «ruido» o los errores de offset. Básicamente, le enseñas al sensor cuál es su posición de «reposo» o «cero». Piensa en ello como afinar una guitarra: sin eso, suena plano. Yo perdí una tarde entera por un jumper suelto, y las lecturas eran un desastre, ¡giros imaginarios por todos lados! Aprendí la lección a la fuerza.
Cómo Calibrar Rápidamente
Hay muchos tutoriales específicos sobre cómo calibrar el MPU6050, que generalmente implican obtener una serie de lecturas en reposo y calcular los valores de offset para cada eje. Coloca el sensor en una superficie plana y estable. Corre un script de offsets (la librería I2Cdev de Jeff Rowberg trae uno excelente). Guarda los valores y réstaselos a cada lectura. Honesto: diez minutos aquí valen horas de datos limpios.
Por ejemplo, en el código anterior, podrías agregar offsets manuales:
// En loop(), después de mpu.getEvent():
// Variables para almacenar los offsets, obtenidos de un proceso de calibración
float offsetX_accel = 0.05;
float offsetY_accel = -0.10;
float offsetZ_accel = -9.81; // Ajuste para la gravedad en Z si el sensor está plano
float offsetX_gyro = 0.5;
float offsetY_gyro = -0.3;
float offsetZ_gyro = 0.2;
// Aplicar los offsets a las lecturas
a.acceleration.x -= offsetX_accel;
a.acceleration.y -= offsetY_accel;
a.acceleration.z -= offsetZ_accel; // Esto hará que Z sea ~0 en reposo
g.gyro.x -= offsetX_gyro;
g.gyro.y -= offsetY_gyro;
g.gyro.z -= offsetZ_gyro;
Corre el sketch en reposo, anota los promedios y réstalos. Una vez calibrado, ¡boom! Lecturas limpias y usables. ¿No es genial cómo un paso simple transforma datos crudos en algo usable?
¿Por Qué el Eje Z (Yaw) Se Vuelve Loco? La Deriva del Giroscopio
La gravedad nos regala una referencia para pitch y roll, pero el giro en Z no tiene un ancla natural; integra error, lo que provoca deriva. Para drones serios se añade un magnetómetro (como el HMC5883) o un barómetro. Para proyectos casuales, puedes reiniciar el integrador cuando la deriva sea evidente. La cuestión es que cada herramienta tiene sus límites, y el MPU6050, por sí solo, es limitado para el eje Z a largo plazo.
Fusión de Datos: El Filtro Complementario en Castellano Plano
Aquí viene la verdadera magia: combinar lo mejor de ambos mundos. El giroscopio detecta giros inmediatos pero se desboca a largo plazo (es decir, acumula error y «deriva»); el acelerómetro es ruidoso pero estable a largo plazo. La idea es mezclarlos: una gran parte del giroscopio para la acción rápida y una pequeña parte del acelerómetro para corregir la deriva a largo plazo.
Una técnica común es el filtro complementario. Imagina que el giroscopio es el «corredor veloz» y el acelerómetro es el «mapa confiable». El corredor te da una idea rápida de dónde vas, pero con el tiempo se puede desorientar. El mapa te mantiene en el camino correcto, aunque no te da detalles instantáneos de cada paso. Juntos, ¡son un equipo imparable!
// Variables para almacenar los ángulos y el tiempo anterior
float roll = 0.0;
float pitch = 0.0;
unsigned long tprev = 0;
void loop() {
// Asegúrate de incluir las librerías Wire, Adafruit_MPU6050, Adafruit_Sensor y haber inicializado 'mpu' en setup()
// Calcular el tiempo transcurrido (delta time)
float dt = (millis() - tprev) / 1000.0; // En segundos
tprev = millis();
// Obtener los eventos del sensor
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// Aplicar offsets (si se han calculado y configurado previamente)
// a.acceleration.x -= offsetX_accel;
// a.acceleration.y -= offsetY_accel;
// a.acceleration.z -= offsetZ_accel;
// g.gyro.x -= offsetX_gyro;
// g.gyro.y -= offsetY_gyro;
// g.gyro.z -= offsetZ_gyro;
// Tasas de rotación del giroscopio en grados/seg (librería de Adafruit da rad/s, convertir)
float gyroXrate = g.gyro.x * RAD_TO_DEG; // Convertir radianes/seg a grados/seg
float gyroYrate = g.gyro.y * RAD_TO_DEG;
// Calcular ángulos del acelerómetro
float accelRoll = atan2(a.acceleration.y, a.acceleration.z) * RAD_TO_DEG;
float accelPitch = atan2(-a.acceleration.x, sqrt(a.acceleration.y * a.acceleration.y + a.acceleration.z * a.acceleration.z)) * RAD_TO_DEG;
// Aplicar filtro complementario
// Mezclamos 98% de la predicción del giroscopio con 2% de la corrección del acelerómetro
const float alpha = 0.98; // Factor de peso para el giroscopio
roll = alpha * (roll + gyroXrate * dt) + (1.0 - alpha) * accelRoll;
pitch = alpha * (pitch + gyroYrate * dt) + (1.0 - alpha) * accelPitch;
Serial.print("Roll: ");
Serial.print(roll);
Serial.print(" grados, Pitch: ");
Serial.print(pitch);
Serial.println(" grados");
delay(50); // Pequeña pausa
}
Sí, solo unas pocas líneas y tienes orientación usable hasta ±45°. ¿Perfecto? No. ¿Suficiente para un seguidor solar o un robot balancín? De sobra. El filtro complementario es una técnica sencilla pero poderosa para fusionar los datos del acelerómetro y el giroscopio. ¡Es ideal para proyectos donde necesitas una estabilidad básica!
Visualizando el Movimiento: Gráficos y Sensores en Acción
Una de las formas más chulas de ver el MPU6050 en acción es a través de gráficos. Puedes usar el Serial Plotter del IDE de Arduino o herramientas más avanzadas como Processing para dibujar un cubo 3D que siga tus movimientos. Es como darle vida a tus datos, ¿no crees?
Comparativa de rendimiento del MPU6050 antes y después de la calibración y el uso de filtros. Se puede observar cómo la precisión mejora notablemente.
Proyecto Práctico: ¡Un Sistema de Equilibrio Básico!
Ahora que has dominado los conceptos básicos, es hora de aplicarlos en un proyecto real. Vamos a crear un sistema de equilibrio simple usando el MPU6050 y dos servos. Es similar al que se usa en algunos drones y robots equilibrados. ¡Una forma divertida de ver cómo el sensor y los servos trabajan juntos!
Materiales Adicionales Necesarios
- 2 servos (SG-90 son perfectos para esto).
- Placa de protoboard.
- Cables para conexión.
Código para el Sistema de Equilibrio
#include <Wire.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Servo.h>
Adafruit_MPU6050 mpu;
Servo servo1, servo2;
// Variables para los offsets del sensor (deben ser obtenidos por calibración)
// Estos son solo ejemplos, tus valores reales pueden variar
float axOffset = 0.05;
float ayOffset = -0.10;
float azOffset = -9.81; // Asumiendo que Z es vertical, la gravedad es ~9.81 m/s^2
float gxOffset = 0.5;
float gyOffset = -0.3;
float gzOffset = 0.2;
// Variables para el filtro complementario
float roll = 0.0;
float pitch = 0.0;
unsigned long tprev = 0;
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println("Inicializando MPU6050 y Servos...");
if (!mpu.begin()) {
Serial.println("¡Fallo al encontrar el chip MPU6050! Verifica las conexiones.");
while (1);
}
Serial.println("MPU6050 inicializado correctamente.");
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
// Configurar los servos
servo1.attach(9); // Pin 9 para el primer servo
servo2.attach(10); // Pin 10 para el segundo servo
// Calibración inicial (aquí se asumiría que ya tienes tus offsets)
Serial.println("Calibración asumida, usando offsets predefinidos.");
tprev = millis(); // Inicializar tiempo para el filtro complementario
}
void loop() {
// Calcular el tiempo transcurrido
float dt = (millis() - tprev) / 1000.0;
tprev = millis();
// Leer datos del sensor
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// Aplicar offsets
float current_ax = a.acceleration.x - axOffset;
float current_ay = a.acceleration.y - ayOffset;
float current_az = a.acceleration.z - azOffset;
float current_gx = g.gyro.x - gxOffset;
float current_gy = g.gyro.y - gyOffset;
float current_gz = g.gyro.z - gzOffset;
// Tasas de rotación del giroscopio en grados/seg
float gyroXrate = current_gx * RAD_TO_DEG;
float gyroYrate = current_gy * RAD_TO_DEG;
// Calcular ángulos del acelerómetro
float accelRoll = atan2(current_ay, current_az) * RAD_TO_DEG;
float accelPitch = atan2(-current_ax, sqrt(current_ay * current_ay + current_az * current_az)) * RAD_TO_DEG;
// Aplicar filtro complementario
const float alpha = 0.98;
roll = alpha * (roll + gyroXrate * dt) + (1.0 - alpha) * accelRoll;
pitch = alpha * (pitch + gyroYrate * dt) + (1.0 - alpha) * accelPitch;
// Control de los servos basado en el ángulo de pitch
// Mapear el ángulo de pitch (ej. de -90 a 90 grados) a los ángulos del servo (0 a 180)
int servoAngle = map(pitch, -45, 45, 0, 180); // Ajusta el rango de pitch según tu aplicación
servoAngle = constrain(servoAngle, 0, 180); // Asegurarse de que el ángulo esté dentro del rango del servo
servo1.write(servoAngle);
servo2.write(180 - servoAngle); // Puedes usar esto para un movimiento coordinado o contrario
Serial.print("Roll: ");
Serial.print(roll);
Serial.print(" grados, Pitch: ");
Serial.print(pitch);
Serial.print(" grados, Servo Angle: ");
Serial.println(servoAngle);
delay(50);
}
Conexiones del Sistema de Equilibrio
- Servo 1: Conecta el pin de señal al pin digital 9 de Arduino.
- Servo 2: Conecta el pin de señal al pin digital 10 de Arduino.
- Alimentación de los Servos: Asegúrate de que los servos estén correctamente conectados a una fuente de poder. Los servos pueden consumir bastante corriente, ¡así que tenlo en cuenta!
Este sistema es un punto de partida genial. Pon tu teléfono encima de la base y graba un vídeo. ¿Expectativas? No será un DJI Ronin, pero al caminar se notará la estabilidad. Y eso sube puntos en la feria de ciencias.
Evaluación de diferentes aspectos del proyecto de equilibrio básico con MPU6050 y servos.
Errores Frecuentes y Curas Flash
La electrónica, como la vida, tiene sus tropiezos. Aquí te dejo algunas «curas» para los errores más comunes que te puedes encontrar con el MPU6050:
- Datos todos ceros o ¡no encuentro el MPU6050!: Revisa la dirección I2C con un «I2C scanner» (hay muchos sketches disponibles online). Asegúrate de que los cables SDA y SCL estén en los pines correctos y bien conectados.
- Valores disparatados: Podría ser un GND suelto o tensiones fuera de rango. Prueba con un multímetro si algo falla.
- Inversión de ejes: Cada placa rota el chip distinto; gira mentalmente los ejes o ajusta las fórmulas en tu código.
- Jitters espasmódicos: Añade capacitores de 100 nF cerca del VCC del módulo para filtrar el ruido, o baja la
filterBandwidthen tu código. - ¿Necesito soldar resistencias de pull-up? El módulo GY-521 ya trae resistencias de 4k7 integradas. Solo quítalas si conectas varios I2C a 3.3V sensibles, pero para empezar, no te preocupes.
¿Por Qué Todavía Usamos el MPU6050 en 2025? Una Pequeña Digresión
Quizás te estés preguntando, ¿por qué seguimos usando un sensor que ya tiene sus años? Honestamente, algunos dicen que es «viejo» comparado con sensores más nuevos como el MPU9250 o ICM-42688. Pero oye, para principiantes, su simplicidad gana. Es barato, hay toneladas de tutoriales y su DMP permite leer cuaterniones con mínima CPU. No necesitas lo último para divertirte y aprender. Además, no siempre lo tienen en la tienda del barrio. En verano, con el boom de drones hobby, este sensor encaja perfecto en builds estacionales.
Este video de «Caja de Herramientas» te explica de forma clara y concisa cómo programar el MPU6050 con Arduino, abarcando desde las conexiones hasta la lectura de datos, lo que complementa perfectamente este tutorial práctico.
Aplicaciones Reales: ¡Donde la Imaginación es el Límite!
El MPU6050 brilla en muchísimos proyectos. Imagínate un guante que detecta gestos, ¡como en las películas de sci-fi, pero hecho por ti! O, si eres como yo, úsalo para monitorear vibraciones en una impresora 3D. Las posibilidades son infinitas, y honestamente, cada experimento te enseña algo nuevo.
Control de movimiento en robótica
Con el MPU6050, puedes controlar el movimiento de robots móviles y manipuladores con alta precisión. El sensor mide la aceleración y la velocidad angular, datos que puedes usar para detectar cambios en la dirección y velocidad del robot en tiempo real.
Esto es especialmente útil para mantener la estabilidad y corregir la trayectoria. Por ejemplo, en robots balanceadores o drones, el MPU6050 ayuda a calcular el ángulo de inclinación y realizar ajustes automáticos para evitar caídas o desvíos.
Al integrar el sensor con un microcontrolador, puedes implementar algoritmos de control de movimiento como PID para mejorar la estabilidad y respuesta operativa.
Detección de inclinación y orientación
Este sensor facilita la detección precisa de la inclinación y orientación en dispositivos portátiles o sistemas de navegación. Puedes medir el ángulo en grados usando las lecturas del acelerómetro y giroscopio combinados.
Esto te permite crear proyectos como niveles digitales o sistemas de monitoreo para plataformas que requieren mantenerse horizontales o en posiciones específicas. La combinación de ambas mediciones reduce el error causado por vibraciones o movimientos bruscos.
Por ejemplo, en aplicaciones de realidad aumentada o juegos de control por movimiento, el MPU6050 proporciona información crucial para interpretar los cambios de orientación con rapidez y precisión.
La capacidad de este pequeño sensor para darte 6 grados de libertad de movimiento lo convierte en una herramienta poderosamente útil para cualquier proyecto que necesite saber «cómo se está moviendo». Es un componente fundamental en la era del Internet de las Cosas (IoT) y la robótica. Piensa en ello: con este sensor, ¡tu proyecto ya no estará tambaleándose!
Preguntas Frecuentes
En esta sección encontrarás respuestas claras sobre la conexión física del MPU6050, el código básico para su operación, y su integración con placas como Arduino y ESP32. También se abordan aspectos clave sobre la adquisición de datos, la calibración y dónde obtener las librerías necesarias para programar el sensor.
¿Cómo conectar un MPU6050 a una placa Arduino?
Debes conectar el pin VCC del MPU6050 a 3.3V o 5V del Arduino, GND a tierra, SDA al pin A4 y SCL al pin A5 para comunicación I2C. Verifica que las conexiones sean firmes para evitar errores de lectura.
¿Cuál es el código básico necesario para operar un MPU6050 con Arduino?
El código inicia incluyendo la librería Wire y la librería MPU6050. Luego, configuras la comunicación I2C y realizas lecturas del acelerómetro y giroscopio para obtener sus valores en tu programa.
¿Cómo se integra un MPU6050 con un ESP32?
La integración usa pines SDA y SCL, que en ESP32 pueden configurarse según tus necesidades. Debes inicializar el bus I2C con la librería Wire y comunicarte con el MPU6050 de forma similar a Arduino.
¿Dónde se puede encontrar la librería para la programación de un MPU6050?
Puedes obtener la librería MPU6050 compatible con Arduino y ESP32 en repositorios oficiales como GitHub o en el gestor de librerías del IDE Arduino. Asegúrate de usar versiones actualizadas para evitar problemas.
¿Qué datos se pueden obtener del acelerómetro y giroscopio del MPU6050?
El MPU6050 proporciona datos de aceleración en los ejes X, Y y Z, así como valores de velocidad angular (grados por segundo) para cada eje del giroscopio. Estos datos sirven para detectar movimientos y orientación.
¿Cómo calibrar correctamente el MPU6050 para obtener mediciones precisas?
Debes obtener lecturas en reposo para establecer valores cero base y ajustar los offsets de acelerómetro y giroscopio. Este proceso reduce errores por desplazamientos de sensor o vibraciones externas.
Conclusión: ¡A Construir!
Ahí lo tienes: un tutorial completo para dominar el MPU6050. Empieza pequeño, experimenta y verás cómo se abre un mundo de posibilidades. Este sensor increíblemente versátil puede transformar tus proyectos de robótica y electrónica. Con esta guía, has aprendido a conectarlo, calibrarlo y usarlo para calcular ángulos y crear sistemas de equilibrio. ¿Sabes qué? Lo más divertido está por venir: ¡la experimentación! No tengas miedo de probar nuevas cosas y explorar las infinitas posibilidades que ofrece este pequeño módulo. ¿Qué proyecto vas a probar primero? Si te atascas, los foros de Arduino son oro puro. Sigue tinkering, y quién sabe, quizás termines inventando algo épico. ¡Nos leemos en el próximo montaje!
Última actualización el 2025-11-13 / Enlaces de afiliados / Imágenes de la API para Afiliados
