Suchcode

Arduino-Code für MPU-6050 mit LCD1602 I2C-Display

Arduino-Code für MPU-6050 mit LCD1602 I2C-Display

In diesem Tutorial lernen wir, wie man den MPU-6050 Beschleunigungssensor und Gyroskop mit einem LCD1602-Display über I2C-Kommunikation verbindet. Der MPU-6050 liefert Winkelmessungen, die auf dem LCD angezeigt werden. Dieses Projekt hilft Ihnen, die Winkel des MPU-6050 in Echtzeit zu visualisieren und verbessert Ihr Verständnis von Sensordaten und Display-Anbindung.

LCD1602-I2C display module with 4 wires

Am Ende dieses Tutorials haben Sie ein funktionierendes Setup, das die X-, Y- und Z-Winkel auf dem LCD-Bildschirm anzeigt. Das ist eine großartige Möglichkeit, praktische Erfahrung mit Sensordaten und Anzeigetechnik in Arduino-Projekten zu sammeln. Zur weiteren Klärung sehen Sie sich unbedingt das Video an (im Video bei 00:00).

Hardware erklärt

Die Hauptkomponenten dieses Projekts sind der MPU-6050-Sensor und das LCD1602-Displaymodul. Der MPU-6050 ist ein vielseitiger Sensor, der einen 3-Achsen-Beschleunigungssensor und ein 3-Achsen-Gyroskop kombiniert und Winkelmessungen in Echtzeit liefert. Er kommuniziert über I2C, was eine nahtlose Integration mit dem Arduino ermöglicht.

Das LCD1602-Display verwendet ebenfalls das I2C-Protokoll, was die Verkabelung vereinfacht und die Anzahl der für die Kommunikation benötigten Pins reduziert. Die I2C-Schnittstelle ermöglicht es, mehrere Geräte am selben Bus anzuschließen, wodurch sie sich für Projekte mit mehreren Sensoren oder Komponenten effizient eignet.

Details zum Datenblatt

HerstellerInvenSense
TeilenummerMPU-6050
Logik-/I/O-Spannung3.3 V / 5 V
Versorgungsspannung3.3 V bis 5 V
Ausgangsdatenrate1 kHz (max.)
Gyroskopbereich±250, ±500, ±1000, ±2000 °/s
Messbereich des Beschleunigungssensors±2g, ±4g, ±8g, ±16g
PaketQFN
Anmerkungen / VariantenEnthält einen digitalen Bewegungsprozessor (DMP)

  • Überprüfen Sie die I2C-Adresse (Standard ist 0x68).
  • Stellen Sie die richtige Versorgungsspannung sicher (3,3 V oder 5 V).
  • Verwenden Sie Pull-up-Widerstände für die SDA- und SCL-Leitungen, falls diese nicht bereits auf der Platine vorhanden sind.
  • Erwägen Sie den Einsatz von Entkopplungskondensatoren in der Nähe der Versorgungspins, um die Stabilität zu erhöhen.
  • Überprüfen Sie die Verkabelung, um Kommunikationsprobleme zu vermeiden.

Verdrahtungsanleitung

Arduino wiring for MPU-6050 with LCD

Verbinden Sie den MPU-6050 und das LCD1602-Display wie folgt mit Ihrem Arduino:

  • Verbinden Sie dasVCCPin des MPU-6050 an den5VPin am Arduino.
  • Verbinden Sie dieGNDPin des MPU-6050 an denGNDPin am Arduino.
  • Verbinden Sie dasSDAPin des MPU-6050 an denA4Pin am Arduino.
  • Verbinden Sie dasSCLPin des MPU-6050 zumA5Pin am Arduino.
  • Für das LCD1602-Display verbinden SieVCCanheften an5Vauf dem Arduino.
  • Verbinden Sie dasGNDPin des LCD1602 zumGNDPin am Arduino.
  • Schließen Sie das anSDAPin des LCD1602 an denselbenA4Pin, der für den MPU-6050 verwendet wird.
  • Verbinden Sie dasSCLPin des LCD1602 an denselbenA5Pin, der für den MPU-6050 verwendet wird.

Stellen Sie sicher, dass Sie Ihre Verbindungen doppelt überprüfen, da eine falsche Verkabelung zu einer Fehlfunktion des Geräts oder zu Kommunikationsstörungen führen kann.

Codebeispiele und Schritt-für-Schritt-Anleitung

Der Code beginnt damit, die notwendigen Bibliotheken für den MPU-6050 und das LCD-Display einzubinden. Der folgende Auszug zeigt, wie der MPU-6050 initialisiert wird:

MPU6050 mpu6050(Wire);

Hier instanziieren wir dieMPU6050Objekt, das zum Einlesen von Daten vom Sensor verwendet wird. Als Nächstes müssen wir das Gerät in dersetup()Funktion:

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

Dieser Code initialisiert die serielle Kommunikation, den I2C-Bus und den MPU-6050-Sensor. Er initialisiert außerdem das LCD und schaltet dessen Hintergrundbeleuchtung ein. Die loop-Funktion enthält die Logik zum Aktualisieren und Anzeigen der Winkel:

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 dieser Schleife werden die Winkel für X, Y und Z aktualisiert und auf dem LCD angezeigt. Die FunktionlcdDisplay()Es wird verwendet, um die Ausgabe korrekt zu formatieren. Den vollständigen Code finden Sie unterhalb des Artikels.

Demonstration / Was Sie erwartet

Wenn die Einrichtung abgeschlossen ist und der Code hochgeladen wurde, sollten die Winkel für X, Y und Z in Echtzeit auf dem LCD angezeigt werden. Wenn alles korrekt verdrahtet ist, aktualisiert sich die Anzeige alle 100 Millisekunden und zeigt die aktuelle Orientierung des MPU-6050 an.

Häufige Stolperfallen sind fehlerhafte I2C-Verbindungen und eine instabile Stromversorgung. Wenn der MPU-6050 nicht richtig initialisiert ist, kann man falsche oder gar keine Daten auf dem LCD sehen (im Video bei 01:15).

Bilder

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

Dinge, die Sie vielleicht brauchen

Ressourcen & Referenzen

Dateien📁

Arduino-Bibliotheken (zip)

Fritzing-Datei