Anzeige von MPU-6050-Sensordaten auf LCD 1602 oder LCD2004 mit Arduino
In diesem Tutorial lernen wir, wie man Daten des MPU-6050-Sensors auf einem LCD 1602 oder LCD2004 mit Arduino anzeigt. Der MPU-6050 ist ein vielseitiger Sensor, der ein 3-Achsen-Gyroskop und einen 3-Achsen-Beschleunigungssensor kombiniert und sich daher ideal für verschiedene Anwendungen wie Bewegungserkennung und Orientierung eignet. Durch das Anschließen dieses Sensors an ein LCD-Display können wir Sensordaten in Echtzeit visualisieren, einschließlich Winkel und Temperatur.

Im Verlauf dieses Projekts behandeln wir die notwendigen Hardwarekomponenten, die Verkabelungsdetails und die Implementierung des Codes. Das hilft Ihnen zu verstehen, wie Sie den MPU-6050 einrichten und dessen Ausgabe auf einem LCD anzeigen. Zur weiteren Klärung des Codes sollten Sie sich unbedingt das Video ansehen (im Video bei 00:00).
Hardware erklärt
Die Hauptkomponenten für dieses Projekt sind das Arduino-Board, der MPU-6050-Sensor und das LCD-Display (entweder 1602 oder 2004). Das Arduino-Board dient als Mikrocontroller, der die Daten vom MPU-6050 verarbeitet und sie an das LCD sendet.
Der MPU-6050-Sensor verwendet I2C-Kommunikation, um Daten an den Arduino zu senden. Er enthält einen Beschleunigungssensor und ein Gyroskop, die es ihm ermöglichen, Bewegung und Orientierung zu erfassen. Das LCD-Display wird verwendet, um die aus den Sensordaten abgeleiteten Winkel anzuzeigen. Es wird ebenfalls über I2C mit dem Arduino verbunden, was die Verkabelung und Kommunikation vereinfacht.
Details zum Datenblatt
| Hersteller | Invensense |
|---|---|
| Teilenummer | MPU-6050 |
| Logik-/E/A-Spannung | 3,3 V / 5 V |
| Versorgungsspannung | 3.3 V bis 5 V |
| Ausgangsdatenrate | 1 kHz (max.) |
| Temperaturbereich | -40 bis +85 °C |
| Paket | QFN |
| Notizen / Varianten | Gyroskop und Beschleunigungssensor integriert |
- Stellen Sie sicher, dass die Stromversorgung ordnungsgemäß innerhalb des angegebenen Spannungsbereichs erfolgt.
- Verwenden Sie bei Bedarf Pull-Up-Widerstände an den I2C-Leitungen.
- Prüfen Sie die I2C-Adresse auf Kompatibilität mit Ihrer Konfiguration.
- Kalibrieren Sie den Sensor für genaue Messwerte.
- Achten Sie beim Verdrahten darauf, Kurzschlüsse zu vermeiden.
Verdrahtungsanleitung

Um das MPU-6050-Modul mit dem Arduino zu verkabeln, beginnen Sie damit, den VCC-Pin des MPU-6050-Moduls mit dem 5V-Pin des Arduino zu verbinden. Als Nächstes verbinden Sie den GND-Pin des MPU-6050-Moduls mit einem der GND-Pins des Arduino. Für die I2C-Kommunikation verbinden Sie den SDA-Pin des MPU-6050-Moduls mit dem analogen Pin A4 des Arduino und den SCL-Pin mit dem analogen Pin A5.
Für das LCD-Display verbinde den VCC-Pin mit dem 5V-Pin des Arduino und den GND-Pin mit dem GND-Pin des Arduino. Verbinde den SDA-Pin des LCD mit demselben A4-Pin, der für den MPU-6050 verwendet wird, und den SCL-Pin des LCD mit dem A5-Pin. Auf diese Weise teilen sich sowohl der MPU-6050 als auch das LCD die gleichen I2C-Leitungen, was die Verkabelung vereinfacht.

Stellen Sie sicher, dass die Verbindungen fest sitzen und keine losen Drähte vorhanden sind. Wenn Ihr LCD oder Ihr Sensor nicht mit Strom versorgt wird, überprüfen Sie die Verdrahtung und die Anschlüsse noch einmal.
Codebeispiele und Schritt-für-Schritt-Anleitung
Im Code beginnen wir damit, die notwendigen Bibliotheken für den MPU-6050 und das LCD einzubinden:
#include
#include
#include
Hier erstellen wir Instanzen sowohl für den MPU-6050 als auch für das LCD. Der MPU-6050 wird mit der `Wire`-Bibliothek für die I2C-Kommunikation initialisiert, während das LCD mit seiner Adresse und seinen Abmessungen eingerichtet wird.
In der setup()-Funktion initialisieren wir den Sensor und das LCD:

void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
lcd.begin();
lcd.backlight();
lcd.clear();
}
Dieser Code richtet die serielle Kommunikation zum Debuggen ein, initialisiert die I2C-Kommunikation und bereitet das LCD für die Anzeige vor. Die Hintergrundbeleuchtung wird eingeschaltet, damit die Anzeige sichtbar wird.
In der loop()-Funktion lesen wir kontinuierlich Daten vom MPU-6050 und zeigen sie auf dem LCD an:
void loop() {
mpu6050.update();
lcd.clear();
lcdDisplay(mpu6050.getAngleX(), mpu6050.getAngleY(), mpu6050.getAngleZ());
delay(100);
}
Dieses Snippet aktualisiert die Sensordaten und löscht das LCD für neue Messwerte alle 100 Millisekunden. Die Funktion lcdDisplay wird aufgerufen, um die Winkel auf dem LCD anzuzeigen.
Für ein vollständiges Verständnis sehen Sie sich bitte das entsprechende Video an, in dem der vollständige Code gezeigt wird (im Video bei 00:00).
Vorführung / Was Sie erwartet
Wenn alles korrekt eingerichtet ist, sollte das LCD die Winkel der X-, Y- und Z-Achsen in Echtzeit anzeigen. Sie können den MPU-6050-Sensor kippen, um die Änderungen auf dem Display zu sehen. Wenn Probleme auftreten, prüfen Sie die Verkabelung auf vertauschte Polarität oder stellen Sie sicher, dass die I2C-Adressen korrekt eingestellt sind.
Das Ablesen der Werte auf dem LCD ermöglicht Ihnen, zu sehen, wie der Sensor auf Bewegungs- und Lageänderungen reagiert. Wenn die Werte konstant oder fehlerhaft erscheinen, überprüfen Sie die Verbindungen und stellen Sie sicher, dass der Sensor ordnungsgemäß funktioniert.
/*
*
* 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 LCD2004-I2C display module.
*
* Library and code have been taken from:
* https://github.com/tockn/MPU6050_tockn
*
* Updated by Ahmad Shamshiri on July 07, 2018 at 13:43 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instruction for this code at: https://youtu.be/ixe--SXemp8
*
* 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 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(false);
// initialize the LCD,
lcd.begin();
// Turn on the backlight and print a message.
lcd.backlight();
lcd.clear();
lcd.setCursor (0,0); //
lcd.print("Robojax MPU-6050");
lcd.setCursor (0,1); //
lcd.print("Please Wait - 3");
lcd.setCursor (0,1); //
delay(1000);
lcd.print("Please Wait - 2");
delay(1000);
lcd.setCursor (0,1); //
lcd.print("Please Wait - 1");
delay(1000);
}
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(
mpu6050.getAngleX(), // send angle X
mpu6050.getAngleY(), // send angle Y
mpu6050.getAngleZ() // send angle Z
);
delay(100);
}// loop end
/*
* Written by Ahmad Shamshiri for Robojax.com
* lcdDisplay(float x, float y, float z)
* displays value and title on LCD2004-I2C display
* How to use:
* just pass the three values and it will display them.
* lcdDisplay(mpu6050.getAngleX() , mpu6050.getAngleY() , mpu6050.getAngleZ() )
*/
void lcdDisplay(float x, float y, float z)
{
// Robojax.com MPU6050 Demo with LCD2004-I2C Display
lcd.setCursor (0,0); //
lcd.print("Robojax MPU-6050");
lcd.setCursor (0,1); //character zero, line 1
lcd.print("Angle X:");
lcd.setCursor (9,1); //
lcd.print(x);
lcd.setCursor (0,2); //character zero, line 2
lcd.print("Angle Y:");
lcd.setCursor (9,2); //
lcd.print(y);
lcd.setCursor (0,3); //character zero, line 3
lcd.print("Angle Z:");
lcd.setCursor (9,3); //
lcd.print(z);
}
/*
*
* This code is basic usage of the MPU-6050 accelerometer and gyroscope.
*
* This code displays data on the LCD2004 display based on
* the option you set. See below.
*
*
* Library and code have been taken from:
* https://github.com/tockn/MPU6050_tockn
*
* Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/ixe--SXemp8
*
* 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);
long timer = 0;
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);
int typeSelect = 6;// select type . See below
String type[]={ "GyroAng and Ang",// select 0
"GyroAng and Acc",// select 1
"GyroAng and Gyro",// select 2
"AccAng and Acc",// select 3
"AccAng & Gyro",// select 4
"AccAng and Ang",// select 5
"Angle and Temp"// select 6
};
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();
if(millis() - timer > 1000){
Serial.println("=======================================================");
Serial.print("temp : ");Serial.println(mpu6050.getTemp());
Serial.print("accX : ");Serial.print(mpu6050.getAccX());
Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
Serial.print("accAngleX : "); Serial.print(mpu6050.getAccAngleX());
Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
Serial.println("=======================================================\n");
timer = millis();
}// if
lcd.clear();// clearn previous values from screen
switch (typeSelect)
{
case 0:// display GyroAngle and Angle
lcdDisplay(mpu6050.getGyroAngleX(),mpu6050.getGyroAngleY(),mpu6050.getGyroAngleZ(),
mpu6050.getAngleX(),mpu6050.getAngleY(),mpu6050.getAngleZ()
);
break;
case 1:// display GyroAngle and Acceleration value
lcdDisplay(mpu6050.getAngleX(),mpu6050.getAngleY(),mpu6050.getAngleZ(),
mpu6050.getAccX(),mpu6050.getAccY(),mpu6050.getAccZ()
);
break;
case 2:// display GyroAngle and Gyroscope value
lcdDisplay(mpu6050.getAngleX(),mpu6050.getAngleY(),mpu6050.getAngleZ(),
mpu6050.getGyroX(),mpu6050.getGyroY(),mpu6050.getGyroZ()
);
break;
case 3:// display Acceleration Angle and Acceleration value
lcdDisplay(mpu6050.getAccAngleX(),mpu6050.getAccAngleY(),0.0,
mpu6050.getAccX(),mpu6050.getAccY(),mpu6050.getAccZ()
);
break;
case 4:// display Acceleration Angle and Gyro value
lcdDisplay(mpu6050.getAccAngleX(),mpu6050.getAccAngleY(), 0.0,
mpu6050.getGyroX(),mpu6050.getGyroY(),mpu6050.getGyroZ()
);
break;
case 5:// display Acceleration Angle and Angle
lcdDisplay(mpu6050.getAccAngleX(),mpu6050.getAccAngleY(), 0.0,
mpu6050.getAngleX(),mpu6050.getAngleY(),mpu6050.getAngleZ()
);
break;
case 6:// display angle and Temperature
lcdDisplay(mpu6050.getAngleX(),mpu6050.getAngleY(),mpu6050.getAngleZ(),
mpu6050.getTemp(), 0.0, 0.0
);
break;
}// switch end
delay(100);
}// loop
/*
* Written by Ahmad Shamshiri for Robojax.com
* lcdDisplay(lcdDisplay(float x, float y, float z, float x1, float y1, float z1)
* displays values and titles on the LCD2004-I2C display.
* How to use:
* just pass the 6 values and it will display them.
lcdDisplay(mpu6050.getAccAngleX(),mpu6050.getAccAngleY(),mpu6050.getAccAngleZ(),
mpu6050.getAngleX(),mpu6050.getAngleY(),mpu6050.getAngleZ()
);
*/
void lcdDisplay(float x, float y, float z, float x1, float y1, float z1)
{
// Robojax.com MPU6050 Demo with LCD2004-I2C Display
lcd.setCursor (0,0); //
lcd.print(type[typeSelect]);
lcd.setCursor (17,0); //
String dis = "("+String(typeSelect)+")";
lcd.print(dis);
if(typeSelect !=6){
lcd.setCursor (0,1); //character zero, line 1
lcd.print("X:");
lcd.setCursor (2,1); //
lcd.print(x);
/////////////////////
lcd.setCursor (10,1); //character zero, line 1
lcd.print("X1:");
lcd.setCursor (13,1); //
lcd.print(x1);
lcd.setCursor (0,2); //character zero, line 2
lcd.print("Y:");
lcd.setCursor (2,2); //
lcd.print(y);
////////////////////////
lcd.setCursor (10,2); //character zero, line 1
lcd.print("Y1:");
lcd.setCursor (13,2); //
lcd.print(y1);
lcd.setCursor (0,3); //character zero, line 3
lcd.print("Z:");
lcd.setCursor (2,3); //
lcd.print(z);
//////////////////////
lcd.setCursor (10,3); //character zero, line 3
lcd.print("Z1:");
lcd.setCursor (13,3); //
lcd.print(z1);
}else{
lcd.setCursor (0,1); //character zero, line 1
lcd.print("X:");
lcd.setCursor (2,1); //
lcd.print(x);
/////////////////////
lcd.setCursor (10,1); //character zero, line 1
lcd.print("TMP: ");
lcd.setCursor (15,1); //
lcd.print(x1);
lcd.setCursor (0,2); //character zero, line 2
lcd.print("Y:");
lcd.setCursor (2,2); //
lcd.print(y);
lcd.setCursor (0,3); //character zero, line 3
lcd.print("Z:");
lcd.setCursor (2,3); //
lcd.print(z);
}
}
Ressourcen & Referenzen
-
ExternHersteller-Websiteinvensense.com
-
ExternHolen Sie sich die Bibliothek von GitHubgithub.com
Dateien📁
Arduino-Bibliotheken (zip)
-
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 -
LCD2004-I2C
LCD2004-I2C.fzpz0.02 MB
Andere Dateien
-
LCD1602 LiquidCrystal Bibliothek
robojax-LCD1602_LiquidCrystal.zip