Código de búsqueda

Código Arduino para MPU-6050 con pantalla LCD1602 I2C

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.

LCD1602-I2C display module with 4 wires

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

FabricanteInvenSense
Número de piezaMPU-6050
Tensión lógica/E/S3.3 V / 5 V
Tensión de alimentación3.3 V a 5 V
Tasa de datos de salida1 kHz (máx.)
Rango del giroscopio±250, ±500, ±1000, ±2000 °/s
Rango del acelerómetro±2g, ±4g, ±8g, ±16g
PaqueteQFN (encapsulado plano sin patillas)
Notas / variantesIncluye 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

Arduino wiring for MPU-6050 with LCD

Para conectar el MPU-6050 y la pantalla LCD1602 a tu Arduino, sigue estas conexiones:

  • Conecte elVCCpin del MPU-6050 al5Vpin en el Arduino.
  • Conecte elGNDpin del MPU-6050 aGNDpin en el Arduino.
  • Conecte elSDApin del MPU-6050 alA4pin en el Arduino.
  • Conecte elSCLpin del MPU-6050 alA5pin en el Arduino.
  • Para la pantalla LCD1602, conecte elVCCanclar a5Ven el Arduino.
  • Conecta elGNDpin del LCD1602 alGNDpin en el Arduino.
  • Conecte elSDApin del LCD1602 al mismoA4pin utilizado para el MPU-6050.
  • Conecte elSCLpin 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).

Imágenes

LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
MPU-6050-module-1
MPU-6050-module-1
MPU-6050-module-2
MPU-6050-module-2
MPU-6050-module-schematic
MPU-6050-module-schematic
MPU-6050-module-1
MPU-6050-module-1
Arduino wiring for MPU-6050 with LCD
Arduino wiring for MPU-6050 with LCD
118-Arduino code for MPU-6050 accelerometer and gyroscope sensor (all data)
Idioma: C++
/*
 * 
 * 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

Recursos y referencias

Archivos📁

Bibliotecas de Arduino (zip)

Archivo de Fritzing