NRF RC Auto

Last Updated on 8. Oktober 2026 by sfambachLink-Status: OK

Basierend auf meinen nRF Beiträgen und mit Hilfe der Sunfounder Fernbedienung habe ich mir gedacht, es wäre doch nett hieraus ein ferngesteuertes Auto zu bauen. Dieser Beitrag beschreibt, was hieraus geworden ist.

Ansicht

Einsatzzwecke

  • Spaß für die Kinder und den Papa 😉

Stückliste

Auto

  • Fahrbarer Untersatz
  • Arduino Uno
  • Motorplatine V2
  • nRF24 Modul + Anschlussplatine
  • Spannungsversorgung (Akkupack)

Fernbedienung

  • Sunfounder Fernbedienungsplatine
  • Arduino Nano
  • nRF24 Modul
  • Spannungsversorgung (Lipo)

Grundlagen

Für die RF Kommunikation habe ich einen älteren Beitrag, auf den verwiesen sei. Dieser Beitrag enthält auch die Verkabelung des Arduino Uno mit dem nRF24 Modul.

Funk über 2.4 GHz nRF24L01 ModuleLink-Status: Unbekannt

Die Verwendung der Sunfounder Platine ist im folgenden Beitrag beschrieben. Dieser Beitrag kann für eine erste Funktionsprüfung der RF Kommunikation verwendet werden. Hier ist auch die Software für den Sender entstanden.

Sunfounder nRF24 FernbedienungLink-Status: Unbekannt

Zuletzt noch die Ansteuerung der Motorplatine.

Arduino Motor Platine V2Link-Status: OK

Schaltung

Die gelinkten Beiträge zeigen, wie die Schaltungen zu verdrahten sind. Die Motoren der Plattform werden für das aktuelle Projekt an der Motorplatine an M1 und M2 angeschlossen.

Programmierung

Bibliothek

Bitte die Bibliotheken aus den Beiträgen verwenden, diese wären:

Für meine Programme habe ich die RF Dateien in die entsprechenden Projektordner kopiert.

Testprogramm

Die beiden Programme für Sender und Empfänger können unter folgendem Link heruntergeladen werden:

Es folgen noch ein paar kleinere Anmerkungen zum Sender und zum Empfänger. Auch hier kein Anspruch auf Vollständigkeit. Sollte es Fragen geben, hinterlasst einen Kommentar.

Sender

Die folgenden Präprozessordefinitionen habe ich eingeführt, um evtl. Dreher in der Verkabelung und in der Haltung der Fernbedienung auszugleichen. Sind alle aktiviert, wird bei mir die Platine hochkant gehalten, so dass der Joystick unten und die RF Antenne oben ist.

#define SWAP_X_Y    // swap x and y axis
#define SWAP_X      // swap x axis up and down 
#define SWAP_Y      // swap y axis up and down 
  • SWAP X Y vertauscht die X und die Y Achse, also Geschwindigkeit und Lenkung
  • SWAP X vertauscht den positiven X Bereich mit dem negativen, also beispielsweise vorwärts mit rückwärts oder links mit rechts
  • SWAP Y macht das gleiche für die Y Ausrichtung des Joysticks.
Empfänger

Bei den ersten Fahrversuchen ist mir aufgefallen, dass die Lenkung entweder zu schnell oder zu langsam ist, aber irgendwie nie richtig funktioniert :(. Deshalb habe ich mal drei unterschiedliche Ansätze ausgearbeitet und mit den Werten wie Lenkfaktor (wie stark darf gelenkt werden) und Beschleunigung und Verlangsamung etwas herumgespielt:

  1. Verlangsamung des Rades in die Richtung, in die ich lenken möchte
    • nach links lenken = links verlangsamen
    • nach rechts lenken = rechts verlangsamen
  2. Beschleunigung des gegenüberliegenden Rades. Hier ist zu beachten, dass die maximale Geschwindigkeit um den maximalen Lenkfaktor vermindert werden muss, da sonst eine zu hohe Geschwindigkeit herauskommen kann.
    • nach links lenken = rechts beschleunigen
    • nach rechts lenken = links beschleunigen
  3. Beschleunigung und Verlangsamung gemeinsam. Auch hier
    muss die maximale Geschwindigkeit um den maximalen Lenkfaktor vermindert werden. Zudem, da die Lenkung sonst doppelt so schnell wäre, muss der Lenkfaktor noch halbiert werden.
    • nach links lenken = links verlangsamen/rechts beschleunigen
    • nach rechts lenken = links beschleunigen/rechts verlangsamen

Eine weitere Option mit Anpassung der Lenkung an die Geschwindigkeit (Adaptives Lenkverhalten) ist denkbar. Diese habe ich allerdings aus Zeitgründen (das Wochenende ist rum) nicht mehr angedacht/realisiert.

Die Klasse ist leider alles andere als vollständig, für die meisten Werte gibt es keine Setter/Getter. Die Grundeinstellungen basieren auf Versuchen mit meinem Untersatz, bei anderen könnten die Werte variieren. Viel Spaß beim Ausprobieren ;).

Ich verwende im Empfänger die Arduino map FunktionLink-Status: OK, diese ist ganz praktisch, um einen Wertebereich in einen anderen umzuwandeln.

Beispiel: 0-50 auf 0 – 5 => 0-10 = 0, 11-20 = 1 …

Da diese Funktion auch für negative Werte anwendbar ist, scheint sie in manchen Situationen etwas langsam. Im aktuellen Projekt war sie jedoch mit ein paar Tricks schnell genug.

Ausgabe

Die Ausgabe ist wenig spektakulär, dennoch hier ein kleines Video:

Kleine Testfahrt

So sieht es auf der Console des Empfängers aus:

Fazit

Es fährt noch nicht perfekt, auch die Handhabung mit nur einem Joystick ist alles andere als intuitiv, aber es geht. Jetzt lasse ich die beiden Testpiloten mal auf das Gespann los, mal schauen, was dabei herauskommt 😉

Probleme

Toter Bereich des Joysticks

Der Joystick hat einen toten Bereich, dies bedeutet, dass er nach rund 50% der Aussteuerung auf 100% der Ausgabe ist. Bei den restlichen 50% passiert dann nichts mehr. Hier ein externer Beitrag, der das besser beschreibt:

https://forum.arduino.cc/index.php?topic=520880.0Link-Status: OK

Ich habe versucht, dem Problem Herr zu werden, indem ich mit der Referenzspannung der AD Wandler herumprobiert habe. Leider ohne Erfolg.

Am Ende ist mir aufgefallen, wenn der Joystick in einer Ecke ist, beispielsweise x=0 y=0, dann ist er auch nicht auf vollem Ausschlag. Ich vermute, dass dies zu der Verkürzung führte.

RF Problem

Hierzu siehe die RF Beiträge hierLink-Status: Kaputt und hier.Link-Status: OK Mögliche Fehlerquellen sind die Verdrahtung oder die RF Bibliothek. Eine externe Spannungsversorgung kann auch helfen.

Empfänger reagiert stark verzögert

Die schon beschriebene Map Funktion scheint sehr rechenintensiv zu sein. Sollten viele Telegramme hereinkommen, kann es zu Verzögerungen bei der Abarbeitung kommen. Dies habe ich durch Verwerfen gleicher Telegramme ein wenig umgangen.

Sollten die Werte für x und y gleich den schon empfangenen sein, verwerfe ich das Telegramm.

Auf Senderseite versuche ich durch Testen der gemessenen Werte gegenüber den zuvor gemessenen Werten und einer definierten Toleranz für Ruhe zu sorgen.

Wenn
Gemessener Wert < ( Vorgänger + Toleranz)
und
Gemessener Wert > ( Vorgänger – Toleranz)
=> verwerfen.

Verwandte Beiträge

Quellen

http://tmrh20.github.io/RF24Link-Status: Kaputt

https://github.com/adafruit/Adafruit_Motor_Shield_V2_LibraryLink-Status: OK

https://www.instructables.com/id/Calibrating-a-Joystick-Potentiometer/Link-Status: OK

https://www.arduino.cc/en/Tutorial/AnalogInputLink-Status: OK

https://forum.arduino.cc/index.php?topic=520880.0Link-Status: OK

https://www.arduino.cc/reference/en/language/functions/math/map/Link-Status: OK

DatumÄnderungAutor
08.10.2026Überschriften-Hierarchie korrigiert (H1→H2, Unterebenen eine Stufe tiefer)sfambach
03.10.2026Rechtschreibung korrigiert: Tippfehler, Kommas, Grammatik, Groß-/Kleinschreibung
Log-Liste eingefügt
sfambach
26.05.2019Beitrag erstelltsfambach
Logbuch

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert