Modulo Giroscopio MPU6050
- Chip
- MPU6050 (InvenSense)
- Alimentación
- 3,3 a 5 V (regulador de 3,3 V en la placa)
- Acelerómetro
- 3 ejes, rango de ±2, ±4, ±8 o ±16 g
- Giroscopio
- 3 ejes, rango de ±250, ±500, ±1000 o ±2000 °/s
Características
Módulo GY-521 con el sensor MPU6050, que reúne un acelerómetro y un giroscopio de 3 ejes en un solo chip. El acelerómetro mide la inclinación y los golpes; el giroscopio mide qué tan rápido gira. Se comunica por I2C con solo 2 cables de datos.
Es el sensor más usado para robots que se equilibran solos, drones, controles por movimiento y para medir la inclinación de una superficie.
| Chip | MPU6050 (InvenSense) |
|---|---|
| Alimentación | 3,3 a 5 V (regulador de 3,3 V en la placa) |
| Acelerómetro | 3 ejes, rango de ±2, ±4, ±8 o ±16 g |
| Giroscopio | 3 ejes, rango de ±250, ±500, ±1000 o ±2000 °/s |
| Resolución | 16 bits por eje |
| Comunicación | I2C, dirección 0x68 (0x69 con AD0 a 3,3 V) |
| Extras | Sensor de temperatura y procesador de movimiento (DMP) |
| Pines | VCC, GND, SCL, SDA, XDA, XCL, AD0 e INT |
¿Para qué sirve?
- Robots que se equilibran solos
- Drones y estabilizadores de cámara
- Controles por movimiento y medidores de inclinación
Diagrama de conexión de prueba
Placa usada: Arduino UNO
| Cable | Módulo | Arduino UNO | Nota |
|---|---|---|---|
| rojo | VCC | 5V | |
| negro | GND | GND | |
| amarillo | SCL | A5 | Reloj I2C |
| azul | SDA | A4 | Datos I2C |
Código de prueba
// Prueba del MPU6050: lee la aceleración (en g), el giro (en grados por
// segundo) y la temperatura del chip, solo con la librería Wire.
#include <Wire.h>
const int MPU = 0x68; // dirección I2C con AD0 sin conectar
int16_t leer16() {
int16_t alto = Wire.read();
return (alto << 8) | Wire.read();
}
void setup() {
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B); // registro de energía
Wire.write(0); // despierta el sensor (arranca dormido)
if (Wire.endTransmission() != 0) {
Serial.println("No se encontró el MPU6050: revisa SDA (A4) y SCL (A5).");
while (true) {}
}
}
void loop() {
Wire.beginTransmission(MPU);
Wire.write(0x3B); // primer registro de datos
Wire.endTransmission(false);
Wire.requestFrom(MPU, 14); // 6 bytes de aceleración, 2 de temperatura y 6 de giro
float ax = leer16() / 16384.0; // rango de fábrica: ±2 g
float ay = leer16() / 16384.0;
float az = leer16() / 16384.0;
float temp = leer16() / 340.0 + 36.53;
float gx = leer16() / 131.0; // rango de fábrica: ±250 °/s
float gy = leer16() / 131.0;
float gz = leer16() / 131.0;
Serial.print("Acel X/Y/Z (g): ");
Serial.print(ax, 2); Serial.print(" "); Serial.print(ay, 2); Serial.print(" "); Serial.print(az, 2);
Serial.print(" Giro X/Y/Z (°/s): ");
Serial.print(gx, 1); Serial.print(" "); Serial.print(gy, 1); Serial.print(" "); Serial.print(gz, 1);
Serial.print(" Temp: ");
Serial.print(temp, 1);
Serial.println(" °C");
delay(500);
}
Abre el Monitor serie a 9600 baudios. Con el sensor quieto y plano, Z debe marcar cerca de 1 g (la gravedad) y el giro cerca de 0. No necesita librerías extra: Wire ya viene con el IDE.
Precauciones
- Cada sensor tiene un pequeño error de fábrica: para medir con precisión, promedia lecturas en reposo y réstalas.
- El giroscopio acumula error con el tiempo: para ángulos estables se combina con el acelerómetro (filtro complementario o el DMP).
- XDA y XCL sirven para conectarle otro sensor (como una brújula); si no los usas, déjalos libres.
- Para usar dos MPU6050 en el mismo bus, conecta el AD0 de uno a 3,3 V: así queda en la dirección 0x69.
Fuentes consultadas: ProtoSupplies: MPU-6050 GY-521 · TDK InvenSense: MPU-6050. Ficha preparada por Electrodrone; verifica siempre el voltaje de tu módulo antes de conectarlo.