Código Arduino para MPU-6050 con pantalla LCD1602 I2C
En este tutorial aprenderemos cómo conectar el acelerómetro y giroscopio MPU-6050 a una pantalla LCD1602 mediante comunicación I2C. El MPU-6050 proporcionará mediciones de ángulo que se mostrarán en la LCD. Este proyecto te ayudará a visualizar los ángulos del MPU-6050 en tiempo real, mejorando tu comprensión de los datos del sensor y de la interfaz con la pantalla.


Al final de este tutorial tendrás una configuración funcional que muestra los ángulos X, Y y Z en la pantalla LCD. Es una excelente manera de adquirir experiencia práctica con los datos de sensores y la tecnología de visualización en proyectos con Arduino. Para mayor aclaración, asegúrate de ver el video (en el minuto 00:00).
Hardware explicado
Los componentes principales de este proyecto son el sensor MPU-6050 y el módulo de pantalla LCD1602. El MPU-6050 es un sensor versátil que combina un acelerómetro de 3 ejes y un giroscopio de 3 ejes, proporcionando mediciones de ángulo en tiempo real. Se comunica mediante I2C, lo que permite una integración fluida con el Arduino.
La pantalla LCD1602 utiliza también el protocolo I2C, lo que simplifica el cableado y reduce el número de pines necesarios para la comunicación. La interfaz I2C permite conectar múltiples dispositivos en el mismo bus, lo que la hace eficiente para proyectos con varios sensores o componentes.
Detalles de la hoja de datos
| Fabricante | InvenSense |
|---|---|
| Número de pieza | MPU-6050 |
| Tensión lógica/E/S | 3.3 V / 5 V |
| Tensión de alimentación | 3.3 V a 5 V |
| Tasa de datos de salida | 1 kHz (máx.) |
| Rango del giroscopio | ±250, ±500, ±1000, ±2000 °/s |
| Rango del acelerómetro | ±2g, ±4g, ±8g, ±16g |
| Paquete | QFN (encapsulado plano sin patillas) |
| Notas / variantes | Incluye procesador de movimiento digital (DMP) |
- Compruebe la dirección I2C (por defecto es 0x68).
- Asegúrese de que el voltaje de la fuente de alimentación sea el adecuado (3,3 V o 5 V).
- Utilice resistencias pull-up para las líneas SDA y SCL si no están ya en la placa.
- Considere usar capacitores de desacoplo cerca de los pines de alimentación para mayor estabilidad.
- Verifique las conexiones del cableado para evitar problemas de comunicación.
Instrucciones de cableado

Para conectar el MPU-6050 y la pantalla LCD1602 a tu Arduino, sigue estas conexiones:
- Conecte el
VCCpin del MPU-6050 al5Vpin en el Arduino. - Conecte el
GNDpin del MPU-6050 aGNDpin en el Arduino. - Conecte el
SDApin del MPU-6050 alA4pin en el Arduino. - Conecte el
SCLpin del MPU-6050 alA5pin en el Arduino. - Para la pantalla LCD1602, conecte el
VCCanclar a5Ven el Arduino. - Conecta el
GNDpin del LCD1602 alGNDpin en el Arduino. - Conecte el
SDApin del LCD1602 al mismoA4pin utilizado para el MPU-6050. - Conecte el
SCLpin del LCD1602 al mismoA5Pin usado para el MPU-6050.
Asegúrese de comprobar cuidadosamente sus conexiones, ya que un cableado incorrecto puede provocar un mal funcionamiento del dispositivo o un fallo en la comunicación.
Ejemplos de código y guía paso a paso
El código comienza incluyendo las bibliotecas necesarias para el MPU-6050 y la pantalla LCD. El siguiente extracto muestra cómo inicializar el MPU-6050:
MPU6050 mpu6050(Wire);Aquí, instanciamos elMPU6050objeto, que se utilizará para leer datos del sensor. A continuación, necesitamos configurar el dispositivo en elsetup()función:
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
lcd.begin();
lcd.backlight();
}Este código inicializa la comunicación serial, el bus I2C y el sensor MPU-6050. También inicializa la pantalla LCD y enciende su retroiluminación. El bucle contiene la lógica para actualizar y mostrar los ángulos:
void loop() {
mpu6050.update();
lcd.clear();
lcdDisplay(0, 0, "X:", 2, 0, mpu6050.getAngleX());
lcdDisplay(13, 0, "Y:", 0, 1, mpu6050.getAngleY());
lcdDisplay(7, 1, "Z:", 9, 1, mpu6050.getAngleZ());
delay(100);
}En este bucle, los ángulos de X, Y y Z se actualizan y se muestran en la pantalla LCD. La funciónlcdDisplay()Se utiliza para formatear la salida correctamente. Puede encontrar el código completo cargado debajo del artículo.
Demostración / Qué esperar
Cuando la configuración esté completa y el código se haya subido, deberías ver los ángulos de X, Y y Z mostrados en la pantalla LCD en tiempo real. Si todo está cableado correctamente, la pantalla se actualizará cada 100 milisegundos, mostrando la orientación actual del MPU-6050.
Los problemas comunes incluyen asegurarse de que las conexiones I2C sean correctas y que la fuente de alimentación sea estable. Si el MPU-6050 no está correctamente inicializado, puede ver datos incorrectos o no ver datos en la LCD (en el vídeo en 01:15).
/*
*
* This code is basic usage of the MPU-6050 accelerometer and gyroscope.
* Running this code, you will get angles only.
* The angles at X, Y, and Z are displayed on the LCD1602-I2C display module.
*
* Library and code have been taken from:
* https://github.com/tockn/MPU6050_tockn
*
* Updated by Ahmad Shamshiri on July 05, 2018 at 22:19 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/uIz6WIis4dc
*
* You will need to watch two videos before following the instructions in this video:
* 1-MPU6050 Introduction video and code: https://youtu.be/uhh7ik02aDc
* 2-LCD1602 with I2C module video and code: https://youtu.be/q9YC_GVHy5A
*/
#include <MPU6050_tockn.h>
#include <Wire.h>
MPU6050 mpu6050(Wire);
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
// initialize the LCD,
lcd.begin();
// Turn on the backlight and print a message.
lcd.backlight();
}
void loop() {
mpu6050.update();
Serial.print("angleX : ");
Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");
Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");
Serial.println(mpu6050.getAngleZ());
lcd.clear();// clearn previous values from screen
lcdDisplay(
// to print X:
0, // character 0
0, // line 0
"X:",
// to print AngleX
2, // character 2
0, // line 0
mpu6050.getAngleX()
);
lcdDisplay(
// to print Y:
13, // character 13
0, // line 0
"Y:",
// to print AngleY
0, // character 0
1, // line 1
mpu6050.getAngleY()
);
lcdDisplay(
// to print Z:
7, // character 7
1, // line 1
"Z:",
// to print AngleZ
9, // character 9
1, // line 0
mpu6050.getAngleZ()
);
delay(100);
}// loop end
/*
* lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
* displays value and title on LCD1602
* How to use:
* If you want to display: "Voltage: 13.56mV" starting from the first character
* on the second row.
* use:
* lcdDisplay(0, 1, "Voltage: ", 13.56)
*
* tc is the character number (0)
* tr is the row number in the LCD (1)
* title is the text ("Voltage:")
* vc is the character number for the value
* vr is the row number for the value
* value is the value (13.56)
*/
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
{
// Robojax.com MPU6050 Demo
lcd.setCursor (tc,tr); //
lcd.print(title);
lcd.setCursor (vc,vr); //
lcd.print(value);
}
Cosas que podrías necesitar
-
AmazonasCompra LCD1602-I2C en Amazonamzn.to
-
AmazonasCompra MPU-6050 en Amazonamzn.to
-
eBayCompra LCD1602-I2C en eBay.ebay.us
-
AliExpressComprar 10 piezas de LCD1602-I2C en AliExpresss.click.aliexpress.com
Recursos y referencias
-
ExternoSitio web del fabricanteinvensense.com
Archivos📁
Bibliotecas de Arduino (zip)
-
Biblioteca LCD1602 para Arduino de Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB -
Biblioteca de Arduino para MPU9250
robojax-MPU9250-master.zip3.38 MB
Archivo de Fritzing
-
Módulo LCD LCD1602-I2C con 4 cables
LCD1602-I2C.fzpz0.01 MB -
Placa MPU-6050 GY-521
MPU-6050 Board GY-521.fzpz0.01 MB