RC Auto mit PS2 Controller

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:

Lenkungsschema

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.

Probleme

Unkontrollierte Tastendrücke

Beim Aufbau meines eigenen Testbeispiels hatte ich das Problem, dass immer mal wieder eine Meldung kam, dass alle Tasten gedrückt wurden. Nach Tests unterschiedlicher Optionen, einschliesslich der Anpassung der Clock in der Lib, habe ich heraus gefunden, dass es an den 50ms delay am Ende der Loop Funktion lag. Entfernt man diese scheint dem PS2 Empfänger das auslesen zu schnell zu gehen und es kommt zu fehlern.

Keine Funktion

Da ich die Verkabelung des Empfängers nicht selbst gemacht habe, ist dies kein Fehler der bei mir auftreten konnte, aber auf der Entwicklerseite der PS2x Bibliothek wird darauf hingewiesen, dass immer mal wieder Probleme bei der Verkabelung auftreten können. Hier der Link:

http://www.billporter.info/2011/03/27/arduino-playstation-2-controller-library-troubleshooting-guide/

Verwandte Links

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.