Código del acelerómetro, giroscopio y magnetómetro MPU-9250
En este tutorial, exploraremos cómo utilizar el sensor MPU-9250, que combina un acelerómetro, giroscopio y magnetómetro en un módulo compacto. Al final de esta guía, podrás leer datos del sensor e interpretar su significado en tus proyectos. Este sensor es particularmente útil para aplicaciones como la robótica y los drones, donde la orientación y el seguimiento del movimiento son críticos. Puedes consultar el video para obtener aclaraciones adicionales sobre la configuración y el código (en el video a las 00:20).
Hardware Explicado
El módulo MPU-9250 integra tres sensores: un acelerómetro, un giroscopio y un magnetómetro. El acelerómetro mide las fuerzas de aceleración, lo que te permite determinar la velocidad y la orientación. El giroscopio proporciona velocidad angular, ayudándote a entender el cambio de orientación en el tiempo. Por último, el magnetómetro actúa como una brújula, proporcionando datos del campo magnético que ayudan en la navegación.
Esta combinación de sensores es particularmente beneficiosa en aplicaciones donde se requiere un seguimiento de movimiento preciso, como en drones o teléfonos inteligentes. El MPU-9250 se comunica a través de I2C o SPI, lo que lo hace versátil para diferentes configuraciones de microcontroladores.
Detalles de la hoja de datos
| Fabricante | InvenSense |
|---|---|
| Número de parte | MPU-9250 |
| Voltaje lógico/IO | 1.8 V (E/S), 3.3 V (suministro) |
| Tensión de alimentación | 2.4 - 3.6 V |
| Corriente de salida (por canal) | 3.2 mA (operación normal) |
| Corriente de pico (por canal) | 19.8 mA (máx) |
| Orientación sobre la frecuencia PWM | N/A |
| Umbrales de lógica de entrada | 0.3 * VDD(bajo), 0.7 * VDDalto |
| Caída de tensión / RDS(on)saturación | N/A |
| Límites térmicos | -40 a 85 °C |
| Paquete | QFN |
| Notas / variantes | Incluye regulador de voltaje interno |
- Asegure un suministro de voltaje adecuado (2.4 - 3.6 V) para evitar dañar el módulo.
- Utiliza una resistencia de pull-up para las líneas SDA y SCL si no está ya incluida en tu placa de expansión.
- Verifique la dirección I2C (el valor predeterminado es 0x68) y ajuste el pin ADO de acuerdo con las direcciones alternativas.
- Verifique las conexiones para asegurar la estabilidad y prevenir lecturas erróneas.
- Calibre los sensores regularmente para obtener mediciones precisas.
Instrucciones de cableado


Para conectar el MPU-9250 a tu Arduino, comienza conectando el pin VCC del MPU-9250 al pin de 5V del Arduino. El módulo tiene un regulador interno, así que es seguro alimentarlo con 5V. Luego, conecta el pin GND a la tierra (GND) del Arduino. Para la comunicación de datos, conecta el pin SDA al pin A4 del Arduino y el pin SCL al pin A5. Esta configuración es estándar para muchas placas de Arduino.
Si estás utilizando un Arduino Mega, los pines SDA y SCL se encuentran en los pines 20 y 21, respectivamente. Asegúrate de que las conexiones estén seguras para evitar errores de comunicación. Si necesitas cambiar la dirección I2C del MPU-9250, conecta el pin ADO a 5V para establecerlo en 0x69. Desconectarlo revertirá su configuración a 0x68.
Ejemplos de código y guía paso a paso
En el sketch de Arduino, comenzamos incluyendo la biblioteca MPU9250 y creando una instancia del sensor:
#include "MPU9250.h"
MPU9250 IMU(Wire,0x68);
El código inicializa el sensor y comienza la comunicación en elsetup()función:
void setup() {
Serial.begin(115200);
status = IMU.begin();
if (status < 0) {
Serial.println("IMU initialization unsuccessful");
while(1) {}
}
}
Dentro delloop()función, estamos leyendo y imprimiendo continuamente los datos del sensor:
void loop() {
IMU.readSensor();
Serial.print("AccelX: ");
Serial.print(IMU.getAccelX_mss(),6);
// More print statements for other axes
}
Esta sección lee los valores del acelerómetro, giroscopio y magnetómetro, mostrándolos en el Monitor Serie. Asegúrate de revisar el código completo cargado debajo del artículo para la implementación completa.
Demostración / Qué Esperar
Cuando ejecutas el código, deberías ver los valores del sensor actualizándose en tiempo real en el Monitor Serial. Los valores del acelerómetro fluctuarán mientras mueves el sensor, mientras que los valores del giroscopio mostrarán la tasa de rotación. El magnetómetro te dará la intensidad del campo magnético en tres ejes, lo que se puede usar para determinar la orientación. Ten cuidado con las entradas flotantes, ya que pueden llevar a lecturas inexactas (en el video a las 12:30).
Capítulos
- Introducción (00:00)
- Hardware Explicado (01:30)
- Instrucciones de cableado (04:00)
- Ejemplos de Código y Guía (06:00)
- Demostración (10:00)
/*
* Library: https://github.com/bolderflight/MPU9250
Basic_I2C.ino
Brian R Taylor
brian.taylor@bolderflight.com
Copyright (c) 2017 Bolder Flight Systems
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
* Updated by Ahmad Shamshiri on July 9, 2018 for Robojax.com
* in Ajax, Ontario, Canada
* Watch instruction video for this code:
For this sketch you need to connect:
VCC to 5V and GND to GND of Arduino
SDA to A4 and SCL to A5
S20A is 3.3V voltage regulator MIC5205-3.3BM5
*/
#include "MPU9250.h"
// An MPU9250 object with the MPU-9250 sensor on I2C bus 0 with address 0x68
MPU9250 IMU(Wire,0x68);
int status;
void setup() {
// Serial to display data
Serial.begin(115200);
while(!Serial) {}
// Start communication with IMU
status = IMU.begin();
if (status < 0) {
Serial.println("IMU initialization unsuccessful");
Serial.println("Check IMU wiring or try cycling power");
Serial.print("Status: ");
Serial.println(status);
while(1) {}
}
}
void loop() {
// Read the sensor
IMU.readSensor();
// Display the data
Serial.print("AccelX: ");
Serial.print(IMU.getAccelX_mss(),6);
Serial.print("\t");
Serial.print("AccelY: ");
Serial.print(IMU.getAccelY_mss(),6);
Serial.print("\t");
Serial.print("AccelZ: ");
Serial.println(IMU.getAccelZ_mss(),6);
Serial.print("GyroX: ");
Serial.print(IMU.getGyroX_rads(),6);
Serial.print("\t");
Serial.print("GyroY: ");
Serial.print(IMU.getGyroY_rads(),6);
Serial.print("\t");
Serial.print("GyroZ: ");
Serial.println(IMU.getGyroZ_rads(),6);
Serial.print("MagX: ");
Serial.print(IMU.getMagX_uT(),6);
Serial.print("\t");
Serial.print("MagY: ");
Serial.print(IMU.getMagY_uT(),6);
Serial.print("\t");
Serial.print("MagZ: ");
Serial.println(IMU.getMagZ_uT(),6);
Serial.print("Temperature in C: ");
Serial.println(IMU.getTemperature_C(),6);
Serial.println();
delay(200);
}
Recursos y referencias
-
ExternoConsigue la biblioteca MPU-9250 de GitHub.github.com
-
ExternoHoja de datos para MPU-9250invensense.com
-
ExternoMapa de registros MPU-9250invensense.com
Archivos📁
No hay archivos disponibles.