Inhaltsverzeichnis
Übersicht
Nicht alle Modellbahnen stammen aus den Schachteln großer Hersteller oder fahren mit 12V Schienenstrom bzw. digital. In größeren Maßstäben ab 1:22,5 bauen viele Modellbauer ihre Fahrzeuge selbst und entwickeln eigene Antriebskonzepte. Eine spannende Alternative ist das Fahren ohne Schienenstrom. Dafür sprechen mehrere Gründe. Es entstehen keine komplizierten Verkabelungen und es gibt keine Kontaktprobleme. Zudem ermöglichen sogar 3D-gedruckte Gleise diese Methode.
In ein solches Fahrzeug müssen neben dem Empfänger und dem Motor auch Batterien für die Spannungsversorgung eingebaut werden. Es ist vorteilhaft, wenn die Systemspannung niedrig ist, da so weniger platzraubende Batteriezellen nötig sind. Lithium-Ionen- oder Lithium-Polymer-Akkus mit einer Zellenspannung von 3,7V haben sich in der Praxis bewährt. Eine Zelle reicht für einen 3V-Motor, zwei Zellen sind für einen 6V-Motor erforderlich. Ich selbst baue überwiegend Feldbahn-Fahrzeuge mit 3V-Getriebemotoren.
Früher zählten die Deltang-Funkempfänger zu meinen Favoriten. Leider sind sie nicht mehr verfügbar, und es werden Alternativen gesucht. Der Artikel Microrail auf feldbahn22.de erklärt die Idee und Motivation hinter diesem Empfänger-Baustein ausführlich. Beachte bitte: Die Schaltpläne auf der genannten Seite sind nicht aktuell!
Hardware
Microcontroller
Der Microrail-Empfänger nutzt den Microcontroller D1 mini von Lolin zusammen mit den passenden Shields. Dieser Microcontroller beruht auf dem ESP8266-Chip und bietet folgende Eigenschaften:
- Single-Core Tensilica Xtensa LX106 32-bit Microcontroller mit einer Taktfrequenz von 80 MHz oder 160 MHz.
- 4 MByte Flash-Speicher
- 1 ADC (Analog/Digital Converter)
- 3,3V Betriebsspannung
- 2,4 GHz WLAN (Antenne auf der Platine)
Der D1 mini verfügt über einen USB-C Anschluss zur Verbindung mit einem PC. Darüber lässt sich der Programmcode übertragen.
Wichtiger Hinweis
Für die Expressif ESP8266-Plattform existiert eine Vielzahl unterschiedlicher Platinen und Boards. Nur der Lolin D1 mini ist mit dem Programmcode kompatibel. Bei anderen ESP8266-Boards ist die Funktionsfähigkeit der Software nicht garantiert.
Motor-Shield
Ein weiteres wesentliches Element stellt die Treiber-Platine für den Motor dar. Auch bei dieser ist die Software auf spezielle Bausteine abgestimmt.
- Lolin Motorshield HR8833, HR8833 Chipsatz, 3-10V / 1,5A
- Lolin Motorshield AT8870, AT8870 Chipsatz, 6,5-38V / 2A
Beide Platinen nutzen die gleiche Ansteuerung, daher kannst du zunächst beliebig auswählen. Die beiden Motorshields existieren erst seit kurzem. Zuvor gab es eine ältere Variante namens Lolin Motor V2.0.0, die ebenfalls kompatibel ist.
Spannungsversorgung
Für den Betrieb des D1 mini und des Motorshields spielt die Versorgungsspannung eine wesentliche Rolle. Der Microcontroller D1 mini arbeitet intern mit 3,3V und steuert damit auch die Motorshields. Er besitzt extern einen 5V-Anschluss, entweder über Pins oder USB. Von dort wandelt er die Spannung in 3,3V um. Die Eingangsspannung an diesem Anschluss kann zwischen 3,5V und 5V betragen. Dieser Bereich eignet sich perfekt für Ein-Zellen LiPo- oder LiIo-Akkus (3,7 - 4,2V) sowie 3 alkalische AAA-Zellen mit einer Spannung von 4,5V.
Das Motorshield eignet sich auch für Motoren mit höheren Spannungen. Das Lolin Motorshield HR8833 arbeitet zwischen 3 und 10 V, während das Lolin Motorshield AT8870 Spannungen von 6,5 bis 38 V unterstützt. Lediglich der Motorausgang benötigt die hohe Spannung. Die Steuerung zwischen Microcontroller und Motorshield erfolgt über 3,3 V.
Wird das Gesamtsystem mit mehr als 5V betrieben, etwa bei 6V oder 9V Motoren, benötigt der D1 mini dennoch 5V. Dafür braucht man einen Step-Down-Regler, der die höhere Spannung auf 5V reduziert. Eine Option ist das Lolin DC Powershield. Es passt die Eingangsspannung zwischen 7 und 24V auf die benötigten 5V an.
Hinweis
Die Microrail-Software ist exakt für diese Hardware konzipiert. Andere ESP8266-Boards oder Motoren-Boards benötigen Software-Anpassungen, um zu funktionieren.
Aufbau
Varianten
Der spezifische Schaltplan richtet sich nach dem verwendeten Motor. Seine Spannung und Leistung bestimmen die Auswahl des Motorshields. Ich sehe drei sinnvolle Varianten:
Akku | Motor | Komponenten | |
---|---|---|---|
A: | 1S (3,7 - 4,2V) | 3V Motor | D1 mini, HS8833 |
B: | 2S (7,4 - 8,4V) | 6V Motor | D1 mini, HS8833, Powershield |
C: | 3S (11,1 - 12,6V) | 12V Motor | D1 mini, AT8870, Powershield |
Bei den Akkus bedeuten die Angaben:
- 1S: Ein-Zellen Lithium-Ionen- oder Lithium-Polymer-Akku (LiIo- bzw. LiPo-Akku)
- 2S: Zwei-Zellen Lithium-Ionen- oder Lithium-Polymer-Akku (LiIo- bzw. LiPo-Akku)
- 3S: Drei-Zellen Lithium-Ionen- oder Lithium-Polymer-Akku (LiIo- bzw. LiPo-Akku)
Für die Varianten B und C ist jeweils ein Powershield (Step-Down-Regler) zur Spannungsreduzierung notwendig.
Bei meinen Modellbauten verwende ich nur die Varianten A und B.
Materialiste
Für den Microrail-Empfänger werden folgende Materialien benötigt:
- 1 Lolin D1 mini
- 1 Lolin Motorshield HS8833 für Varianten A, B oder Lolin Motorshield AT8870 für Variante C
- 1 Lolin DC Powershield für Varianten B, C
- 1 Widerstand 1 MOhm
- 1 Widerstand 560 Ohm als Led-Vorwiderstandard
- 1 Led zur Anzeige des Status
- Kleinteile: Stiftleisten, Kabel und Schrumpfschläuche
Eine gute Vereinfachung ist der Einsatz von fertig konfigurierten LEDs mit Widerstand und Anschlussleitungen. Diese LEDs sind in verschiedenen Größen und Farben bei AliExpress erhältlich. Die von mir getesteten grünen LEDs verbrauchen wenig Strom, leuchten aber trotzdem sehr hell. Für eine Status-LED ist die Helligkeit zu intensiv. Deshalb trage ich auf das transparente Gehäuse eine Schicht dunkler Farbe auf.
Schaltpläne
Im Folgenden präsentiere ich zwei Schaltpläne für die Varianten A und B. Bei Variante C kommt das anderes Motorshield zum Einsatz.
Variante A (eine Akkuzelle)
Eine Zelle eines LiIo- oder LiPo-Akkus liefert eine Spannung zwischen 3,5V und 4,2V. Die Spannung verringert sich je nach Ladezustand der Zelle. Der Lolin D1 mini kann mit dieser Spannung direkt betrieben werden. Der Spannungsregler auf dem Microcontroller-Board reduziert die Eingangsspannung auf 3,3V.
Laut Schaltplan verbindet man die beiden Platinen. Das Motor-Board bietet zwei Motor-Ausgänge, die in der Software parallel geschaltet sind. Neben den beiden Platinen benötigt man nur wenige andere Bauteile. Ein Widerstand mit einer Größe von 1 MOhm dient als Spannungsteiler für den analogen Eingang des Microcontrollers. Er sorgt für die Spannungsmessung der Akkuzelle. In der grafischen Oberfläche wird der Wert angezeigt. Zudem schließt man eine Status-LED mit Vorwiderstand an. Diese kann außen am Fahrzeug sichtbar befestigt werden und zeigt den Betriebsstatus an. Nach der vollständigen Initialisierung des Empfängers leuchtet die LED dauerhaft.
Das Layout der Lolin-Platinen erleichtert den Aufbau erheblich. Man kann sie übereinander platzieren und verbinden. Die entsprechenden Stiftleisten sind im Lieferumfang der Bauteile enthalten. Die Anschlussbelegung bleibt bei allen Platinen gleich. Dies gilt auch, wenn nicht alle Pins auf den Boards angeschlossen sind. Der Zusammenbau beider Platinen ergibt eine Höhe von etwa 12 mm.
Variante B (zwei Akkuzellen)
Zwei Akkuzellen liefern eine Spannung zwischen 7V und 8,4V. Diese Spannungsquelle passt ideal für 6V- oder 9V-Motoren. Da die Eingangsspannung über 5V liegt, muss man die Spannung für den Microcontroller herabregeln. Das Lolin DC Powershield übernimmt diese Aufgabe. Der Step-Down-Regler arbeitet in einem Spannungsbereich von 7 - 24V und bietet 5V Ausgangsspannung. Er behält das gleiche Platinen-Layout wie der D1 mini und das Motor-Shield. So ermöglicht er eine weitere Huckepack-Anordnung.
Durch die dritte Platine wächst die Höhe des Bausteins auf 15 mm.
Variante mit anderen Spannungen
Die vorgestellten Konfigurationen mit einer oder zwei Akkuzellen sind nicht die einzigen Varianten. Allgemein braucht man zwei Spannungen, die unterschiedlich sein können. Für den Microcontroller werden 5V benötigt. Das Motor-Board und der Motor können eine andere Spannung verwenden. Je nach verwendeter Eingangsspannung muss man Regler einsetzen.
Ein Beispiel ist die Steuerung eines 12V-Motors, wie er in Modellbahnlokomotiven zu finden ist. Der Empfänger kann mit einer Akkuzelle betrieben werden. Ein Step-Up-Regler erzeugt dabei die für das Motor-Board und den Motor benötigte höhere Spannung. Die Höchstspannung des Motor-Boards muss berücksichtigt werden. Das HR8833-Board erlaubt maximal eine Eingangsspannung von 10V. Für eine 12V-Konfiguration sollte man das AT8870-Board verwenden, welches Eingangsspannungen bis 38V zulässt.
Ein weiteres wichtiges Detail bei Step-Up-Reglern ist, dass sie nicht verlustfrei arbeiten. Der Wirkungsgrad verschlechtert sich bei größerem Spannungsunterschied. Eine sinnvollere Lösung wäre der Einsatz von zwei oder drei Akkuzellen, wodurch der Step-Up-Regler einen geringeren Spannungsunterschied überbrücken muss. Allerdings benötigt man zusätzlich einen Step-Down-Regler, um den Microcontroller zu versorgen.
Aufbau
Für Variante A verbindest du beide Platinen mit den beiliegenden Stiftleisten. Das Bild oben zeigt den fertigen Aufbau. Der D1 mini sitzt auf dem Motorshield. In Variante B sind die mitgelieferten Stiftleisten des D1 mini zu kurz. Du musst sie durch längere anderweitig beschaffte Stiftleisten ersetzen. Das Bild unten zeigt den fertigen Aufbau. Der D1 mini sitzt ebenfalls auf dem Motorshield, und darüber liegt das Powershield.
Programmierung
Das Repository auf Github enthält den Quellcode des Projekts. Aus diesem Code wird (Programmiersprache C++) ein für den Microcontroller passendes Software-Image gebaut, das anschließend auf den ESP8266 übertragen wird. Für den Build-Prozess des Image ist eine spezielle Umgebung erforderlich. In den meisten Fällen wird diese Aufgabe von der Arduino-Ide erledigt. Bei diesem Projekt wird PlatformIO verwendet. Diese Software ist als Plugin für den Code-Editor Visual Studio Code erhältlich.
Wichtiger Hinweis:
Das Code-Projekt ist speziell für PlatformIO konzipiert. Du kannst es nicht ohne Anpassungen mit der Arduino-IDE nutzen.
Öffnet man den Sourcecode-Ordner mit Visual Studio Code, identifiziert die IDE mithilfe der
Konfigurationsdatei platformio.ini
das Projekt und lädt die fehlenden Programmteile nach.
Eine Besonderheit dieses Projekts ist das Verwenden eines Filesystems zur Ablage der Website-Bestandteile
wie HTML-, CSS- und JavaScript-Dateien. Alle dazugehörigen Dateien befinden sich im Verzeichnis /data
.
Während des Builds entsteht aus diesen Dateien ein zweites Image, das ebenfalls auf den Microcontroller
übertragen wird.
Der Build-Prozess und die Übertragung der gebauten Images erfolgen manuell. Das PlatformIO-Menü stellt dafür zahlreiche Kommandos bereit.
Zwei Aktionen sind relevant:
-
Upload
: Dieses Kommando baut das Betriebssystem-Image und überträgt es auf den Microcontroller. Dazu verbindet man den ESP8266 über den USB-Anschluss mit dem PC. -
Upload Filesystem Image
: Dieses Kommando packt die Web-Bestandteile in ein Image und überträgt es an den Microcontroller.
Die Reihenfolge der Aktionen spielt keine Rolle. Manchmal treten Timeout-Fehler beim Upload des Filesystem-Images auf, die ignoriert werden können.
Bedienung
Startvorgang
Du schaltest den fertig programmierten und angeschlossenen Empfänger ein. Er startet sofort. Die On-Board-LED auf dem Microcontroller leuchtet zunächst blau. Dies zeigt den Bootvorgang an. Sobald alles korrekt initialisiert ist, erlischt die blaue LED. Die extern angeschlossene Status-LED leuchtet auf und signalisiert damit den bereiten Betriebszustand.
Fehler können während des Bootvorgangs auftreten. In einem solchen Fall blinkt die blaue LED auf dem Mikrocontroller. Die Status-LED leuchtet nicht.
UI
Der Empfänger öffnet ein Wlan im 2,4 GHz Netz. Ein mobiles Gerät stellt die Verbindung zu diesem Wlan-Netzwerk her. Das Passwort
lautet immer microrail
. Danach ruft man auf dem Mobilgerät im Browser die URL http://192.168.4.1
auf.
Anzeigeelemente sind:
- WLAN-Name
- Fahrzeugname
- permanent gemessene Batteriespannung
- Version der Software
Zudem zeigt das System die aktuelle Fahrstufe und die eingestellte Richtung an.
Neben den Anzeigeelementen sind vier Eingabeelemente platziert:
- Button „langsamer“
- Button „schneller“
- Button „Richtungswechsel“
- Button „Stop“
Die Geschwindigkeit wird in Stufen festgelegt und intern auf einen Bereich zwischen 0 und 100% umgerechnet. Man kann die Anzahl der Stufen in den Einstellungen bestimmen. Der Initialwert beträgt hier 10. Dieser Ansatz ist gewählt, weil langsame Feldbahn-Fahrzeuge nur wenige Fahrstufen benötigen. Der Stop-Button reduziert die Geschwindigkeit mit Verzögerung auf 0. Die Einstellung Regler-Verzögerung definiert diese Trägheit. Der Initialwert von 200 ist anpassbar. Kleinere Werte zwischen 50 und 200 lassen das Fahrzeug schneller bremsen. Größere Werte zwischen 200 und 500 bewirken ein langsameres Abbremsen. Ein Richtungswechsel ist nur möglich, wenn das Fahrzeug steht, also bei einer Geschwindigkeit von 0.
Der Microcontroller empfängt alle Eingaben. Über einen separaten Rückkanal, einen Websocket, sendet er Antworten und Änderungen an die Benutzeroberfläche. Die Daten in den Anzeigeelementen spiegeln die Rückmeldungen des Microcontrollers wider.
Dieses Konzept ermöglicht die gleichzeitige Verbindung mehrerer Endgeräte mit dem WLAN eines Empfängers. Jedes Endgerät stellt einen Websocket-Kanal zum Microcontroller her. Dadurch sind Änderungen auf einem Endgerät sofort auf den anderen sichtbar.
Einstellungen
Über die Url http://192.168.4.1/setup
können die Einstellungen des Empfängers geändert werden.
- WLAN-SSID: Dies ist der Name des WLAN-Netzwerks. Beim Start erzeugt der Empfänger ein WLAN, mit dem man Endgeräte verbinden kann. Die Reichweite bleibt aufgrund der geringen Sendeleistung der Microcontroller begrenzt.
- Das WLAN-Passwort
microrail
ist festgelegt und lässt sich nicht ändern. Änderungen sind nur im Programmcode möglich. - Name: Dieser Name des Fahrzeugs erscheint in der Web-UI.
- Motor-Frequenz in [Hz]: (50 bis 20000, Standard: 100) Diese Frequenz dient der PWM-Ansteuerung des Motors. Frequenzen um 100 Hz sind für kleine Getriebemotoren geeignet. Glockenankermotoren benötigen Frequenzen über 10 kHz.
- Motor-Maxspeed: (20 - 100, Standard: 100) Ist die Geschwindigkeit auf 100% eingestellt, erreicht der Motor seine Soll-Drehzahl. Oft ist die Fahrzeuggeschwindigkeit zu hoch. Mit diesem Wert lässt sich die Gesamtgeschwindigkeit reduzieren.
- Regler-Schrittweite: (4 - 30, Standard: 10) Über die Tasten Vorwärts/Rückwärts wird die Geschwindigkeit in Schritten geändert. Diese Einstellung ermöglicht es, die Schrittweite zu bestimmen. Der Wert 10 bedeutet eine Änderung in 10%-Schritten.
- Regler-Verzögerung/Inertia: (50 - 500, Standard: 200) Ändert man die Geschwindigkeit von 100% auf 0%, erfolgt das nicht sofort. Die Geschwindigkeit wird in verzögerten Schritten angepasst. Diese Funktion simuliert ein langsames Abbremsen. Der Wert sollte zwischen 50 ms (geringe Verzögerung) und 500 ms (große Verzögerung) liegen.
- Motor-Reverse: Bei falscher Fahrtrichtung des Fahrzeugs kann die Motor-Polung über diesen Schalter korrigiert werden.
Vor dem Speichern werden die Eingaben auf Plausibilität geprüft. Wenn die Werte nicht passen (beispielsweise Buchstaben in den nummerischen Eingabefeldern), werden die Standard-Werte übernommen. Nach dem Speichern muss der Empfänger zur Übernahme der Eingaben neu gestartet werden.
Geänderte Einstellungen werden erst nach dem Neustart des Empfängers wirksam!