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.


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
| Hersteller | InvenSense |
|---|---|
| Teilenummer | MPU-6050 |
| Logik-/I/O-Spannung | 3.3 V / 5 V |
| Versorgungsspannung | 3.3 V bis 5 V |
| Ausgangsdatenrate | 1 kHz (max.) |
| Gyroskopbereich | ±250, ±500, ±1000, ±2000 °/s |
| Messbereich des Beschleunigungssensors | ±2g, ±4g, ±8g, ±16g |
| Paket | QFN |
| Anmerkungen / Varianten | Enthä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

Verbinden Sie den MPU-6050 und das LCD1602-Display wie folgt mit Ihrem Arduino:
- Verbinden Sie das
VCCPin des MPU-6050 an den5VPin am Arduino. - Verbinden Sie die
GNDPin des MPU-6050 an denGNDPin am Arduino. - Verbinden Sie das
SDAPin des MPU-6050 an denA4Pin am Arduino. - Verbinden Sie das
SCLPin des MPU-6050 zumA5Pin am Arduino. - Für das LCD1602-Display verbinden Sie
VCCanheften an5Vauf dem Arduino. - Verbinden Sie das
GNDPin des LCD1602 zumGNDPin am Arduino. - Schließen Sie das an
SDAPin des LCD1602 an denselbenA4Pin, der für den MPU-6050 verwendet wird. - Verbinden Sie das
SCLPin 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).
/*
*
* 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
-
AmazonKaufe MPU-6050 bei Amazonamzn.to
-
AmazonLCD1602-I2C bei Amazon kaufenamzn.to
-
eBayKaufen Sie LCD1602-I2C bei eBay.ebay.us
-
AliExpressKaufen Sie 10 Stück LCD1602-I2C von AliExpresss.click.aliexpress.com
Ressourcen & Referenzen
-
ExternHersteller-Websiteinvensense.com
Dateien📁
Arduino-Bibliotheken (zip)
-
LCD1602 LCD Arduino-Bibliothek von Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB -
Arduino-Bibliothek für MPU9250
robojax-MPU9250-master.zip3.38 MB
Fritzing-Datei
-
LCD LCD1602-I2C-Modul mit 4 Drähten
LCD1602-I2C.fzpz0.01 MB -
MPU-6050 Platine GY-521
MPU-6050 Board GY-521.fzpz0.01 MB