Nachdem unser ESP32 Roboter-Auto dank der präzisen Steuerung über den PS5-Controller schon ein echter Hingucker war, stand das nächste, unumgängliche Upgrade an: Es braucht einen Arm mit Greifer!

Wir haben den Roboterarm fest auf an der Halterung am Heck des Roboter-Autos montiert und die Steuerung des Roboter-Autos und die des Roboter-Arms in eine saubere C++-Klassenstrukturen überführt. Nun können wir gleichzeitig fahren und greifen. Das Ergebnis ist ein beeindruckendes, ferngesteuertes Multitool.

Der Moment, als der Code für die Armsteuerung zum ersten Mal lief, war unbezahlbar. Meine 8-jährige Tochter fragte verblüfft: „Papa, wie schnell kannst Du programmieren?“ Ich konnte ihr stolz erklären: „Das hat der KI-Assistent GEMINI in meinem Computer programmiert!“ – Ein perfektes Beispiel dafür, wie sich das Erklären von Ideen zur neuen Superkraft in Kombination mit KI-Assisten im Maker-Bereich entwickelt.

ESP32 Roboter Auto mit Roboter Arm

ESP32 Roboter Auto mit Roboter Arm

💡 Warum dieses Projekt ideal zum Lernen ist

Dieses Projekt ist mehr als nur ein spannendes Upgrade; es ist die perfekte Spielwiese, um den Umgang mit Servomotoren, deren exakten Steuerung und dem I2C-Protokoll zu meistern.

1. Servomotor-Steuerung: Präzision statt Drehzahl

Bei klassischen DC-Motoren steuern wir die Geschwindigkeit. Bei Servomotoren steuern wir die exakte Position in Grad wie z.B. abhängig vom Servomotor 0° bis 180°.

Der Lernprozess ist hier essenziell:

  • PWM-Mapping: Sie lernen, wie Sie einen gewünschten Winkel (z. B. $45°) in einen konkreten PWM-Pulsbreitenwert (z. B. 150 bis 600 von 4096 maximal) übersetzen. Dies geschieht in unserer RobotArm Klasse mit der Funktion mapServoAngleToPWM(int angle).
  • Mechanische Grenzen (Constrain): Sie müssen Minimale und Maximale Winkel (constrain) für jedes Roboter-Arm Gelenk definieren. Nur so verhindern Sie, dass der Arm gegen seine mechanischen Anschläge fährt und die Servos beschädigt werden.

2. Entlastung des ESP32 durch PCA9685

Wir verwenden einen PCA9685 PWM-Treiber für die vier Servos. Warum?

  • Der ESP32 hat nur eine begrenzte Anzahl an PWM-Kanälen für die Motoren und LEDs.
  • Der PCA9685 übernimmt die Erzeugung der präzisen 50 Hz PWM-Signale für die Servos.
  • Die gesamte Kommunikation läuft effizient über den I2C-Bus (SDA 21, SCL 22) ab, den wir uns mit dem OLED-Display teilen. Sie senden nur einen kurzen I2C-Befehl an den PCA9685, und dieser erledigt die zeitkritische Pulsgenerierung. Das hält den ESP32-Hauptprozessor frei für die Gamepad-Verarbeitung.

🏗️ Das Architektonische Setup

Um die Komplexität zu beherrschen, haben wir das Projekt in klare, modulare C++-Klassen unterteilt: RobotCar, RobotArm, ControllerManager und DisplayManager.

Kernkomponenten im Überblick:

  • Controller: PS5 Controller (via Bluepad32).
  • Arm-Steuerung: PCA9685 (I2C-Adresse 0x40) für die vier Servos (Basis, Arm 1, Arm 2, Greifer).
  • Fahrzeug-Steuerung: ESP32 LEDC PWM-Kanäle (0 bis 3) für den L298N-Motortreiber.
  • Anzeige: SSD1306 OLED-Display (SDA 21, SCL 22) teilt sich den I2C-Bus mit dem PCA9685.

Die Magie liegt in der ControllerManager-Klasse, die die Eingaben des linken Joysticks an die Auto-Steuerung (RobotCar::processControllerInput) und die Tasten/den rechten Joystick an die Arm-Steuerung (RobotArm::processControllerInput) weiterleitet.

🎬 Video: Code-Optimierung des Roboter-Arms mit Gemini

Auch im fertigen mechanischen aufgebauten Roboter-Arm Projekt sind ständige Optimierungen nötig. Sehen Sie in diesem Video, wie ich den KI-Assistenten Gemini nutze, um einen Tastenkonflikt in der Bluepad32-Steuerung zu analysieren und zu beheben. Die KI liefert die präzise Anweisung zur Code-Anpassung, sodass nun jede Funktion eine eigene, konfliktfreie Taste für die perfekte Bedienung des Roboters hat.

Mit diesem robusten und modularen Aufbau ist unser Roboter-Auto bereit für jeden Greif-Einsatz!

Wie sehen Ihre Roboter-Upgrade-Pläne aus? Lassen Sie es mich in den Kommentaren wissen!

Happy Roboter-Auto Building!