MPU9250 / 9265 Módulo de Placa de Sensor GY-9250 MPU, 9250

[MPU9250 / 9265] MPU9250 / 9265 Módulo de Placa de Sensor GY-9250 MPU, 9250

https://electrofranko.com/web/image/product.template/3250/image_1920?unique=601482d

S/ 24.00 24.0 PEN S/ 24.00

S/ 24.00

Not Available For Sale

Esta combinación no existe.

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


Referencia Interna: MPU9250 / 9265

Sensor Inercial de 9 Ejes - Acelerómetro, Giroscopio y Magnetómetro (MPU9250)

Módulo de medición inercial (IMU) multichip de 9 grados de libertad (9 DoF) con magnetómetro AK8963 e interfaces I2C/SPI.

El módulo MPU9250 es un dispositivo avanzado de seguimiento de movimiento de 9 grados de libertad (9 DoF). Integra en un único encapsulado de silicio un acelerómetro y giroscopio de triple eje (MPU6500) junto a un magnetómetro de triple eje de efecto Hall (AK8963). Cada canal utiliza convertidores ADC dedicados de 16 bits para digitalizar variables físicas de forma precisa. Su Procesador Digital de Movimiento (DMP) integrado resuelve complejos algoritmos de fusión de datos inerciales de manera autónoma. Es la herramienta estándar para navegación de drones, robótica móvil, sistemas SLAM y control de orientación tridimensional.

Especificaciones Técnicas

Parámetro Detalle
Tensión de Alimentación (VCC)DC 3.3 V a 5 V (Módulo con regulador LDO integrado)
Rangos de Acelerómetro±2g, ±4g, ±8g, ±16g (Configurable por registros)
Rangos de Giroscopio±250, ±500, ±1000, ±2000 °/s (Programable)
Rango del Magnetómetro±4800 µT (Escala completa en los ejes X, Y, Z)
Resolución de los ADC16 bits para todos los canales inerciales y magnéticos
Interfaces de Bus CompatiblesI2C Fast Mode (400 kHz) y SPI de alta velocidad (hasta 20 MHz)
Parámetro Detalle
Dirección I2C del MPU0x68 (Por defecto con AD0 a GND) / 0x69 (AD0 a VCC)
Dirección I2C Magnetómetro0x0C (Dirección interna del sub-chip AK8963)
Búfer FIFO de Hardware512 Bytes compartidos para almacenamiento de ráfagas
Consumo de Corriente Activo~3.5 mA (Con los 9 ejes operando simultáneamente)
Filtros IntegradosFiltro Pasa-Bajos Digital (DLPF) independiente por hardware
Mapeo de Pines de PlacaVCC, GND, SCL, SDA, EDA, ECL, AD0, INT, NCS

Diagrama de Conexiones y Mapeo de Pines

Diagrama de Conexión MPU9250

Ventajas del MPU9250

Navegación Absoluta de 9 Ejes (9 DoF): Al incorporar el magnetómetro AK8963 de manera interna, compensa la deriva por integración (drift) del giroscopio, permitiendo calcular la orientación absoluta respecto al norte magnético de la Tierra.

Soporte de Comunicación por Bus SPI: A diferencia de modelos anteriores limitados a I2C, puede operar mediante SPI a frecuencias de hasta 20 MHz, lo que permite tasas de refresco ultrarrápidas indispensables en controladores de vuelo.

Eficiencia de Consumo y Espacio Reducido: Su tecnología avanzada de fabricación monolítica reduce el consumo de corriente en un 44% en comparación con el MPU9150, disipando menos calor y prolongando la autonomía de baterías.

Código Arduino Completo y Optimizado

// Código Completo de Instrumentación para Sensor MPU9250 (Acelerómetro, Giroscopio y Magnetómetro) // Inicializa y extrae lecturas directas por registros de hardware utilizando el protocolo Wire nativo #include <Wire.h> // Direcciones físicas base de los sub-chips en el bus I2C const uint8_t MPU9250_DIR = 0x68; // Dirección del Acelerómetro/Giroscopio (AD0 a GND) const uint8_t AK8963_DIR = 0x0C; // Dirección del Magnetómetro interno // Variables globales para almacenamiento de registros crudos de 16 bits int16_t ax, ay, az; int16_t gx, gy, gz; int16_t mx, my, mz; int16_t temp_raw; unsigned long tiempoAnterior = 0; const unsigned long intervaloRefresco = 500; // Salida serial cada 500ms // Función auxiliar para escribir datos en registros específicos por bus I2C void escribirRegistroI2C(uint8_t direccionDispositivo, uint8_t registro, uint8_t valor) { Wire.beginTransmission(direccionDispositivo); Wire.write(registro); Wire.write(valor); Wire.endTransmission(); } void setup() { Serial.begin(115200); Serial.println("--- Inicializando Unidad de Medición Inercial Completa MPU9250 ---"); Wire.begin(); Wire.setClock(400000); // Configuración del bus I2C a Fast Mode (400 kHz) // 1. Despertar el MPU9250 y configurar fuente de reloj (Giroscopio eje X para mayor estabilidad) escribirRegistroI2C(MPU9250_DIR, 0x6B, 0x01); // Registro PWR_MGMT_1 delay(100); // 2. Configurar el Acelerómetro a escala completa de ±2g escribirRegistroI2C(MPU9250_DIR, 0x1C); // Registro ACCEL_CONFIG escribirRegistroI2C(MPU9250_DIR, 0x1C, 0x00); // 3. Configurar el Giroscopio a escala completa de ±250 °/s escribirRegistroI2C(MPU9250_DIR, 0x1B, 0x00); // Registro GYRO_CONFIG // 4. Habilitar modo Bypass en el MPU9250 para dar acceso directo al magnetómetro AK8963 // Esto permite al microcontrolador maestro comunicarse directamente con la dirección 0x0C escribirRegistroI2C(MPU9250_DIR, 0x37, 0x02); // Registro INT_PIN_CFG (Activa bit BYPASS_EN) delay(50); // 5. Inicializar Magnetómetro AK8963 en modo de medición continua de 16 bits a 100Hz escribirRegistroI2C(AK8963_DIR, 0x0A, 0x16); // Registro CNTL1 (Modo continuo 2 y salida de 16 bits) delay(50); Serial.println("[ OK ]: Registros inicializados de manera exitosa."); Serial.println("Iniciando volcado de datos de 9 ejes... Coloque el módulo en superficie estable."); Serial.println("-------------------------------------------------------------------------"); } void loop() { // ADQUISICIÓN DE DATOS INERCIALES (MPU6500) Wire.beginTransmission(MPU9250_DIR); Wire.write(0x3B); // Dirección del primer registro de datos: ACCEL_XOUT_H Wire.endTransmission(false); Wire.requestFrom(MPU9250_DIR, (uint8_t)14); // Lee acelerómetro, temperatura y giroscopio de forma secuencial if (Wire.available() >= 14) { // Combinación de bytes altos y bajos (Big-Endian) ax = (Wire.read() << 8) | Wire.read(); ay = (Wire.read() << 8) | Wire.read(); az = (Wire.read() << 8) | Wire.read(); temp_raw = (Wire.read() << 8) | Wire.read(); gx = (Wire.read() << 8) | Wire.read(); gy = (Wire.read() << 8) | Wire.read(); gz = (Wire.read() << 8) | Wire.read(); } // ADQUISICIÓN DE DATOS MAGNÉTICOS (AK8963) // Verificación de disponibilidad de nuevos datos en el registro de estado ST1 Wire.beginTransmission(AK8963_DIR); Wire.write(0x02); // Registro ST1 del magnetómetro Wire.endTransmission(false); Wire.requestFrom(AK8963_DIR, (uint8_t)1); if (Wire.available() && (Wire.read() & 0x01)) { // Verifica bit DRDY (Data Ready) Wire.beginTransmission(AK8963_DIR); Wire.write(0x03); // Dirección del primer registro magnético: HXL Wire.endTransmission(false); Wire.requestFrom(AK8963_DIR, (uint8_t)7); // Lee 6 bytes de datos + 1 byte ST2 para liberar el búfer if (Wire.available() >= 7) { // NOTA CRÍTICA: El magnetómetro AK8963 almacena los datos en formato Little-Endian (Byte bajo primero) uint8_t xl = Wire.read(); uint8_t xh = Wire.read(); uint8_t yl = Wire.read(); uint8_t yh = Wire.read(); uint8_t zl = Wire.read(); uint8_t zh = Wire.read(); uint8_t st2 = Wire.read(); // Al leer ST2 se verifica si hubo saturación magnética (HOFL) if (!(st2 & 0x08)) { // Si no hay desbordamiento magnético, procesa la lectura mx = (zh << 8) | zl; my = (yh << 8) | yl; mz = (xh << 8) | xl; } } } unsigned long tiempoActual = millis(); // Procesamiento y salida serial estructurada de laboratorio if (tiempoActual - tiempoAnterior >= intervaloRefresco) { tiempoAnterior = tiempoActual; // Factores de conversión estándar basados en la configuración de registros elegida float accelX_g = (float)ax / 16384.0; // Sensibilidad ±2g float accelY_g = (float)ay / 16384.0; float accelZ_g = (float)az / 16384.0; float gyroX_ds = (float)gx / 131.0; // Sensibilidad ±250 °/s float gyroY_ds = (float)gy / 131.0; float gyroZ_ds = (float)gz / 131.0; // Conversión del magnetómetro a Microteslas (µT) para escala de 16 bits de fábrica float magX_uT = (float)mx * 0.15; float magY_uT = (float)my * 0.15; float magZ_uT = (float)mz * 0.15; float temperaturaC = ((float)temp_raw - 21.0) / 333.87 + 21.0; // Ecuación de temperatura para MPU6500 // Impresión formateada de telemetría completa 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("MAGNETÓMETRO (uT) -> X: "); Serial.print(magX_uT, 1); Serial.print(" | Y: "); Serial.print(magY_uT, 1); Serial.print(" | Z: "); Serial.println(magZ_uT, 1); Serial.print("TERMÓMETRO NÚCLEO -> Temp: "); Serial.print(temperaturaC, 1); Serial.println(" °C"); // Auto-diagnóstico de integridad física de líneas de bus if (ax == 0 && ay == 0 && mx == 0) { Serial.println(" [ ALERTA ]: Lecturas nulas constantes. Compruebe conexiones de hardware."); } else { Serial.println(" [ STATUS ]: Bus de datos íntegro. Matrices de 9 ejes actualizadas correctamente."); } Serial.println("-------------------------------------------------------------------------"); } }