Firmware für ein RC-Car auf Arduino Mega 2560 (PlatformIO), mit
- Lenkservo (Grad über
Servo::write(...)um Neutral bei 90°) - ESC/Throttle (PWM in Mikrosekunden über
Servo::writeMicroseconds(...)) - 3 IR-Distanzsensoren (Analog)
- Start/Stop-Taster (negative Logik: gedrückt ==
LOW)
Voraussetzungen:
- VS Code + PlatformIO Extension oder PlatformIO CLI
Sicher (ohne Hardwarezugriff):
- Build:
pio run -e megaatmega2560 - Clean:
pio run -e megaatmega2560 -t clean - Geräte anzeigen:
pio device list
Hardware/USB (nur wenn du es wirklich ausführen willst):
- Upload/Flash:
pio run -e megaatmega2560 -t upload - Serieller Monitor (9600):
pio device monitor -b 9600
- In
src/main.cppexistiert eine ESC-Kalibrier-/Setup-RoutinesetupESCPWM(). - Diese Routine sendet potenziell gefährliche PWM-Werte (inkl. starkem Vorwärts/Rückwärts).
- Sie wird nur ausgeführt, wenn
#define MOTOR_SETUP 1gesetzt ist.
Wenn du MOTOR_SETUP aktivierst:
- Fahrzeug physisch sichern (Räder frei / Auto aufbocken), Abstand halten.
- Erst dann flashen und beobachten.
Alle zentralen Tuning-Parameter sind oben in src/main.cpp als #define gesetzt:
TARGET_DISTANCE– Zielabstand (Regelung basiert aktuell auf linkem Sensor)SPEED– ESC-PWM in µs (z.B. 1500…2000 vorwärts, 1480 Bremse)MOTOR_SETUP– 0/1, führt optional ESC-Setup aus (siehe Sicherheit)
Lenk-Regelung:
- Neutral/Limit/Deadband:
STEERING_NEUTRAL_DEG,STEERING_MIN_DEG,STEERING_MAX_DEG,STEERING_DEADBAND - Proportionalfaktor:
STEERING_KP_DIV
Hindernis-Override:
- Wenn der mittlere Sensor „nah“ meldet, wird ein fixer Ausweichwinkel gesetzt:
MIDDLE_OBSTACLE_THRESHOLD,MIDDLE_OBSTACLE_STEER_DEG
Hinweis: Kommentare können vom tatsächlichen #define abweichen – Quelle der Wahrheit sind die Defines in src/main.cpp.
- Lenkservo Signal:
PIN_STEERING_SERVO= D5 - ESC/Speed Signal:
PIN_SPEED_SERVO= D2
- Batterie-Messung:
VBAT= A0 - Distanz links:
LEFTSENSOR= A1 - Distanz rechts:
RIGTHSENSOR= A2 - Distanz mitte:
MIDDLESENSOR= A3
- Start:
STARTBUTTON= D12 (schwarze Taste) - Stop:
STOPBUTTON= D13 (rote Taste)
setup()hängt beide Servos an die Pins, setzt Lenkung auf 90° und startet Serial mit 9600 Baud.loop()liest Sensoren überanalogRead(...).- Stop-Taste (
LOW) setztrunMode = 0, bremst (1480 µs) und zentriert die Lenkung. - Start-Taste (
LOW) setztrunMode = 1. - Wenn
runMode == 1: setzt Geschwindigkeit aufSPEEDund berechnet den Lenkwinkel.
- Servo Library:
arduino-libraries/Servo(sieheplatformio.ini)
- Wenn Servos/ESC nicht reagieren: Prüfe GND-Gemeinschaft, Pinbelegung, und ob der ESC ein neutrales Signal (typ. ~1500 µs) erwartet.
- Bei unerwarteter Bewegung:
MOTOR_SETUPmuss 0 sein, undSPEEDsollte konservativ gewählt werden.