Codice Arduino per MPU-6050 con display LCD1602 I2C
In questo tutorial impareremo come interfacciare l'MPU-6050 (accelerometro e giroscopio) con un display LCD1602 utilizzando la comunicazione I2C. L'MPU-6050 fornirà misurazioni degli angoli che verranno visualizzate sul display LCD. Questo progetto ti aiuterà a visualizzare in tempo reale gli angoli dell'MPU-6050, migliorando la tua comprensione dei dati del sensore e dell'interfacciamento con il display.


Alla fine di questo tutorial avrai una configurazione funzionante che visualizza gli angoli X, Y e Z sullo schermo LCD. È un ottimo modo per acquisire esperienza pratica con i dati dei sensori e con la tecnologia di visualizzazione nei progetti Arduino. Per ulteriori chiarimenti, assicurati di guardare il video (a 00:00).
Hardware spiegato
I componenti principali di questo progetto sono il sensore MPU-6050 e il modulo display LCD1602. Il MPU-6050 è un sensore versatile che combina un accelerometro a 3 assi e un giroscopio a 3 assi, fornendo misurazioni angolari in tempo reale. Comunica tramite I2C, permettendo un'integrazione fluida con Arduino.
Il display LCD1602 utilizza anche il protocollo I2C, che semplifica il cablaggio e riduce il numero di pin necessari per la comunicazione. L'interfaccia I2C consente di collegare più dispositivi sullo stesso bus, rendendola efficiente per progetti con più sensori o componenti.
Dettagli della scheda tecnica
| Produttore | InvenSense |
|---|---|
| Numero di parte | MPU-6050 |
| Tensione logica/I/O | 3,3 V / 5 V |
| Tensione di alimentazione | da 3.3 V a 5 V |
| Velocità di uscita dei dati | 1 kHz (massimo) |
| Intervallo di misura del giroscopio | ±250, ±500, ±1000, ±2000 °/s |
| Campo di misura dell'accelerometro | ±2g, ±4g, ±8g, ±16g |
| Pacchetto | QFN |
| Note / varianti | Include il Digital Motion Processor (DMP) |
- Controlla l'indirizzo I2C (predefinito: 0x68).
- Assicurarsi che la tensione di alimentazione sia corretta (3,3 V o 5 V).
- Usare resistori di pull-up per le linee SDA e SCL se non sono già presenti sulla scheda.
- Considera l'uso di condensatori di disaccoppiamento vicino ai pin di alimentazione per la stabilità.
- Verificare i collegamenti dei cavi per evitare problemi di comunicazione.
Istruzioni di cablaggio

Per collegare l'MPU-6050 e il display LCD1602 al tuo Arduino, segui queste connessioni:
- Collega il
VCCpin del MPU-6050 al5Vpin sull'Arduino. - Collega il
GNDpin del MPU-6050 alGNDpin sull'Arduino. - Collega il
SDApin del MPU-6050 alA4pin sull'Arduino. - Collega il
SCLpin del MPU-6050 alA5pin sull'Arduino. - Per il display LCD1602, collegare il
VCCfissare a5Vsull'Arduino. - Collega il
GNDpin del LCD1602 alGNDpin sull'Arduino. - Collega il
SDApin del LCD1602 allo stessoA4pin usato per l'MPU-6050. - Collega il
SCLpin del LCD1602 allo stessoA5pin usato per l'MPU-6050.
Assicurati di ricontrollare le connessioni, poiché un cablaggio errato potrebbe causare malfunzionamento del dispositivo o impedirne la corretta comunicazione.
Esempi di codice e guida passo-passo
Il codice inizia includendo le librerie necessarie per l'MPU-6050 e per il display LCD. Il seguente estratto mostra come inizializzare l'MPU-6050:
MPU6050 mpu6050(Wire);Qui instanziamo ilMPU6050oggetto, che verrà usato per leggere i dati dal sensore. Successivamente, dobbiamo configurare il dispositivo nelsetup()funzione:
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
lcd.begin();
lcd.backlight();
}Questo codice inizializza la comunicazione seriale, il bus I2C e il sensore MPU-6050. Inizializza anche l'LCD e accende la sua retroilluminazione. Il loop contiene la logica per aggiornare e visualizzare gli angoli:
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);
}In questo ciclo, gli angoli per X, Y e Z vengono aggiornati e visualizzati sull'LCD. La funzionelcdDisplay()Viene utilizzato per formattare correttamente l'output. Puoi trovare il codice completo caricato sotto l'articolo.
Dimostrazione / Cosa aspettarsi
Quando la configurazione è completa e il codice è stato caricato, dovresti vedere gli angoli per X, Y e Z visualizzati sul display LCD in tempo reale. Se tutto è cablato correttamente, il display si aggiornerà ogni 100 millisecondi, mostrando l'orientamento attuale dell'MPU-6050.
I problemi comuni includono assicurarsi che le connessioni I2C siano corrette e che l'alimentazione sia stabile. Se l'MPU-6050 non è inizializzato correttamente, potresti visualizzare dati errati o nessun dato sul display LCD (nel video a 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);
}
Cose di cui potresti avere bisogno
-
AmazonAcquista LCD1602-I2C da Amazonamzn.to
-
AmazonAcquista MPU-6050 da Amazonamzn.to
-
eBayAcquista LCD1602-I2C da eBayebay.us
-
AliExpressAcquista 10 pezzi di LCD1602-I2C da AliExpresss.click.aliexpress.com
Risorse e riferimenti
-
EsternoSito web del produttoreinvensense.com
File📁
Librerie Arduino (zip)
-
Libreria LCD Arduino LCD1602 di Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB -
Libreria Arduino per MPU9250
robojax-MPU9250-master.zip3.38 MB
File Fritzing
-
Modulo LCD LCD1602-I2C con 4 fili
LCD1602-I2C.fzpz0.01 MB -
Scheda MPU-6050 GY-521
MPU-6050 Board GY-521.fzpz0.01 MB