Código de Pesquisa

Código Arduino para MPU-6050 com display LCD1602 I2C

Código Arduino para MPU-6050 com display LCD1602 I2C

Neste tutorial, aprenderemos como interligar o acelerômetro e giroscópio MPU-6050 a um display LCD1602 usando comunicação I2C. O MPU-6050 fornecerá medições de ângulo que serão exibidas no LCD. Este projeto ajudará você a visualizar os ângulos do MPU-6050 em tempo real, aprimorando sua compreensão dos dados do sensor e da interface com o display.

LCD1602-I2C display module with 4 wires

Ao final deste tutorial, você terá uma configuração funcional que exibe os ângulos X, Y e Z na tela LCD. Esta é uma ótima maneira de obter experiência prática com dados de sensores e tecnologia de display em projetos Arduino. Para mais esclarecimentos, não deixe de conferir o vídeo (em 00:00).

Hardware explicado

Os principais componentes deste projeto são o sensor MPU-6050 e o módulo de display LCD1602. O MPU-6050 é um sensor versátil que combina um acelerômetro de 3 eixos e um giroscópio de 3 eixos, fornecendo medições de ângulo em tempo real. Ele se comunica via I2C, permitindo integração perfeita com o Arduino.

O display LCD1602 também usa o protocolo I2C, o que simplifica a fiação e reduz o número de pinos necessários para a comunicação. A interface I2C permite que vários dispositivos sejam conectados no mesmo barramento, tornando-a eficiente para projetos com múltiplos sensores ou componentes.

Detalhes da ficha técnica

FabricanteInvenSense
Número da peçaMPU-6050
Tensão lógica/E/S3.3 V / 5 V
Tensão de alimentação3,3 V a 5 V
Taxa de dados de saída1 kHz (máx.)
Faixa do giroscópio±250, ±500, ±1000, ±2000 °/s
Faixa do acelerômetro±2g, ±4g, ±8g, ±16g
PacoteQFN
Notas / variantesInclui Processador de Movimento Digital (DMP)

  • Verifique o endereço I2C (padrão: 0x68).
  • Garanta a tensão adequada da fonte de alimentação (3.3 V ou 5 V).
  • Use resistores pull-up nas linhas SDA e SCL se ainda não estiverem na placa.
  • Considere usar capacitores de desacoplamento próximos aos pinos de alimentação para maior estabilidade.
  • Verifique as conexões da fiação para evitar problemas de comunicação.

Instruções de fiação

Arduino wiring for MPU-6050 with LCD

Para conectar o MPU-6050 e o display LCD1602 ao seu Arduino, siga estas conexões:

  • Conecte oVCCpino do MPU-6050 para o5Vpino no Arduino.
  • Conecte oGNDpino do MPU-6050 para oGNDpino no Arduino.
  • Conecte oSDApino do MPU-6050 para oA4pino no Arduino.
  • Conecte oSCLpino do MPU-6050 para oA5pino no Arduino.
  • Para o display LCD1602, conecte oVCCfixar em5Vno Arduino.
  • Conecte oGNDpino do LCD1602 para oGNDpino no Arduino.
  • Conecte oSDApino do LCD1602 ao mesmoA4pino usado para o MPU-6050.
  • Conecte oSCLpino do LCD1602 ao mesmoA5pino usado para o MPU-6050.

Certifique-se de verificar duas vezes suas conexões, pois a fiação incorreta pode causar mau funcionamento do dispositivo ou impedir a comunicação adequada.

Exemplos de Código e Passo a Passo

O código começa incluindo as bibliotecas necessárias para o MPU-6050 e para o display LCD. O trecho a seguir mostra como inicializar o MPU-6050:

MPU6050 mpu6050(Wire);

Aqui, instanciamos oMPU6050objeto, que será usado para ler dados do sensor. Em seguida, precisamos configurar o dispositivo nosetup()função:

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
  lcd.begin();
  lcd.backlight();   
}

Este código inicializa a comunicação serial, o barramento I2C e o sensor MPU-6050. Também inicializa o LCD e liga sua retroiluminação. O loop contém a lógica para atualizar e exibir os â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);
}

Neste loop, os ângulos de X, Y e Z são atualizados e exibidos no LCD. A funçãolcdDisplay()é utilizado para formatar a saída corretamente. Você pode encontrar o código completo carregado abaixo do artigo.

Demonstração / O que esperar

Quando a configuração estiver completa e o código for carregado, você deverá ver os ângulos de X, Y e Z exibidos no LCD em tempo real. Se tudo estiver ligado corretamente, o display será atualizado a cada 100 milissegundos, mostrando a orientação atual do MPU-6050.

Problemas comuns incluem assegurar que as conexões I2C estejam corretas e que a fonte de alimentação seja estável. Se o MPU-6050 não for inicializado corretamente, você pode ver dados incorretos ou nenhum dado no LCD (no vídeo em 01:15).

Imagens

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);
 
}

Coisas que você pode precisar

Recursos e referências

Arquivos📁

Bibliotecas do Arduino (zip)

Arquivo Fritzing