MPU6050 Beschleunigungssensor und Gyroskop

Zurück

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.


HaBuRo3 MPU6050 Position


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.


HaBuRo3-MPU6050-Kalibrierung


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.


HaBuRo3-MPU6050-Software1 HaBuRo3-MPU6050-Software2 HaBuRo3-MPU6050-Software3 HaBuRo3-MPU6050-Software4


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.


HaBuRo3 MPU6050 Printout Konsole


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).



Zurück