Arduino Fernsteuersender mit iRangeX Multiprotokollmodul

Der vorherige Blog beschreibt den Arduino-PPM-Encoder. Zusammen mit einem Multiprotokollmodul können Sie mit geringem Zusatzaufwand einen vollständigen Fernsteuersender aufbauen.

Dazu adaptieren Sie das Modul über ein Arduino-Prototyp-Shield. Es sind allerdings nicht alle Shields gleich geeignet. Einige Shields haben im unteren rechten Bereich kein Lochraster sondern ein spezifisches Layout wie die rote Leiterplatte im Bild. Sie benötigen aber ein Prototyp-Board mit vollständigem Lochraster wie die blaue Leiterplatte.

Arduino Prototyp Sields

Die elektrische Verbindung zwischen dem Arduino und dem Modul stellen Sie mit einer fünfpoligen Stiftleiste mit extra-langen Stiften her. Stecken Sie die Stiftleiste in die Buchsenleiste auf der Rückseite des Moduls ein. Positionieren Sie das Modul dann auf dem Prototyp-Shield und finden so die korrekte Position für das Modul und die Lötpunkte, die Sie verwenden müssen. 

Um einen sicheren Halt zu gewährleisten, habe ich noch zusätzlich Klettband vorgesehen. Da sich durch diese zusätzliche Zwischenlage die Höhe der Lötstifte nochmal verändert, können Sie die Stifte erst jetzt einlöten.

Die Verdrahtung zur Spannungsversorgung und für das PPM Signal entnehmen Sie dem Bild. Mit dem Aufstecken des Moduls ist der Aufbau abgeschlossen.

 

 

 

 

 

 

 

 

USB2PPM by Arduino

Meine bisherigen Blogs zur Verbindung eines Joysticks mit einer Modellfernsteuerung über USB haben immer einen meiner PiKoder verwendet. Aber natürlich kann auch ein Arduino die PPM-Signalerzeugung übernehmen. 

Zur Umsetzung dieser Idee habe ich einen Arduino Sketch USB2PPM_by_Arduino (Open Source) erstellt, den Sie auf Github finden. Das Programm implementiert einen PPM-Encoder, dessen Parameter und Kanalwerte über serielle Kommandos gesetzt werden.

So können Sie u.a. die Polarität des Ausgangssignals umschalten und die Zahl der PPM-Kanäle im Bereich von eins bis acht wählen, um den Encoder auf Ihren Sender anzupassen.  

Das PPM Signal finden Sie am Pin D8. Zur Verbindung mit dem Schülereingang Ihrer Modellfernsteuerung benötigen Sie dann noch ein entsprechendes Kabel. Möglicherweise ist es auch sinnvoll, ein Arduino – Prototyp – Shield zu verwenden, das eine geeignete Buchse aufnimmt, um eine stabile Verbindung sicher zu stellen. 

Für die Integration der PPM-Encoders in Ihre Anwendung entnehmen Sie die Definition der Kommandos und Nachrichten dem Headerfile protocol.h.  

Außerdem finden Sie im Microsoft Store die Joystick2PPM4Arduino App mit der Sie einen Joystick oder Gamepad (DirectX-fähig) verwenden, um den Arduino-PPM-Encoder anzusteuern. Die App arbeitet mit dem Arduino Uno, Nano und Micro Pro. 

Open Source Arduino Digital RC Fernsteuersender

Der Sketch ArduinoDTX implementiert einen hochwertigen RC Fernsteuersender auf einem Arduino. Im Gegensatz zu traditionellen Fernsteuerungen erfolgt jedoch die Kodierung der Kanalinformationen nicht mit PPM-Signalen, sondern rein digital auf Basis des miniSSC-Protokolls. Zur Kommandoübertragung wird dann nur noch eine transparente serielle Verbindung wie Bluetooth, Wifi oder XBee benötigt. Als Empfänger kommt beispielsweise bei Bluetooth ein PiKoder/SSC RX zum Einsatz.

Der Sketch für den Sender basiert auf dem Open Source Projekt arduinorc von Richard Goutorbe. Damit stehen Leistungsmerkmale wie:

  • bis zu 9 Proportional-Kanäle (Nano, bei Uno maximal 6 Kanäle)
  • bis zu 6 zusätzliche Schaltkanäle
  • 9 Modellspeicher
  • Dual Rate und Exponential Schalter
  • Throttle Cut als Sicherheitsfunktion
  • 2 programmierbare Mixer
  • Justagemöglichkeiten für Endpositionen, Steuerknüppel und Servos
  • Throttle Sicherheitscheck beim Programmstart
  • Optionale Batterieüberwachung mit Alarm
  • Programmierbar unter Windows und Linux über USB-Schnittstelle und Terminalapplikation

Der arduinorc-Sketch wurde zum ArduinoDTx modifiziert, der am Arduino Ausgang D6 nun alle Kanalinformationen im miniSSC-Protokoll ausgibt. Dabei wird jedesmal dann ein Kommando erzeugt, wenn sich die Position eines Steuerknüppels verändert hat. Die PPM-Ausgabe ist komplett entfallen.

Der ArduinoDTx Sketch (.ino-Datei) ist Open Source und wird über ein entsprechendes github Repository unter den Bedingungen der GNU General Public License Version 3 zur Verfügung gestellt.

Digitale Vierkanal-Fernsteuerung

Schematischer Aufbau Arduino Digital RC

Als konkretes Anwendungsbeispiel soll nun eine digitale Fernsteuerung mit vier Kanälen realisiert werden. Der Aufbau des Prototypen ist im Bild oben dargestellt. Die zwei Thumb-Joysticks belegen die Anschlüsse Pot 1/2 und Pot 3/4 gemäß des oben dargestellten Schaltbildes. Die Verbindung zu den Analogpins des Arduino wird über ein Prototyp-Shield hergestellt. Dieses nimmt praktischerweise auch den Mode-Schalter und die LED mit ihrem Vorwiderstand von 270R auf.

Die Fernsteuerung ist für Batterieversorgung ausgelegt. Um auch beim Einsatz von Akkus mit einer Nennspannung von 1,2 V die erforderliche Mindestbetriebsspannung des Arduino von 6 V zu erreichen, wurde ein Batteriehalter für 5 AA – Zellen vorgesehen. Die beiden seitlichen Brettchen dienen zum Abstützen der Handflächen und erleichtern die Bedienung ganz erheblich.

Die USB-Schnittstelle des Arduino ist bei diesem Aufbau sehr gut zugänglich, so dass Firmware geladen werden kann und die spezifische Anwendungsparametrierung möglich ist.

Inbetriebnahme und Test

Testaufbau Arduino Digital RC

Die Inbetriebnahme beginnt mit dem Download des aduinodtx Sketch (.ino-Datei), der über ein entsprechendes github Repository zur Verfügung gestellt wird. (Hinweis: zur Übersetzung des Sketches wird die Arduino Library “TimerOne” benötigt).

Nach dem erfolgreichen Upload des Sketches in den Arduino, kann die Funktion der Fernsteuerung am einfachsten mit dem im Bild dargestellten Aufbau einer drahtgebundenen Fernsteuerung getestet werden. In der Standardkonfiguration der Software werden durch die Pots 1 – 4 die entsprechenden Servokanäle 1 – 4 angesteuert.

Sind spezifische Anpassungen und Modelldefinitionen vorgesehen, dann sind diese gemäß der arduinorc-Beschreibung vorzunehmen: Alle Kommandos zur Programmierung der Fernsteuerfunktionen des arduinorc sind weiterhin verfügbar (Kommando Dokumentation).

Erweiterung auf Bluetooth

Bluetooth Shield Konfiguration für Arduino Digital RC

Die digitale Fernsteuerung kann mit einem ITEAD-Bluetooth Shield und einem PiKoder/SSC RX  als Empfänger mit einfachen Mitteln zu einer drahtlosen Fernsteuerung ausgebaut werden. Da die Übertragung transparent geschieht, sind keine Anpassungen der Arduino-Software gegenüber der drahtgebundenen Version vorzunehmen und es steht der volle Funktionsumfang der Fernsteuerung zur Verfügung.

Der prinzipielle Aufbau des Senders ist im Bild dargestellt. Vor der erstmaligen Inbetriebnahme ist die Verbindung zwischen den beiden Bluetooth-Modulen zu konfigurieren. Das PiKoder/SSC RX User Manual, das von der PiKoder/SSC RX Seite heruntergeladen werden kann, beschreibt die notwendigen Schritte im Detail.

Erweiterung auf WLAN

Die digitale Fernsteuerung kann mit einfachen Mitteln auch auf WLAN hochgerüstet werden. Die Beschreibung hierzu finden Sie im Beitrag WLAN Modellfernsteuerung mit Arduino

Weitere Anwendungsbeispiele

Um größere Reichweiten zu erzielen, kann die digitale Fernsteuerung alternativ auch auf XBee umgestellt werden. Der Aufbau wird in einem weiteren Beitrag Modellfernsteuerung mit Arduino über XBee erklärt.

WLAN Modellfernsteuerung mit Arduino

Der Open Source Arduino Sketch arduinodtx implementiert die Bedieneroberfläche und die Bedienelemente für einen leistungsfähigen Modellfernsteuerungssender mit einem seriellen Kommandoausgang (PiKoder/SSC bzw. PiKoder/PPM kompatibel). Für die Kommandoübertragung zum PiKoder wird ein transparenter serieller Kommunikationskanal benötigt.

Soll WLAN als Übertragungsweg genutzt werden, dann kann ein solcher Kanal senderseitig mit einem ESP8266-01 Modul realisiert werden; als Empfänger kommt ein PiKoder/SSC wRX zum Einsatz.

In diesem Fall werden neben den Basiskomponenten wie Steuerknüppeln, Schalter, etc., die zum Aufbau des arduinodtx-basierten Fernsteuersenders erforderlich sind, ein Logic Level Umsetzer von 5 auf 3,3 Volt, zwei Jumper zur Umschaltung der seriellen Kommunikationsschnittstelle (UART-Multiplexer) und ein ESP8266-01 Modul benötigt wie im Beitragsbild dargestellt. Die Verdrahtung entnehmen Sie dem folgenden Schaltbild (die Signale mit gleicher Bezeichnung müssen verbunden werden, Signale in blauer Schrift sind mit den entsprechenden Arduino-Signalen zu verbinden):

Der Aufbau ist relativ einfach und sollte problemlos auf einem Prototyp-Board erfolgen können.  

Im nächsten Schritt ist der ESP8266-01 als Access Point mit seriellem Ausgang zu programmieren – die Beschreibung hierzu finden Sie im Blog ESP8266-01 Sketch für den PiKoder/SSC wRX. Wollen Sie den ESP8266-01 im “eingesetzten Zustand” programmieren, dann müssen Sie die dargestellte Schaltung um einen Programmierteil erweitern:

Bitte beachten Sie auch die Jumperstellung für D0/D1. Zusätzlich sollte bei jeder direkten Kommunikation mit dem ESP8266-01 der Arduino “stillgelegt” werden (RESET Leitung auf GND legen), so dass die Datenübertragung nicht gestört wird.

Mit dem erfolgreichen Abschluss der Programmierung des ESP8266-01, dem Umstecken der Jumper, Aufwecken des Arduino und einem Reboot ist die Modellfernsteuerung betriebsbereit. 

 

ESP8266-01 mit Arduino Due programmieren

Im meinem Blog zur Modellfernsteuerung mit Webbrowser habe ich bereits einen Programmieradapter für den ESP8266-01 vorgestellt.  Die Schaltung kann vereinfacht werden, wenn man einen Arduino Due einsetzt.

Der Arduino Due basiert im Gegensatz zu den meisten anderen Arduino Boards auf einem Controller mit 3,3 Volt Logik und kann daher zwei Funktionen übernehmen:

  • USB zu UART Adapter mit 3,3 V Ausgangspegel
  • Spannungsquelle für die vom ESP8266 benötigten 3,3 V

Das Verdrahtungsschema ist im Titelbild für diesen Beitrag  dargestellt. Zusätzlich ist zu beachten, dass der Arduino Controller “still zu legen” ist, damit er die Programmierung des ESP8266 nicht stört. Hierzu wird der Reset des Due fest mit GND verbunden.

Der praktische Aufbau des Programmieradapters kann auf einem Prototyp-Board erfolgen.

Hierbei wird der ESP8266-01 über einen Breakout-Adapter verbunden, da der Stecker nicht für den Einsatz in einem Prototyp-Board geeignet ist.

Arduino Pic Programmer

Übersicht

Es gibt diverse Bauanleitungen zu Pic Programmern im Internet. Diese benötigen jedoch oftmals entweder eine der inzwischen ausgestorbenen seriellen oder parallelen Schnittstellen oder einen bereits programmierten Controller – und setzen damit wiederum einen Programmer voraus.

Einen interessanten dritten Weg bietet die Verwendung eines Arduino als Controller (s. ArdPicProg). Mit dem Arduino Sketch “ProgramPic”, einem PC-Programm und mit einer sehr überschaubaren Anzahl von Bauteilen wird der Arduino mit wenig Aufwand zum Pic Programmer, der neben einem Programmiersockel auch eine ICSP- und eine ICD-2 (RJ-11) Schnittstelle bietet. Alle erforderlichen Lösungskomponenten einschließlich der Hardware Dokumentation sind als Open Source sowie als Bausatz verfügbar.

Einen weitergehenden Eindruck zum Aufbau und dem Einsatz des ArdPicProg sowie einen Überblick der unterstützten Controller bietet der User’s Guide (in Englisch).

Host-Software für ArdPicProg

Zur Programmierung eines Pic Controllers wird ein Host Program benötigt. Hierzu stehen zwei Programme zur Verfügung: das zeilenorientierte Programm “Ardpicprog” oder das Programm “Arduino Pic Programmer (ArdPicProgHost)” mit einer grafischen Bedieneroberfläche. Beide Programme sind als Open Source auf Github verfügbar.

Arduino Pic Programmer (ArdPicProgHost)

Das Programm bietet die Möglichkeit zur zeitgemäßen und intuitiven Bedienung des Arduino Pic Programmers über eine Windows-Bedieneroberfläche.

Pic-Controller, die der Arduino Programmer unterstützt, können ausgelesen, gelöscht und programmiert werden. Die Programmbedienung ist ebenfalls im User’s Guide erläutert.

ArdPicProgHost ist Open Source und wurde mit Microsoft VB2010 Express realisiert. Der Source Code wird unter den Bedingungen der GNU General Public License Version 3 über ein entsprechendes Github Repository zur Verfügung gestellt. Die aktuelle ablauffähige Version dieses Programms (Release 0.2.7) für Windows 7 ArdPicProgHost.exe kann hier heruntergeladen werden:

 

Eine Softwareinstallation ist nicht erforderlich: nach dem Download und dem Auspacken des Programms kann dieses direkt ausgeführt werden.

PicProgHost (Terminalprogramm)

Das Programm PicProgHost basiert auf dem Open Source Projekt Ardpigprog, ist auf den ArdPicProg-Projektseiten dokumentiert und dort auch als Open Source verfügbar.

Der Sourcecode wurde inzwischen in Qt 5 migriert und die aktuelle Version 1.0 unterstützt nun auch die COM ports > 9. Die ablauffähige und aktuelle Programmversion für Windows 7 kann hier heruntergeladen werden:

 

Der Sourcecode ist im PicProgHost github Repository verfügbar. Die Programmparameter sind rückwärtskompatibel zu Ardpicprog und daher ebenfalls den ArdPicProg-Projektseiten zu entnehmen.

Eine Programminstallation ist nicht erforderlich. Die Programmbedienung wird ebenfalls im User’s Guide erläutert.

Arduino Sketch “ProgramPic”

Der Sketch “ProgramPic” ist im ProgramPic github Repository verfügbar.

ArdPicProg Leiterplatte

Im Shop können Sie die unbestückte Leiterplatte erwerben und die Bauanleitung herunterladen.

Modellfernsteuerung mit Webbrowser – verbesserte Bedieneroberfläche

Vor einigen Tagen bin ich auf das ESP8266 MikroE Buggy Projekt gestoßen.

In diesem Projekt wird ein Webserver auf dem ESP8266 implementiert – ähnlich wie in meinem Blog Modellfernsteuerung mit Webbrowser. Damit kann dann ebenfalls eine Betriebssystem-neutrale Fernsteuerung realisiert werden. Besonders interessant an diesem Projekt ist allerdings die einfache HTML5 Oberfläche, mit der ein Joystick realisiert wird.

 

Die Software ist Open Source und so konnte ich das Programm für den Einsatz in einem PiKoder/SSC wRX umstellen. Zusätzlich habe ich den Code so verändert, dass ein normales Fahrzeug mit einem Motor- und einem Richtungskanal gesteuert werden kann. Der angepasste Source Code steht in einem github Repository zur Verfügung.

Die Programmierung des ESP8266 ist ebenfalls im Blog zur Modellfernsteuerung mit Webbrowser beschrieben. Eine zusätzliche Besonderheit des ESP8266 MikroE Buggy Projekts besteht darin, dass das Arduino Filesystem benutzt wird. Die Installation und Benutzung ist hier beschrieben.

 

 

ESP8266-01 Sketch für den PiKoder/SSC wRX

Der PiKoder/SSC wRX verwendet das ESP8266-01 als Access Point (AP) zur Realisierung einer transparenten seriellen Kommunikation. Diese Anforderung lässt sich mit der Konfiguration über AT-Befehle realisieren. Allerdings ist dieser Weg unnötig kompliziert und aufgrund der zahlreichen Eingaben fehlerträchtig. Hinzu kommt, dass sich das Parametrierungsergebnis nur schwer verifizieren lässt und für Änderungen eine Neuprogrammierung des ESP8266 erforderlich ist.

Wesentlich einfacher ist es, den ESP8266-01 mit einem Sketch zu laden, der hinsichtlich der seriellen Kommunikation die identische Funktion realisiert und zusätzlich mit einigen effektiven Kommandos die Einstellung der benötigten AP-Parameter ermöglicht.

Der benötigte Sketch udpRC_ESP8266-01 ist Open Source und steht in einem github-Repository zum Download bereit. Die Firmware wird über das Arduino IDE, wie im Beitrag Modellfernsteuerung mit Webbrowser beschrieben, in den ESP geflasht.

Die Bedienung ist denkbar einfach. Beim ersten Start überprüft das Programm den Speicher des ESP8266, ob bereits ein gültiger Parametersatz vorliegt. Ist dies nicht der Fall, dann werden die Defaultwerte abgelegt. Nach einem erneuten Start ist der Controller dann mit Defaultwerten einsatzbereit.

Der Screenshot zeigt die Bedienung und die verfügbaren Kommandos. Nach dem Reset meldet sich der ESP8266-01 mit einigen unlesbaren Zeichen, die die Betriebsbereitschaft anzeigen.

Mit dem Kommando ‘$?<cr><lf>’ wird der aktuelle Parametersatz abgefragt und ausgegeben. Die SSID des AP wird mit dem Kommando ‘$s=’ gefolgt von <cr><lf> geändert und zur Veränderung des Passwords wird ‘$p=’ eingesetzt. Die neuen Parameter werden zwar direkt abgespeichert aber erst nach einem Neustart verwendet. Nach erfolgreicher Parametrierung können die geänderten Einstellungen jederzeit mit ‘$?<cr><lf>’ abgefragt werden.

Modellfernsteuerung mit Arduino über XBee

Durch die Kombination der Arduino-basierten digitalen Open Source Fernsteuerung arduinodtx mit einem intelligenten Servocontroller wie dem PiKoder/SSC, einem XBee Shield und einem XBee Modul entsteht eine hochwertige Modellfernsteuerung.

Hierbei wird eine transparente Übertragung eingesetzt, so dass keine Anpassungen an der Arduino Software oder der PiKoder/SSC Firmware erforderlich sind; es steht der volle Funktionsumfang der Fernsteuerung zur Verfügung.

Der prinzipielle Aufbau des Senders mit der Jumperstellung für das Arduino XBee Shield ist im Bild unten dargestellt, die Verdrahtung der Steuerknüppel entspricht dem Aufbau auf der arduinodtx Webseite.

xbee-digital-rc_404p

Der Aufbau des kompletten Empfängers bestehend aus dem XBee-Breakout Adapter, dem PiKoder/SSC und einem Spannungswandler zur Erzeugung der benötigten 3,3 Volt Versorgungsspannung sowie die Programmierung der XBee Module ist in der PiKoder/SSC Application Note #3: XBee Communication detailiert beschrieben.

complete-receiver-unit

Prototyp Empfängeraufbau

Modellfernsteuerung mit Webbrowser

Ein Fernsteuermodell, dessen Empfänger als Access-Point konfiguriert ist und einen Webserver anbietet, kann mit einem Webbrowser von einem Smartphone aus ferngesteuert werden.

Als Hardwareplattform zur Implementierung dieses Konzepts bietet sich der PiKoder/SSC wRX an (s.u.): der ESP8266-01 realisiert den Access Point und den Webserver, der PiKoder/SSC übernimmt die zeitkritische Ansteuerung der Modellservos.

pikoder_ssc_wrx-catalogue-image-png

PiKoder/SSC wRX

In der Standardkonfiguration des PiKoder/SSC wRX wird der ESP8266-01 als transparente Brücke verwendet. Da zur Modellfernsteuerung mit dem Browser ein Webserver benötigt wird, ist der Wifi-Controller mit neuer Firmware zu laden. Hierzu kommt das IDE des Arduino zum Einsatz, das inzwischen auch generische ESP8266 Boards unterstützt.

Der benötigte Sketch ist Open Source und wird über das github Repository makerprojects/httpRC verteilt. Laden Sie den Sourcecode herunter und öffnen den Sketch mit dem Arduino IDE. Am Anfang des Programms finden Sie Hinweise zu den benötigten Boardeinstellungen. [Update 28.12.2018: Der httpRC Sketch wurde komplett überarbeitet. Die zugehörige Beschreibung finden Sie hier.]

Der ESP8266-01 kann zum Flashen nur über einen USB-Serial-Umsetzer mit dem PC verbunden werden, da er nicht über eine USB-Schnittstelle verfügt. Hierbei ist zusätzlich zu beachten, dass das Modul eine Spannungsversorgung und Signalpegel von 3,3 Volt benötigt; der direkte Anschluss von 5 Volt zerstört die Leiterplatte! Da diese Kombination bei USB-Serial-Umsetzern nicht ganz alltäglich ist, wird üblicherweise ein Umsetzer mit 3,3 Volt Signalpegel und einem 5 Volt Spannungsausgang gewählt wie beispielsweise der bei Ebay erhältliche PL2303TA und eine zusätzliche Spannungsanpassung mit einem 3,3 Volt Regler vorgesehen.

usb-connector-ebay

USB-Serial Umsetzer

Da man zum Flashen außerdem noch einen Reset-Taster und einen Programmiertaster benötigt, baut man sich zweckmäßigerweise einen entsprechenden Adapter auf einer Lochrasterplatine auf.

programmieradapter-esp8266

Programmieradapter für den ESP8266-01

Der Schaltplan für den eigentlichen Programmierteil ist in der folgenden Schaltung dargestellt.

esp8266_flash_prog_board_sch

Die Erzeugung der ebenfalls benötigten 3,3 Volt kann genauso wie beim PiKoder/SSC wRX mit einem Standard-Lowdrop-Spannungsregler LF 33 CV erfolgen (s. Schaltplanauszug; die 5 Volt vom USB-Serial-Adapter werden rechts angeschlossen, der Ausgang ist auf der linken Seite.

spannungsanpassung

Leider startet die Programmierung des ESP8266 nicht automatisch wie man dies vielleicht vom Arduino gewöhnt ist, sondern ist manuell einzuleiten. Hierzu werden der RST und der PROG Taster gleichzeitig gedrückt und der RST-Taster bei noch gedrücktem PROG-Taster losgelassen. Wenn danach dann auch der PROG-Taster losgelassen wird, befindet sich das Modul im Programmiermodus. Nun kann das Upload gestartet werden und nach der erfolgreichen Programmübersetzung wird die neue Firmware aufgespielt. Bevor das Modul eingesetzt werden kann, ist ein weiterer Reset erforderlich.