microrail - Eine Modellsteuerung
Der WLAN-Empfänger
123 15.03.2022
Inhaltsverzeichnis
Mission
Deltang Sender und Empfänger sind seit vielen Jahren mein Favorit für die Steuerung von Modellbahn-Fahrzeugen. Dabei kommt ausschließlich die extra dafür ausgelegte Rx6-Reihe zum Einsatz. Besonders gelungen finde ich folgende Kombination:
- Deltang Rx60, Rx61 oder Rx62,
- 3V Getriebemotor
- 1S LiPo-Akku
- optional einige LEDs zur Beleuchtung
Mit ca. 12 x 22 mm Abmessung sind diese Bausteine auch bei beengten Platzverhältnissen einsetzbar. Ausgerechnet diese bewährte Technik verschwindet vom Markt. Einen Lichtblick konnte ich bislang erkennen: Micron Radio Control möchte den Ausfall mit Eigenentwicklungen kompensieren. Ein erstes Produkt MR603 wurde angekündigt. Das Layout der Platine sieht ähnlich der Deltang-Produkte aus. Auch die weiterhin verfügbaren Deltang-Sender können verwendet werden.
Alternativen
Eine Alternative – vor allem für größere Maßstäbe – sind die Platinen von LocoRemote. Technologisch wird WLAN verwendet. Basis ist ein Lolin D1 mini Microcontroller auf Basis des Esp8266-Chipsatzes. Auf dem Microcontroller-Board steckt eine Motorplatine. Die Kombination dieser zwei Platinen reicht für eine WLAN-basierende Steuerung von Modellbahn-Fahrzeugen aus. Es gibt noch weitere Varianten, bei denen mehr als 2 Platinen übereinander gestapelt werden. Das ist bei höheren Spannungen und weiteren Funktionen wie Licht notwendig. Das Platinenlayout der Lolin-Komponenten finde ich besonders gelungen, denn die Platinen lassen sich übereinander stapeln.
Für die Steuerung eines Fahrzeugs wird ein WLAN-fähiges Endgerät (Handy, Tablet etc.) benötigt. Das Endgerät verbindet sich mit dem durch den Locoremote-Empfänger bereitgestellten WLAN und zeigt im Browser eine grafische Oberfläche an.
In meiner Modellbahnwelt ist so ein Handy-Regler kein tragfähiges Konzept. Es funktioniert, jedoch ist die Handhabung gewöhnungsbedürftig. Viel besser ist ein Handregler mit Knöpfen und einem Drehregler für die Geschwindigkeit. So ein Konzept wird von LocoRemote derzeit nicht unterstützt.
Die Bilder des Locoremote-Empfängers zeigen die Mini B-Variante für 3 bis 6 V. Die dritte Platine sorgt für Licht und weitere Ausgänge.
Microrail
Entstehung
Nach ersten Versuchen mit dem Mini B von LocoRemote gab es Einschränkungen bei den Lieferungen in die EU. Lange Zeit waren die Bausteine einfach nicht bestellbar.
Außerdem gibt es bereits länger WLAN-basierende Konzepte. Die Idee zu Microrail
stammt ursprünglich von Olle Sköld, der eine solche Steuerung
für seine Hectorrail-Lokomotive
vorstellte. Microrail
nutzt eine andere Hardware-Plattform sowie ein modifiziertes Bedienkonzept.
Auch die Idee des Handsenders stammt von ihm. Auf Thingiverse
stellte er einen Prototypen vor, der zwar eher als Idee statt einer fertigen Lösung zu verstehen ist,
jedoch als Basis für ein eigenes Konzept dienen kann.
Umfang
Microrail ist keine fertige Lösung in der Qualität von LocoRemote. Es ist vielmehr eine Hardware-Empfehlung und ein Stück Software. Der Nutzer muss selbst eine Entwicklungsumgebung aufsetzen, die endgültige Konfiguration (Namen, Parameter etc.) vornehmen sowie die Software auf den Microcontroller brennen. Die Hardware-Komponenten müssen selbst beschafft und verlötet werden. Etwas Löterfahrung für die kleinen Microcontroller-Platinen ist ebenfalls hilfreich.
Die Beschaffung der Hardware-Komponenten funktioniert unkompliziert (inkl. Steuer) über den Aliexpress-Lolin-Shop.
Hardware
Microrail verwendet eine Kombination des Lolin D1 Mini Microcontrollers mit einem Lolin-Motorshield.
Als D1 mini auf Basis des Esp8266-Chipsatzes verwende ich den Lolin D1 mini. Es gibt verschiedene Hardware-Versionen (derzeit 4.0), die jedoch für die Verwendung hier nicht relevant ist. Als Motor-Treiber werden I2C-Shields verwendet, die mit der Lolin-Treiberlib funktionieren. Zur Auswahl stehen derzeit:
- Lolin Motorshield V 2.0.0, TB6612FNG Chipsatz, schwer lieferbar
- Lolin Motorshield HR8833, HR8833 Chipsatz
- Lolin Motorshield AT8870, AT8870 Chipsatz
Die Platinen mit den HR8833 und AT8870 Chipsätzen sind seit 2022 neu und haben verschiedene Einsatzzwecke:
- HR8833: 3 bis 10 V, 1,5 A Motorstrom
- AT8870: 6,5 bis 38 V, 2 A Motorstrom
Im meinem Modellbau verwende ich ausschließlich die HR8833-Platine in Verbindung mit Ein- oder Zwei-Zellen-Akkus (LiIo oder LiPo).
Andere Motor-Treiber beispielsweise das Sparkfun Dual TB6612FNG können ebenfalls verwendet werden, wenn die Software entsprechend modifiziert wird. Die Verbindung zwischen Mircocontroller und Motorboard ist anders, der I2C-Bus wird nicht verwendet.
Schaltplan 1S Akku
Die Schaltung zeigt die Variante mit einem einzelligen LiPo/LiIo-Akku. Die Versorgungsspannung beträgt 3,7 - 4,2 V und liegt damit unter der Grenze von 5 V für den D1 mini. Am Ausgang D6 ist eine Status-LED angeschlossen, die nach erfolgreicher Initialisierung leuchtet. Der 100k Widerstand liegt am analogen Eingang an und dient zur Messung der Versorgungsspannung. Als Motor wird ein 3V Getriebemotor verwendet.
Schaltplan 2S Akku
Bei einem Zwei-Zellen Akku liegt die Versorgungsspannung im Bereich von 7,4 - 8,4 V. Zur Minderung der Spannung auf die erlaubten 5 V wird ein Power-Shield von Lolin verwendet. Im Prinzip ist das ein Step-Down-Regler, der auch durch andere gleichwertige Komponenten ersetzt werden kann. Das Motorshield wird aus dem Akku mit 7,2 V versorgt.
Software
Architektur
Die Software des Microcontrollers startet einen Webserver auf Port 80 zum Abruf der statischen Webseite (HTML, JavaScript und CSS). Aktionen wie Button-Behandlungen werden durch den Webserver nicht durchgeführt. Zusätzlich wird auf Port 81 ein Websocket-Server gestartet, der die bidirektionale Kommunikation mit dem Frontend übernimmt. Via Javascript werden die Aktionen in den Websocket-Kanal geschrieben und Statusänderungen empfangen. Ein- und Ausgabeelemente der Weboberfläche sind vollständig getrennt. Die Anzeigeelemente für Geschwindigkeit, Fahrtrichtung und Akkustandsanzeige werden ausschließlich durch den Rückkanal des Websockets gesetzt.
Funktionsbeschreibung
Während der Initialisierung werden folgende Schritte ausgeführt:
- Initialisierung Hardware-Pins (Analoger Eingang und LED-Ausgang)
- WLAN-Setup
- Setup Webserver
- Setup Websocket-Server
- Start mDNS-Dienst
- Start der zeitgesteuerten Tasks
- Initialisierung Motortreiber
- Status-Led on
Mit jeder Client-Verbindung wird ein Kanal im Websocket-Server geöffnet. Der Server lauscht auf Events. Button-Clicks in der UI führen zu Websocket-Events. Dabei werden die internen Werte für Geschwindigkeit und Richtung gesetzt. Halt setzt die Geschwindigkeit auf den Wert 0. Das Erhöhen bzw. Verringern der Geschwindigkeit erfolgt schrittweise verzögert. Ein Timer prüft alle 100 ms die Differenz zwischen aktueller und angeforderter Geschwindigkeit. Bei jedem Timer-Aufruf wird die aktuelle Geschwindigkeit um eine Schrittweite erhöht oder verringert bis zum Erreichen der Zielgeschwindigkeit. Ein Richtungswechsel ist nur bei Geschwindigkeit 0 möglich.
Die Websocket-Architektur hat den angenehmen Vorteil, dass bei mehreren angeschlossenen Mobilgeräten geänderten Werte für Fahrtrichtung und Geschwindigkeit an alle Clients gesendet werden - quasi eine Synchronisation.
Code und Entwicklungsumgebung
Sourcecode
Der Microrail
-Sourcecode liegt auf Github
Das Software-Projekt ist ein PlatformIO-Projekt. Zur Entwicklung und Übersetzung des Codes wird VS Code mit der Erweiterung PlatformIO benötigt. Nach dem Download des Codes kann der Projektordner mit VS Code geöffnet werden. Die Funktionen zum Übersetzen des Codes und Übertragen auf den Microcontroller sind in dem PlatformIO-Plugin enthalten. Mit der Arduino-IDE kann das Code-Projekt nicht ohne Aufwand geöffnet werden.
Code-Struktur
Der Code für die Steuerung ist in der Datei src/main.cpp
enthalten.
In src/config.h
werden Konfigurationsparameter definiert. Der Ordner data
enthält
alle Dateien des Frontends (Css, Javascript und HTML). Als CSS-Bibliothek
wird PureCSS verwendet. Der Web-Ordner data
wird als
Filesystem-Image in den Microcontroller geladen.
Konfiguration
In der Datei config.h
werden Einstellungen des Empfängers festgelegt. In einer
späteren Version werden diese Einstellungen im EPROM des Microcontrollers gespeichert
und sind über eine Ui im Browser anzupassen.
Folgende Einstellungen sind definiert:
ssid
undpassword
: WLAN-Einstellungen. Das Passwort muss eine Mindestlänge von 8 Zeichen besitzen.motor_frequency
: Frequenz zur Motoransteuerung. 100 Hz sind für Getriebemotoren üblich, während Faulhaber-Motoren mit 20 KHz betrieben werden können. Möglicherweise sind einige Versuche nötig, bis die optimale Frequenz gefunden wurde.motor_maxspeed
: Korrekturfaktor für Höchstgeschwindigkeit mit Wertebereich < 1. Dieser Wert dient zur Reduktion der Motordrehzahl bei zu schnell drehenden Motoren. Ein Wert von 0.8 reduziert die maximale Drehzahl auf 80%.motor_speed_step
: Schrittweite in % für die Erhöhung bzw. Verringerung der Geschwindigkeit. Ein Wert von 10 bedeutet, dass 10 Fahrstufen bis zum einem Maximalwert von 100 zur Verfügung stehen.
Start und Weboberfläche
Der Empfänger bootet, sobald Spannung anliegt. Der Start umfasst verschiedene Schritte. Am Ende
leuchtet die externe Status-Led und signalisiert die Betriebsbereitschaft.
Nach dem Start des Microrail
-Empfängers wird ein WLAN erzeugt. Ein Client verbindet
sich mit diesem WLAN und startet die Oberfläche über http://192.168.4.1 gestartet.
Ale Eingabe-Elemente stehen zur Verfügung:
- Fahrtrichtung vorwärts/rückwärts
- Geschwindigkeit erhöhen/verringern
- Stop
Die WebUi empfängt Ereignisse über den Websocket:
- WLAN-SSID
- Fahrtrichtung
- Geschwindigkeit in %
- Batteriespannung
- Software-Version
Bei Geschwindigkeiten > 0 kann die Fahrtrichtung nicht geändert werden. Die Buttons sind deaktiviert. Das Fahrzeug muss erst stoppen, bevor die Richtung geändert werden kann.
Aufbau
Die Platinen werden verlötet. Die Verbinder liegen den Hardware-Komponenten bei. Der rechte Aufbau zeigt die 2s-Variante mit dem zusätzlichen Step-Down-Regler.
Die folgenden zwei Bilder zeigen verschiedene Hardware-Varianten:
- links: Lolin D1 mini Version 4.0 mit Lolin HR8833-Motorshield
- rechts: Lolin D1 mini Version 3.1 mit Lolin 6612FBG-Motorshield Version 2.0.0
Akkutechnik
Im Rahmen der Microrail
-Entwicklung habe ich mich wieder einmal mit dem Thema
Spannungsversorgung beschäftigt. Bislang habe ich nur Akkus mit einer Zelle verwendet, um
dem Balancer-Problem beim Laden zu entgehen. Außerdem muss es für fest eingebaute Akkus
immer einen Ladeanschluss am Modell geben. Eine elegante Umgehung sind wechselbare
Akkus. Aber nur dann, wenn die Größe passt. Aufladbare LiIo-Rundzellen der Größe 18650
sind ein populäres Beispiel. Etwas kürzere Zellen sind im Format 18500 mit 50 mm
Länge verfügbar. Die Kapazitäten um die 1500 mAh passen optimal.
Für solch eine Zelle habe ich einen Batteriehalter konstruiert. Als Kontakte habe ich spezielle Federn verwendet.
Zum Laden der Zellen gibt es eine separate Komponente für den TP4056-Ladechip (siehe Artikel 84: „LiPo Ladeschaltungen und Steckverbindungen“). Die Platine passt genau in die Aussparung.
Beide Bauteile sind hier für den 3D-Druck abgelegt:
Downloads
- akkulader-18500.stl [455.36 KB]
- batteriefach-18500.stl [385.24 KB]
Ein Beispiel zur Anwendung für Mehr-Zellen-Akkus ist der Akkukasten einer Grubenlok B660 im Maßstab 1:13. Als Motor ist in den Bildern ein 6V-Getriebemotor zu sehen, der mit einer Spannung bis 9V betrieben werden kann.
Genau zwei Zellen vom Typ 18500 passen in einen Akkukasten. Im zweiten Akkukasten der Lok wird später Elektronik und Motor untergebracht.
Fazit
Microrail
in dieser ersten Version hat einen einfachen Funktionsumfang. Fahren
mit verschiedenen Fahrstufen in zwei Richtungen ist möglich. Weitere Funktionen
wie Licht u.a. sind derzeit nicht vorhanden. Das Projekt wird in einigen
Punkten weiterentwickelt, die Änderungen sind auf Github
verfolgbar.
Sollte etwas nicht wie beschrieben funktionieren, könnt ihr Issues in Github erstellen und damit das Projekt reifen lassen.
Die Steuerung des Microrail
-Empfängers über die Web-Oberfläche ist nur ein
erster Schritt. Das große Ziel ist ein eigenständiger Microrail
-Sender
mit Tasten, Drehregler und Display. Dieser Sender verbindet sich mit dem WLAN des
Empfängers und startet einen Websocket-Client zur Kommunikation.
Microcontroller auf Basis der Lolin D1-Serie sind bereits kleine Vertreter dieser Technologie. Dennoch ist die Gesamtgröße eines Bausteins riesig in Vergleich zum Deltang-Empfänger wie das nachfolgende Bild zeigt.
Die Zeit wird zeigen, ob diese Technologie geeignet ist. Vielleicht warten wir doch auf dem MR603a von Micron Radio Control oder verwenden weiterhin Restbestände.
Vorheriger/Nächster Artikel
Die Kommentarfunktion steht nicht mehr zur Verfügung. Für Fragen oder Diskussionen zum Artikel nutze die Matrix.