MPU6050 Beschleunigungssensor und Gyroskop
Das MPU6050 Breakout Board (Beschleunigungssensor und Gyroskop)
wird auf dieser Internetseite sehr gut erklärt.
Mein Schwerpunkt liegt im Zusammenspiel mit dem
selbstbalancierenden Roboter HaBuRo3. Wir brauchen nur den Neigungswinkel „x“ (pitch).
Weiterhin greife ich auf fertige Software zurück, die unter einer MIT-Lizenz
(freizügige Open-Source-Lizenz) zur Verfügung steht.
Ich habe mir unter GitHub etliche
Repositories angeschaut und in Verbindung mit der Arduino-Framework-Architektur läuft alles auf den
Entwickler Jeff Rowberg hinaus. Da ich alles
mit dem ESP32 Mikrocontroller machen will, setze ich die Software von
ElectronicCats Open Hardware,
Made in Mexico ein.
Auf der zweiten Ebene des obigen Bildes ist das MPU6050 Modul verbaut. Daneben ist
eine kleine Wasserwaage platziert, sie wird später entfernt. Das Bild zeigt die
Rückseite des Roboters an. Auf der MPU6050 Platine ist ein kleines
x mit Pfeil markiert, dieses
x muss nach vorn zeigen, die Anschlüsse des MPUs hinten. Ist
alles in Waage ausgerichtet kann die Kalibrierung durchgeführt werden.
Siehe weiter unten in diesem Kapitel.
Jedes MPU6050 Breakout Board muss zuerst einmalig kalibriert werden. Die Software dafür
findest du hier. Ich habe sie 1:1 übernommen nur die Zeilen 82 bis 87
für den ESP32 ersetzt in:
Wire.begin(21, 22);
Wire.setClock(400000);
Das obige Bild zeigt die Ergebnisse. Die Messung mehrere Male durchführen. Über
längere Zeit zeigt der Baustein ein anderes Verhalten (Drift). Wir nehmen dann
den Mittelwert. Die Werte habe ich dann in der MPU6050-Software in den Zeilen:
40 bis 43 eingetragen. Siehe weiter unten in dieser Beschreibung.
Die obige Software liefert permanent den Neigungswinkel in Grad mit einem Zeitstempel
von etwa 1,7 Millisekunden. Kippt der Roboter nach vorn wird der Winkel negativ. Kippt
er zurück wird der Winkel positiv.
Zeile 1 bis 90: Datei: mpu_dmp.cpp
Zeile 1 bis 6: Datei: mpu_dmp.h
Zeile 1 bis 15: Datei: main.cpp (nur zum Testen)
Zeile 13 (main.cpp) und Zeile 55 mpu_dmp.cpp: Nur, wenn die Variable dmpReady
true ist, liefert die Applikation Werte. Zeile 24 bis 28: Interrupt Funktion DMP
(Digital Motion Processor). Die Variable mpuInterrupt wird in Zeile
73 zurückgesetzt. Zeile 30 bis 65: Initialisiert den MPU6050 einschließlich DMP. Hier wird auch
die Variable dmpReady auf true gesetzt. Zeile 66 bis 76 liefert den
Neigungswinkel. Dieser wird in Zeile 75 von Radiant in Grad umgerechnet.
Position (1) und (2) sind
Informationen aus der Initialisierungsroutine GyroAccelerometer_init().
Position (3) visualisiert den Neigungswinkel (pitch) bei
exakter waagerechter Ausrichtung. In der Main-Applikation des selbstbalancierenden Roboters
HaBuRo3 wird dieser Winkel in die PID-Regler Routine als Istwert eingebunden (Input).