Last Updated on 6. April 2022 by sfambach
Ein neues Kit von schnellen Ali hat mich veranlasst ein ferngesteuertes Fahrzeug zu bauen. Das Kit besteht aus Arduino, einer Erweiterungsplatine und einem PS2 Controller nebst Empfänger.
Bestandteile
- Das Chassis des Fahrzeug bildet ein Kit vom schnellen Ali LINK. Dieses Kit enthält eine Acryl Plattform mit zwei Motoren, Räder und etwas Zubehör
- Zur Steuerung verwende ich das o.a. Kit LINK
- HC-SR04 Entfernungssensor
- 2 Servos
- Pan/Tilt kit ebenfalls vom schnellen Ali
- Diverse Schrauben
- 4 Pinheader Kabel, Buchse auf Stecker zum Anschluss des SR04
Ansicht
Grundlagen
Basis für dieses Projekt ist die Untersuchung des Steurungskit. welche im Folgenden gelinkt ist:
Zusammenbau
Der Zusammenbau ist eher langweilig. Die Servos und der SR04 werden einfach aufgesteckt und die Mortoren an den entsprechenden Klemmen angeschlossen. Sollte hier bedarf bestehen das näher zu erläutern, lasst einen Kommentar da.
Planung
Modi
Das Fahrzeug soll mehrere Modi besitzen, diese sollen über die Fernbedieunung aktiviert werden können. Aktuelle Modiliste:
- Ferngesteuertes Fahren
- Autonomes Fahren
- Nein – Pan/Tilt schüttelt den Kopfe
- Ja Pan/Tilt nickt
Belegung der Fernbedienung
- Die Modi sollen über die Formtasten rechts geschaltet werden. Hierfür werde ich ersteinmal den Kreis (Automatisch) und das Quadrat (Selbst fahren) verwenden.
- Für die Tasten links habe ich aktuell noch keine Verwendung.
- Beim linken Joystick wird nur hoch (vorwärts) und runter (rückwärts) verwendet
- Beim rechten Joystick verwende ich links und rechts für die Lenkung.
Lenkung
Da der Untersatz keine Lenkstange besitzt wird die Lenkung über unterschiedliche Geschwindigkeiten der beiden Angetriebs-Räder bewirkt. Mit der Erfahrung aus anderen Projekten habe ich mich entschlossen die Geschwindigkeit des Rades zu verlangsamen in dessen Richtung gefahren werden soll. Da dies nicht einfach über Schrift zu vermitteln ist hier ein Bild:
Es gäbe noch die Möglichkeit gleichzeitig die Geschwindigkeit des gegenüberliegend Rades zu beschleunigen, dies bringt jedoch ein paar Nachteile mit:
- Es muss ein Puffer zur Maximal Geschwindigkeit gehalten werden, sonst würde nichts am 2. Rad Passieren wenn das Fahrzeug auf Höchstgeschwindigkeit läuft. Dies würde das Fahrzeug wiederum bei der Geradeaus-Fahrt verlangsamen.
- Das Fahrzeug würde sich annähernd auf der Stelle drehen. Dies ist zwar für Computer gesteuertes Fahren einfacher zu berechnen, bewirkt beim ferngesteuerten Fahren aber ein komisches Verhalten.
- Die Drehung wäre schneller und weniger gut zu kontrollieren.
Programmierung
Bibliotheken
Die folgenden Bibliotheken verwende ich in diesem Beitrag. Der Einfachheit halber und um jeder Zeit eine funktionierende Konfiguration zu haben, befindet sich eine Kopie der Bibliotheken im Projektordner.
Motor
Für die Motorsteuerung verwende ich von Adafruit die Motor Lib V2.
https://github.com/adafruit/Adafruit_Motor_Shield_V2_Library
Diese wurde schon mal hier getestet und näher beschrieben.
Servo
Normal könnte man die Servos direkt anschliessen, ich habe sie, aus Interessen-Gründen, mal an den zwei zusätzlichen Ports angeschlossen. Diese können ebenfalls über eine Adafruit Bibliothek angesteuert werden.
https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library
HC-SR04
Um den Sonarsensor HC-SR04 ansteuern zu können nehme ich die „NewPing“ Bibliothek. Diese kann Timer gesteuert den SR04 abfragen und kommt auch mit einem Ergebnis zurück wenn der SR04 selbst streikt.
https://github.com/microflo/NewPing
PS2 Controller
Oh Überaschung auch für den PS2 Controller gibt es schon einen Bibliothek.
https://playground.arduino.cc/Main/PSXLibrary/
Controller Test
Es sollte erstmal sicher gestellt werden, dass der Controller auch richtig funktioniert. Somit hier erstmal das Testprogramm aus der Grundlagenforschung anwenden:
Fahrzeug Programm
Danach habe ich das Testprogramm genommen und die Autofunktionalität eingefügt:
Reset des Arduinos
Bei mir passiert es, dass bei starken Geschwindigkeits-Änderungen, der Arduino neu startet. Ich vermute dies liegt an Spannungsenken die durch die Motoren erzeugt werden. Hierfür habe ich aktuell noch keine Lösung.
Verwandte Links
- Pan Tilt mit Joystick
- OpenSmart Funk Joystick
- Funduino JOYSTICK V1.A
- Sunfounder nRF24 Fernbedienung
- Arduino PS2 Controller Platine Grundlagen
Quellen
https://playground.arduino.cc/Main/PSXLibrary/
https://github.com/microflo/NewPing
https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library
https://github.com/adafruit/Adafruit_Motor_Shield_V2_Library