HaBuRo3. Die Software main.cpp
Zuerst führe ich hier externe Bibliotheken auf, die für das HaBuRo3-Projekt notwendig sind.
An allen Entwicklern herzlichen Dank für diese hervorragenden libraries.
L298N Motortreiber von Rolando Pelayo
PID-Regler von Brett Beauregard
MPU6050 von ElectronicCats & Jeff Rowberg
Hier gehts nun ins Eingemachte! Die Erstellung der Software war für mich keine leichte Kost.
Allein um mich auf die Themen MPU6050, PID-Regler und Bluetooth einzuschießen brauchte ich
etwa 60 Stunden. Das gesamte Softwareprojekt habe ich in vier Softwaremodule aufgeteilt und
separat getestet. Jedoch mit der Zusammenführung dieser Module zum Gesamtpaket fingen die
Probleme an. Das Zusammenspiel MPU6050 und Bluetooth hat mich sehr verzweifelt.
Zigmal habe ich den ganzen Krempel in die Ecke geschmissen. Die Internetplattform Stack Overflow
hat geholfen. Ich kann es mir nicht verkneifen: Deutsche Foren! Antworten habe ich erhalten wie:
„Lerne zuerst, wie man einen Satz richtig schreibt!“
Im Februar 2023 waren einige warme Tage, da habe ich den HaBuRo3 mehrere Stunden ausprobiert.
Der Einbau von drei Potentiometern zum Trimmen der Regler-Parameter hat sich gelohnt. Gott sei Dank.
Um auch den letzten Feinschliff für Kp, Kd, Ki und den Setpoint hinzubekommen hätte man mindesten
25 Mal die Software neu kompilieren müssen.
Bevor ich dir die Software präsentiere muss ich dich noch auf eine Sache aufmerksam machen:
Die nachfolgende Software läuft so wie sie ist problemlos. Die Potentiometer-Trimmung und die
Visualisierung einiger Parameter zur Konsole müssen nicht unbedingt deaktiviert werden. Es gibt
jetzt kein ECHTZEITPROBLEM mehr zwischen MPU6050 und den Rest der Welt. Jedoch die Trimmung mit
Potentiometer hat auch Nachteile. Wenn ein Spindelpotentiometer nachträglich verstellt wird,
funktioniert der Roboter nicht mehr. Weiterhin haben die ADC-Eingänge des ESP32 Mikrocontrollers
einen Temperaturdrift. Es gibt zwei #define Anweisungen im main()-Programm. Werden diese Anweisungen
auf Kommentar gelegt (Zeile 30 & 31), arbeitet der Roboter mit den Einstellungen in Zeile 19 bis 22.
Hier möchte ich einige Besonderheiten beschreiben, die aus dem obigen Quellentext etwas verborgen
sind. Zeile 28: Die zwei Getriebemotoren haben unterschiedliche Drehzahlen. Das wird mit den beiden
Parametern 0,7 und 1,0 ausgeglichen. Zeilen 58, 60 und 61: Variablen für die Vorwärts-, Rückwärts-
und Kurvensteuerung werden im Listing „bluetooth.cpp“ Zeile 18 und 19 manipuliert. Bei einer zu
großen Veränderung des Sollwertes kippt der Roboter um!
(1) Ist der Roboter senkrecht Ausgerichtet und das
MPU6050 Breakout Board (Beschleunigungssensor und Gyroskop) in Waage, erhält man
einen Neigungswinkel von 0,49°. (2) Nach Abschluss
der Trimmung, der Roboter balanciert stundenlang vor sich hin, erhält man einen
Sollwert (Setpoint) von -1,21°. Wie interpretiert man nun diese beiden Werte? Ich
sehe das so, dass der Schwerpunkt des Roboters bei -1,21° liegt. Ist das richtig?
Datei: mpu_dmp.cpp
Datei: mpu_dmp.h
Mehr Details im Kapitel MPU6050!
Datei: tools.cpp
Datei: tools.h
Mehr Details im Kapitel Akku!
Datei: bluetooth.cpp
Datei: bluetooth.h
Mehr Details im Kapitel Remote Empfänger!