microrail - Eine Modellsteuerung

Der WLAN-Empfänger


123 15.03.2022


Aus der Einstellung der Produktion von RX6-Empfängern bei Deltang folgt ein Versorgungsproblem für viele Modellbahner. Denn für die bewährten Steuerungschips gibt es keinen Nachfolger. Alternativen sind gefragt.


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:

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

Schaltplan für 1S Akku und 3 V Motor.
Schaltplan für 1S Akku und 3 V Motor.

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

Schaltplan für 2S Akku und 6 V Motor.
Schaltplan für 2S Akku und 6 V Motor.

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 und password: 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.

Batteriebox für 18500-Akku.
Batteriebox für 18500-Akku.

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.

Lader für 18500-Akku.
Lader für 18500-Akku.

Beide Bauteile sind hier für den 3D-Druck abgelegt:

Downloads

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.

Vergleich zwischen den Technologien: links Deltang und rechts Lolin D1 mini Microcontroller.
Vergleich zwischen den Technologien: links Deltang und rechts Lolin D1 mini Microcontroller.

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.