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.


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
| Fabricante | InvenSense |
|---|---|
| Número da peça | MPU-6050 |
| Tensão lógica/E/S | 3.3 V / 5 V |
| Tensão de alimentação | 3,3 V a 5 V |
| Taxa de dados de saída | 1 kHz (máx.) |
| Faixa do giroscópio | ±250, ±500, ±1000, ±2000 °/s |
| Faixa do acelerômetro | ±2g, ±4g, ±8g, ±16g |
| Pacote | QFN |
| Notas / variantes | Inclui 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

Para conectar o MPU-6050 e o display LCD1602 ao seu Arduino, siga estas conexões:
- Conecte o
VCCpino do MPU-6050 para o5Vpino no Arduino. - Conecte o
GNDpino do MPU-6050 para oGNDpino no Arduino. - Conecte o
SDApino do MPU-6050 para oA4pino no Arduino. - Conecte o
SCLpino do MPU-6050 para oA5pino no Arduino. - Para o display LCD1602, conecte o
VCCfixar em5Vno Arduino. - Conecte o
GNDpino do LCD1602 para oGNDpino no Arduino. - Conecte o
SDApino do LCD1602 ao mesmoA4pino usado para o MPU-6050. - Conecte o
SCLpino 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).
/*
*
* 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
-
AmazonasCompre MPU-6050 na Amazonamzn.to
-
AmazonasCompre o LCD1602-I2C na Amazonamzn.to
-
eBayCompre LCD1602-I2C no eBayebay.us
-
AliExpressCompre 10 peças de LCD1602-I2C no AliExpress.s.click.aliexpress.com
Recursos e referências
-
ExternoSite do fabricanteinvensense.com
Arquivos📁
Bibliotecas do Arduino (zip)
-
Biblioteca LCD1602 para Arduino da Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB -
Biblioteca Arduino para MPU9250
robojax-MPU9250-master.zip3.38 MB
Arquivo Fritzing
-
Módulo LCD LCD1602-I2C com 4 fios
LCD1602-I2C.fzpz0.01 MB -
Placa MPU-6050 GY-521
MPU-6050 Board GY-521.fzpz0.01 MB