Gyroskop – GY-521 MPU6050 – ESP32 Tutorial

 


 

Einleitung

In diesem Artikel geht es darum, wie du den GY-521 MPU6050-Sensor erfolgreich mit einem ESP32-Mikrocontroller verbindest und programmierst. Wir führen dich Schritt für Schritt durch den gesamten Prozess, von der benötigten Hardware bis zur Ausführung des Codes. Dieses Tutorial ist speziell für die Programmierung mit der Arduino IDE konzipiert und zeigt dir alles, was du wissen musst.
Wir behandeln die erforderlichen Komponenten, den detaillierten Schaltplan für den GY-521 MPU6050 mit dem ESP32 und erklären den dazugehörigen Programm-Code. Am Ende wirst du in der Lage sein, die Sensordaten auszulesen und in eigenen Projekten zu verwenden.

 

 

Verschaltung

Teile

1x ESP32
1x ENS160
4x Verbindungskabel

Bibliotheken

Adafruit_MPU6050.h

Code

 

 



 

Übersicht – GY-521 MPU6050 + ESP32

Bevor wir mit dem eigentlichen Aufbau und der Programmierung beginnen, verschaffen wir uns eine schnelle Übersicht über die benötigten Bauteile. Das Herzstück unseres Projekts ist der ESP32, ein leistungsstarker Mikrocontroller, der sich hervorragend für IoT-Projekte eignet. In Kombination mit dem GY-521 MPU6050 Sensor, der Beschleunigungs- und Drehratenwerte erfasst, lassen sich spannende Anwendungen realisieren, wie zum Beispiel die Stabilisierung einer Drohne oder die Steuerung eines Roboters.
Benötigte Komponenten
1 x ESP32
1 x GY-521 MPU6050
4 x Verbindungskabel (Dupont-Kabel)

 



 

Pinout – GY-521 MPU6050

Der GY-521 MPU6050-Sensor verfügt über insgesamt acht Pins, die für die Kommunikation und Stromversorgung genutzt werden. Die wichtigsten Pins sind VCC und GND für die Stromzufuhr sowie SCL und SDA für die I²C-Kommunikation mit dem ESP32. Die restlichen Pins werden in den meisten Standard-Tutorials nicht benötigt, sind aber für fortgeschrittene Anwendungen relevant.
Pinbelegung des GY-521 MPU6050

VCC: Spannungsversorgung (typischerweise 3,3V bis 5V)
GND: Masseanschluss
SCL: I2C-Taktleitung (Serial Clock)
SDA: I2C-Datenleitung (Serial Data)
XDA: Hilfs-Datenleitung
XCL: Hilfs-Taktleitung
AD0: Adresspin zur Auswahl der I²C-Adresse
INT: Interrupt-Pin

 



 

Hardware Aufbau / Verkabelung / Schaltungsaufbau

Der Aufbau der Schaltung ist unkompliziert. Du verbindest lediglich die Stromversorgungs- und die I²C-Kommunikationspins des GY-521 MPU6050 mit dem ESP32. Achte darauf, dass du die Pins korrekt zuordnest, damit die Datenübertragung reibungslos funktioniert.
Die Verdrahtung erfolgt wie folgt:

ESP32 3,3V → GY-521 MPU6050 VCC

ESP32 GND → GY-521 MPU6050 GND

ESP32 D22 → GY-521 MPU6050 SCL-Pin

ESP32 D21 → GY-521 MPU6050 SDA-Pin

Die sorgfältige und korrekte Verdrahtung ist von entscheidender Bedeutung, um sicherzustellen, dass der ESP32 die Signale des GY-521 MPU6050 ordnungsgemäß erfassen kann. Sobald du diese Verbindungen erfolgreich hergestellt hast, bist du bereit, mit der Programmierung fortzufahren. Im nächsten Abschnitt gehen wir detailliert darauf ein, wie du die notwendige Bibliothek einbindest und den Code für den GY-521 MPU6050 schreibst.

 

Software Programmierung

Sobald der Hardware-Aufbau erfolgreich abgeschlossen ist, können wir uns nun der Programmierung in der Arduino-IDE zuwenden. In diesem Abschnitt werden wir die wesentlichen Schritte zur Codeerstellung behandeln und die Schlüsselfunktionen, die du verwenden wirst, im Detail erläutern.

Schritt 1: IDE Projekt
Öffnen der Arduino-IDE und Erstellen eines neuen Projekts.
Um mit der Arduino-IDE zu arbeiten, starte zuerst die Anwendung auf deinem Computer. Falls du die Arduino-IDE noch nicht installiert hast, findest du unter folgendem Link eine entsprechende Anleitung:
>
Nachdem du die Arduino-IDE geöffnet hast, erstelle ein neues Projekt, indem du auf „Datei“ und anschließend auf „Neu“ klickst. Dadurch öffnet sich ein neues Sketch-Fenster, in das du deinen Code eingeben kannst.


// Hier kommt dein Code
void setup()
{
  // Initialisierung
}

void loop()
{
  // Schleife
}

 

Schritt 2: Bibliothek einbinden
Um die Daten des GY-521 MPU6050 auszulesen, ist es notwendig, eine passende Bibliothek in deine Arduino-IDE zu integrieren. Gehe dazu in der Menüleiste auf „Sketch“, wähle „Bibliothek einbinden“ und klicke dann auf „Bibliotheken verwalten…“.
Wir benötigen die folgenden Bibliothek: Adafruit MPU6050. Nur so erhältst du die erforderlichen Funktionen, um die Beschleunigungs-, Rotations- und Temperaturdaten zu erfassen.


#include <Adafruit_MPU6050.h>

 

Schritt 3: Initialisierung
Im ersten Teil des Codes, noch vor der setup()-Funktion, werden die benötigten Bibliotheken eingebunden und ein Objekt für den Sensor erstellt. #include und die anderen include-Anweisungen stellen sicher, dass alle erforderlichen Funktionen der Bibliotheken zur Verfügung stehen. Mit Adafruit_MPU6050 mpu; wird eine Instanz der MPU6050-Klasse erzeugt, die wir im weiteren Verlauf des Programms verwenden, um auf den Sensor zuzugreifen.


Adafruit_MPU6050 mpu; // Erstelle ein Objekt für den MPU6050-Sensor

 

Schritt 4: Void Setup
Innerhalb der setup()-Funktion wird die einmalige Initialisierung des Programms durchgeführt. Zuerst wird die serielle Kommunikation mit Serial.begin(9600); gestartet, um später die Sensordaten auf dem seriellen Monitor ausgeben zu können. Danach wird mit mpu.begin() überprüft, ob der Sensor erfolgreich erkannt wurde. Schließlich werden mit setAccelerometerRange(), setGyroRange() und setFilterBandwidth() die Messbereiche und die Bandbreite des Sensors eingestellt, um die Messungen an die spezifischen Anforderungen anzupassen.


void setup() {
  Serial.begin(9600); // Serielle Kommunikation initialisieren - 9600 bits pro Sekunde

  if (!mpu.begin()) { // Wenn MPU6050 nicht erkannt wird
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }
  Serial.println("MPU6050 Found!");

  mpu.setAccelerometerRange(MPU6050_RANGE_8_G); // Beschleunigungsbereich auf +-8G einstellen
  mpu.setGyroRange(MPU6050_RANGE_500_DEG); // Gyrobereich auf +- 500 deg/s einstellen
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ); // Filterbandbreite auf 21 Hz einstellen

  delay(100); // Verzögerung zur Stabilität
}

 

Schritt 5: Loop Setup
Die loop()-Funktion wird kontinuierlich und wiederkehrend ausgeführt. Sie liest in jedem Durchlauf die aktuellen Messwerte des Sensors aus. Die Zeile mpu.getEvent(&a, &g, &temp); ruft die Beschleunigungs-, Rotations- und Temperaturdaten ab und speichert sie in den entsprechenden Variablen. Anschließend werden die ausgelesenen Werte über Serial.print() und Serial.println() auf dem seriellen Monitor ausgegeben. Eine abschließende Verzögerung von einer Sekunde (delay(1000);) sorgt dafür, dass die Messwerte nicht zu schnell nacheinander erscheinen und die Ausgabe gut lesbar ist.


void loop() {
  // Neue Sensorereignisse mit den Messwerten
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  // Ausgabe: Beschleunigungswerte in m/s^2
  Serial.print("Acceleration:    X:");
  Serial.print(a.acceleration.x);
  Serial.print(", Y:");
  Serial.print(a.acceleration.y);
  Serial.print(", Z:");
  Serial.print(a.acceleration.z);
  Serial.println(" (m/s^2)");

  // Ausgabe: Rotationsmesswerte in rad/s
  Serial.print("Rotation:        X:");
  Serial.print(g.gyro.x);
  Serial.print(", Y:");
  Serial.print(g.gyro.y);
  Serial.print(", Z:");
  Serial.print(g.gyro.z);
  Serial.println(" (rad/s)");

  // Ausgabe: Temperaturwert in Grad Celsius 
  Serial.print("Temperature:    ");
  Serial.print(temp.temperature);
  Serial.println(" (degC)");

  // Ausgabe: Leerzeile (zur Übersichtlichkeit)
  Serial.println("");

  delay(1000); // 1 Sekunde Pause
}

 

Gesamter Code

Nochmal zur Übersicht der gesamte Programmier-Code. Dieser Code vereint alle vorherigen Schritte und ist direkt bereit, auf deinen ESP32 hochgeladen zu werden.


#include <Adafruit_MPU6050.h>

Adafruit_MPU6050 mpu; // Erstelle ein Objekt für den MPU6050-Sensor

void setup() {
  Serial.begin(9600); // Serielle Kommunikation initialisieren - 9600 bits pro Sekunde

  if (!mpu.begin()) { // Wenn MPU6050 nicht erkannt wird
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }
  Serial.println("MPU6050 Found!");

  mpu.setAccelerometerRange(MPU6050_RANGE_8_G); // Beschleunigungsbereich auf +-8G einstellen
  mpu.setGyroRange(MPU6050_RANGE_500_DEG); // Gyrobereich auf +- 500 deg/s einstellen
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ); // Filterbandbreite auf 21 Hz einstellen

  delay(100); // Verzögerung zur Stabilität
}

void loop() {
  // Neue Sensorereignisse mit den Messwerten
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  // Ausgabe: Beschleunigungswerte in m/s^2
  Serial.print("Acceleration:    X:");
  Serial.print(a.acceleration.x);
  Serial.print(", Y:");
  Serial.print(a.acceleration.y);
  Serial.print(", Z:");
  Serial.print(a.acceleration.z);
  Serial.println(" (m/s^2)");

  // Ausgabe: Rotationsmesswerte in rad/s
  Serial.print("Rotation:        X:");
  Serial.print(g.gyro.x);
  Serial.print(", Y:");
  Serial.print(g.gyro.y);
  Serial.print(", Z:");
  Serial.print(g.gyro.z);
  Serial.println(" (rad/s)");

  // Ausgabe: Temperaturwert in Grad Celsius
  Serial.print("Temperature:     ");
  Serial.print(temp.temperature);
  Serial.println(" (degC)");

  // Ausgabe: Leerzeile (zur Übersichtlichkeit)
  Serial.println("");

  delay(1000); // 1 Sekunde Pause
}

 

Ausführung / Anwendung

Nachdem der Code in die Arduino-IDE eingegeben wurde, muss er nun kompiliert, auf den ESP32 übertragen und ausgeführt werden. Dies sind die nächsten Schritte, um die Sensordaten zu sehen.

Kompilieren: Klicke auf das Häkchen-Symbol in der oberen linken Ecke der IDE, um den Code zu kompilieren. Dabei wird der Code auf Fehler überprüft.

Hochladen: Klicke auf den Pfeil neben dem Häkchen-Symbol. Dadurch wird der Code auf deinen ESP32 übertragen. Achte darauf, dass der richtige Port und das richtige Board ausgewählt sind.

Seriellen Monitor öffnen: Klicke in der Menüleiste auf „Tools“ und wähle „Serieller Monitor“ aus oder nutze das Lupen-Symbol in der oberen rechten Ecke.

Datenanzeige: Der Serielle Monitor öffnet sich und zeigt die Sensordaten des GY-521 MPU6050 an. Du solltest die Beschleunigungs-, Rotations- und Temperaturwerte in Echtzeit sehen.

 

Beschleunigung (acceleration)

Beschleunigung in X-Richtung

 

Beschleunigung in Y-Richtung

 

Beschleunigung in Z-Richtung

 

Rotation

Rotation in X-Richtung

 

Rotation in Y-Richtung

 

Rotation in Z-Richtung

 

Weitere Themen


Mikrocontroller - ESP32 - ESP - Arduino - Programmierung - Code  - Software - Programm -  - BME280 – ESP32 - GY-521 MPU6050 - Sensor - Gyroskop

BME280 – ESP32


Mikrocontroller - ESP32 - ESP - Arduino - Programmierung - Code  - Software - Programm -  - DHT11 – ESP32 - GY-521 MPU6050 - Sensor - Gyroskop

DHT11 – ESP32


Mikrocontroller - ESP32 - ESP - Arduino - Programmierung - Code  - Software - Programm -  - Soundmodul – ESP32 - GY-521 MPU6050 - Sensor - Gyroskop

Soundmodul – ESP32