Cómo usar el módulo MPU-6050 (acelerómetro y giroscopio)
El MPU-6050 es un sensor versátil que combina un acelerómetro de 3 ejes y un giroscopio de 3 ejes en un solo paquete. En este tutorial exploraremos cómo conectar este módulo a un Arduino para medir la aceleración y la velocidad angular. El resultado será un programa sencillo que muestra datos en tiempo real procedentes del sensor, permitiéndote monitorear tanto la aceleración como la orientación de tu dispositivo.

Siguiendo esta guía, aprenderá cómo configurar el hardware, cablear correctamente los componentes y escribir el código necesario para poner en funcionamiento el MPU-6050. Esto le proporcionará una base para proyectos futuros que involucren la detección de movimiento y de orientación. Para mayor claridad, asegúrese de ver el video que acompaña este tutorial (en el video a 00:00).
Hardware explicado
El componente principal de este proyecto es el sensor MPU-6050, que proporciona datos tanto del acelerómetro como del giroscopio. El acelerómetro mide la aceleración lineal a lo largo de los ejes X, Y y Z, mientras que el giroscopio mide las tasas de rotación alrededor de esos mismos ejes. Esta combinación convierte al MPU-6050 en una excelente opción para aplicaciones que requieren seguimiento del movimiento.
Además, el módulo utiliza una interfaz I2C para la comunicación, lo que simplifica las conexiones y permite que múltiples dispositivos se conecten en el mismo bus. El sensor se alimenta a través del pin VCC, que normalmente requiere un voltaje entre 3.3V y 5V. El pin GND se conecta a la masa común del Arduino.
Detalles de la hoja de datos
| Fabricante | InvenSense |
|---|---|
| Número de pieza | MPU-6050 |
| Tensión lógica/E/S | 3.3 - 5 V |
| Tensión de alimentación | 3.3 - 5 V |
| Corriente de salida (por canal) | ... |
| Corriente de pico (por canal) | ... |
| Orientación sobre la frecuencia PWM | ... |
| Umbrales lógicos de entrada | ... |
| Caída de tensión / RDS(on)/ saturación | ... |
| Límites térmicos | ... |
| Paquete | QFN |
| Notas / variantes | ... |
- Conecte el pin VCC a 3,3 V o 5 V.
- Conecte el pin GND a tierra.
- Utilice la comunicación I2C mediante SDA (datos) y SCL (reloj).
- Asegúrese de que haya resistencias pull-up en las líneas SDA y SCL.
- Compruebe los niveles de voltaje adecuados para evitar dañar el sensor.
Instrucciones de cableado

Para conectar el MPU-6050 a tu Arduino, comienza conectando el pin VCC del MPU-6050 al pin 5V del Arduino. A continuación, conecta el pin GND del MPU-6050 a uno de los pines GND del Arduino. Para la comunicación I2C, conecta el pin SDA del MPU-6050 al pin A4 del Arduino y el pin SCL al pin A5. Asegúrate de que tu Arduino esté configurado para usar la comunicación I2C incluyendo las librerías apropiadas en tu código.
Verifique dos veces las conexiones antes de alimentar el sistema. Si utiliza una placa de pruebas (breadboard), asegúrese de que las conexiones estén firmes y de que no haya cortocircuitos. Si el módulo no responde como se espera, verifique el cableado y compruebe la dirección I2C del MPU-6050 en su código.
Ejemplos de código y guía paso a paso
El siguiente fragmento de código inicializa el MPU-6050 y comienza a leer datos de él. Los identificadores clave incluyenmpu6050, que es la instancia de la clase MPU6050, ytimer, que se utiliza para controlar el momento de salida de los datos.
MPU6050 mpu6050(Wire);
long timer = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
En esta función setup, inicializamos la comunicación serie y el sensor MPU-6050. Elmpu6050.calcGyroOffsets(true)La llamada es crucial, ya que calibra los sesgos del giroscopio, garantizando lecturas precisas.
En la función loop, actualizamos continuamente los datos del sensor y los imprimimos en el monitor serial. El siguiente fragmento de código muestra cómo leer e imprimir los datos de temperatura y aceleración:
if(millis() - timer > 1000){
Serial.print("temp : ");Serial.println(mpu6050.getTemp());
Serial.print("accX : ");Serial.print(mpu6050.getAccX());
Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
}
Este bloque comprueba si ha pasado un segundo desde la última salida. A continuación, obtiene los valores de temperatura y aceleración del MPU-6050 y los imprime en el monitor serie. Puedes observar cómo estos valores se actualizan en tiempo real.
Demostración / Qué esperar
Una vez que todo esté cableado y el código subido, puedes esperar ver los datos de temperatura y aceleración impresos en el monitor serial cada segundo. Si inclinas o mueves el MPU-6050, los valores de aceleración deberían cambiar en consecuencia. Ten en cuenta que un cableado incorrecto o un suministro de energía insuficiente pueden provocar lecturas erráticas o la ausencia total de datos (en el video en 01:30).
/*
*
* This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
*
* This code displays all data:
* -Gyroscope X, Gyroscope Y, Gyroscope Z
* -Gyroscope Angle X, Gyroscope Angle Y, Gyroscope Angle Z
* -Accel X, Accel Y, Accel Z
* -Accel Angle X, Accel Angle Y, Accel Angle Z,
*
* Library and code have been taken from:
* https://github.com/tockn/MPU6050_tockn
*
* Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
*
*/
#include <MPU6050_tockn.h>
#include <Wire.h>
MPU6050 mpu6050(Wire);
long timer = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
void loop() {
mpu6050.update();
if(millis() - timer > 1000){
Serial.println("=======================================================");
Serial.print("temp : ");Serial.println(mpu6050.getTemp());
Serial.print("accX : ");Serial.print(mpu6050.getAccX());
Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
Serial.println("=======================================================\n");
timer = millis();
}
}
/*
*
* This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
*
* This code displays:
* - Angle X, Angle Y, Angle Z,
*
* Library and code have been taken from:
* https://github.com/tockn/MPU6050_tockn
*
* Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
*
*/
#include <MPU6050_tockn.h>
#include <Wire.h>
MPU6050 mpu6050(Wire);
long timer = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
void loop() {
mpu6050.update();
if(millis() - timer > 1000){
Serial.println("=======================================================");
Serial.print("temp : ");Serial.println(mpu6050.getTemp());
Serial.print("accX : ");Serial.print(mpu6050.getAccX());
Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
Serial.println("=======================================================\n");
timer = millis();
}
}
Cosas que podrías necesitar
-
AmazonasCompra MPU-6050 en Amazonamzn.to
Recursos y referencias
-
ExternoSitio web del fabricanteinvensense.com
Archivos📁
Bibliotecas de Arduino (zip)
-
Biblioteca de Arduino para MPU9250
robojax-MPU9250-master.zip3.38 MB