Cerca codice

Codice Arduino per MPU-6050 con display LCD1602 I2C

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.

LCD1602-I2C display module with 4 wires

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

ProduttoreInvenSense
Numero di parteMPU-6050
Tensione logica/I/O3,3 V / 5 V
Tensione di alimentazioneda 3.3 V a 5 V
Velocità di uscita dei dati1 kHz (massimo)
Intervallo di misura del giroscopio±250, ±500, ±1000, ±2000 °/s
Campo di misura dell'accelerometro±2g, ±4g, ±8g, ±16g
PacchettoQFN
Note / variantiInclude 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

Arduino wiring for MPU-6050 with LCD

Per collegare l'MPU-6050 e il display LCD1602 al tuo Arduino, segui queste connessioni:

  • Collega ilVCCpin del MPU-6050 al5Vpin sull'Arduino.
  • Collega ilGNDpin del MPU-6050 alGNDpin sull'Arduino.
  • Collega ilSDApin del MPU-6050 alA4pin sull'Arduino.
  • Collega ilSCLpin del MPU-6050 alA5pin sull'Arduino.
  • Per il display LCD1602, collegare ilVCCfissare a5Vsull'Arduino.
  • Collega ilGNDpin del LCD1602 alGNDpin sull'Arduino.
  • Collega ilSDApin del LCD1602 allo stessoA4pin usato per l'MPU-6050.
  • Collega ilSCLpin 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).

Immagini

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

Cose di cui potresti avere bisogno

Risorse e riferimenti

File📁

Librerie Arduino (zip)

File Fritzing