MPU6050 Modulo GY-521 Sensor Giroscopio Análogo de 3 Ejes + Acelerómetro de 3 Ejes

[MPU6050-PCB] MPU6050 Modulo GY-521 Sensor Giroscopio Análogo de 3 Ejes + Acelerómetro de 3 Ejes

https://electrofranko.com/web/image/product.template/895/image_1920?unique=ca6de56

S/ 15.00 15.0 PEN S/ 15.00

S/ 15.00

Not Available For Sale

Esta combinación no existe.

Términos y condiciones
Envío: 2-3 días laborales


Referencia Interna: MPU6050-PCB

Sensor Inercial de 6 Ejes - Acelerómetro y Giroscopio (MPU6050)

Módulo de medición inercial (IMU) de alta precisión con Procesador Digital de Movimiento (DMP) e interfaz I2C.

El módulo MPU6050 (comúnmente integrado en la placa GY-521) es un dispositivo avanzado de seguimiento de movimiento de 6 grados de libertad (6 DoF). Este componente monolítico combina un giroscopio de triple eje y un acelerómetro de triple eje basados en tecnología MEMS, junto con un procesador digital de movimiento integrado (DMP). El hardware realiza la digitalización directa de las variables físicas mediante convertidores ADC de 16 bits independientes para cada canal. Su arquitectura interna procesa complejos algoritmos de fusión de sensores MotionFusion, eliminando los problemas de desfase de sincronización cruzada que afectan a los diseños discretos. Es la herramienta estándar en robótica para sistemas de auto-balanceo, estabilizadores de cámaras (Gimbals), control de aeronaves no tripuladas (Drones) y rastreo de orientación tridimensional.

Especificaciones Técnicas

Parámetro Detalle
Tensión de Alimentación (VCC)DC 3.3 V a 5 V (Con regulador de baja caída en placa)
Rangos de Acelerómetro±2g, ±4g, ±8g, ±16g (Configurable por registro)
Rangos de Giroscopio±250, ±500, ±1000, ±2000 °/s (Programable)
Resolución del ADC Interno16 bits para ejes X, Y, Z de ambos sensores
Interfaz de ComunicaciónI2C / TWI Estándar Fast Mode (400 kHz)
Corriente de Operación Típica3.8 mA (Modo de medición inercial completo activo)
Parámetro Detalle
Dirección I2C del Bus0x68 (Por defecto con pin AD0 a GND) / 0x69 (AD0 a VCC)
Procesador Integrado (DMP)Descarga cálculos de cuaterniones, matrices y ángulos
Sensor de TemperaturaTermistor interno embebido con salida digital de 16 bits
Búfer FIFO de Hardware1024 Bytes para ráfagas de datos dinámicos
Estructura del FiltroFiltro Pasa-Bajos Digital (DLPF) programable
Mapeo del Esquema de PinesVCC, GND, SCL, SDA, XDA, XCL, AD0, INT

Diagrama de Conexiones y Mapeo de Pines

Diagrama de Conexión MPU6050

Ventajas del MPU6050

Procesamiento Digital de Movimiento (DMP): Capaz de realizar internamente los algoritmos matemáticos complejos de filtrado inercial y cálculo de orientación en cuaterniones, liberando recursos críticos de procesamiento del microcontrolador anfitrión.

Estructura I2C Auxiliar Maestra (Master Aux): Cuenta con pines dedicados (XDA/XCL) para conectar directamente magnetómetros o brújulas digitales de terceros (como el HMC5883L), consolidando un sistema de medición de 9 grados de libertad (9 DoF) sin saturar el bus principal.

Filtro Pasa-Bajos Configurable: Su bloque DLPF interno permite atenuar por hardware las vibraciones mecánicas de alta frecuencia del entorno (como el ruido de motores en un dron), entregando señales de salida limpias y estables antes de ser leídas.

Código Arduino Completo y Optimizado

// Código Completo de Instrumentación para Sensor MPU6050 (GY-521) // Lee y procesa las señales crudas de aceleración, giroscopio y temperatura mediante bus I2C nativo #include <Wire.h> // Dirección I2C base del dispositivo MPU6050 (Pin AD0 conectado a GND) const uint8_t MPU_DIRECCION = 0x68; // Estructuras de almacenamiento de datos de laboratorio sin simplificar int16_t ac_x, ac_y, ac_z; int16_t gy_x, gy_y, gy_z; int16_t temperatura_cruda; // Temporización de salida por terminal serial unsigned long ultimoReporteMs = 0; const unsigned long periodoRefresco = 500; void setup() { Serial.begin(115200); // Velocidad recomendada para flujos de datos inerciales continuos Serial.println("--- Inicializando Unidad de Medición Inercial MPU6050 ---"); Wire.begin(); // Inicializa la biblioteca maestra del bus Wire // Despertar el MPU6050 y configurar el reloj del sistema // Por defecto, el dispositivo arranca en modo de suspensión (Sleep Mode) para ahorro energético Wire.beginTransmission(MPU_DIRECCION); Wire.write(0x6B); // Registro de gestión de energía: PWR_MGMT_1 Wire.write(0x00); // Escribe 0 para encender los osciladores internos y desactivar Sleep if (Wire.endTransmission() != 0) { Serial.println("[ ERROR ]: El sensor MPU6050 no responde en el bus I2C."); Serial.println("Verifique el voltaje en VCC, conexión a GND y la continuidad de SDA y SCL."); while (1); // Bloqueo preventivo de seguridad por falla de hardware } // Configuración del rango dinámico del acelerómetro (Escala completa a ±2g) Wire.beginTransmission(MPU_DIRECCION); Wire.write(0x1C); // Registro ACCEL_CONFIG Wire.write(0x00); // Bits [4:3] en 00 para seleccionar el rango de ±2g Wire.endTransmission(); // Configuración del rango dinámico del giroscopio (Escala completa a ±250 °/s) Wire.beginTransmission(MPU_DIRECCION); Wire.write(0x1B); // Registro GYRO_CONFIG Wire.write(0x00); // Bits [4:3] en 00 para seleccionar el rango de ±250 °/s Wire.endTransmission(); Serial.println("[ OK ]: Registros inicializados. Sensor MPU6050 operando en modo normal."); Serial.println("Mantenga el sensor estable en un plano horizontal para lectura estática."); Serial.println("-------------------------------------------------------------------------"); } void loop() { // Solicitud secuencial de lectura de registros consecutivos por hardware // El MPU6050 almacena los datos de 16 bits en registros de 8 bits High y Low correlativos (Acel, Temp, Gyro) Wire.beginTransmission(MPU_DIRECCION); Wire.write(0x3B); // Dirección del primer registro de datos: ACCEL_XOUT_H Wire.endTransmission(false); // Reinicio de bus no bloqueante para mantener el control como maestro // Solicita un total de 14 bytes (6 bytes Acelerómetro, 2 bytes Temperatura, 6 bytes Giroscopio) Wire.requestFrom(MPU_DIRECCION, (uint8_t)14); if (Wire.available() >= 14) { // Lectura y reconstrucción de registros mediante desplazamiento de bits ac_x = (Wire.read() << 8) | Wire.read(); ac_y = (Wire.read() << 8) | Wire.read(); ac_z = (Wire.read() << 8) | Wire.read(); temperatura_cruda = (Wire.read() << 8) | Wire.read(); gy_x = (Wire.read() << 8) | Wire.read(); gy_y = (Wire.read() << 8) | Wire.read(); gy_z = (Wire.read() << 8) | Wire.read(); } unsigned long tiempoActual = millis(); // Bloque síncrono temporizado para la entrega estructurada de datos por puerto serie if (tiempoActual - ultimoReporteMs >= periodoRefresco) { ultimoReporteMs = tiempoActual; // Fórmulas oficiales de escala según hoja de datos del fabricante // Sensibilidad del acelerómetro a ±2g: 16384 LSB/g float accelX_g = (float)ac_x / 16384.0; float accelY_g = (float)ac_y / 16384.0; float accelZ_g = (float)ac_z / 16384.0; // Sensibilidad del giroscopio a ±250 °/s: 131 LSB/(°/s) float gyroX_ds = (float)gy_x / 131.0; float gyroY_ds = (float)gy_y / 131.0; float gyroZ_ds = (float)gy_z / 131.0; // Fórmula lineal de temperatura provista en las especificaciones del silicio float temperaturaCelsius = ((float)temperatura_cruda / 340.0) + 36.53; // Volcado de tramas de telemetría física por consola serial Serial.print("ACELERÓMETRO (g) -> X: "); Serial.print(accelX_g, 2); Serial.print(" | Y: "); Serial.print(accelY_g, 2); Serial.print(" | Z: "); Serial.println(accelZ_g, 2); Serial.print("GIROSCOPIO (°/s) -> X: "); Serial.print(gyroX_ds, 1); Serial.print(" | Y: "); Serial.print(gyroY_ds, 1); Serial.print(" | Z: "); Serial.println(gyroZ_ds, 1); Serial.print("TERMÓMETRO DIE -> Celcius: "); Serial.print(temperaturaCelsius, 1); Serial.println(" °C"); // Verificación de desconexión o lectura estática errónea if(ac_x == 0 && ac_y == 0 && ac_z == 0) { Serial.println(" [ ALERTA ]: Datos nulos detectados. Verifique las líneas de bus."); } else { Serial.println(" [ STATUS ]: Enlace I2C íntegro. Matrices actualizadas de manera correcta."); } Serial.println("-------------------------------------------------------------------------"); } }