Arduino als Stellwerk(er)

Situationsbeschreibung

Schon vor einiger Zeit habe ich für meinen Nebenbahn-Bahnhof Viessmann Formsignale als Bausatz montiert und mit einem Servo-Antrieb versehen. Die beiden Gleise werden jeweils mit einer Kombination aus Haupt- und Sperrsignal ausgestattet, die als Einbau-Modul konzipiert ist. Der Fahrstromschalter wird vom Servo-Antrieb des Sperrsignals bedient.

Modellbau-Servos als Antrieb für Formsignale

Modellbau-Servos als Antrieb für Formsignale

Sie wurden zunächst über einen ESU Switch-Pilot Servo angetrieben, der sich über den LokProgrammer sehr gut einstellen läßt. Allerdings zeigten sich in der Praxis einige Nachteile wie z.B. unmotiviertes Verstellen beim Einschalten, welches dann nur durch konkrete Schaltbefehle korrigiert werden kann. Bei einer manuell bedienten Anlage etwas ärgerlich. Außerdem lassen sich maximal Endlagen und Stellgeschwindigkeit konfigurieren.

Der Arduino mit seiner Servo-Bibliothek bietet da nun wesentlich mehr Möglichkeiten – insbesondere die freie Programmierung der Flügelbewegungen, die bei einem mechanischen Stellwerk im Vorbild deutlich von einer linearen Bewegung abweicht. So muss der Stellwerker am Hebel umgreifen und ein fallender Signalflügel federt in der Endlage etwas nach.

Diese Bewegungsabläufe stellen die eigentliche Herausforderung bei diesem Projekt dar.

Das Bahnhofs-Shield

Neben den Signalen müssen in der Bahnhofs-Ein- bzw. Ausfahrt auch die Weichen passend gestellt werden – diese sind mit herkömmlichen Doppelspulen-Antrieben versehen, die am einfachsten über Relais angesteuert werden.

Die gesamte Hardware wurde auf ein passendes „Shield“ montiert:

Das montierte Bahnhofs-Shield auf einem Arduino Leonardo

Das montierte Bahnhofs-Shield auf einem Arduino Leonardo

Neben der Ansteuerung der Servos und Weichen ist das Ein- und Ausschalten der Servo-Spannungsversorgung ein wichtiger Bestandteil, um unerwünschte Störungen (Einschalt-Zucken, Servo-Brummen) zu vermeiden. Die Relais werden über ein Transistor-Array ULN2803A angesteuert, da der Spulenstrom den maximalen Ausgangsstrom der Mikroprozessor-Ports überschreiten kann.

Schalten der Servo-Spannungsversorgung

Ein Relais schaltet zentral für alle Servos die Spannungsversorgung ein bzw. aus:

relais-servos

So werden z.B. beim Programmstart zunächst die Servos softwaretechnisch initialisiert und mit den zur Grundstellung passenden Impulsen angesteuert, bevor die Servos Betriebsspannung erhalten. Unkontrollierte Bewegungen finden so nicht statt.

Gleisbild-Stellpult zur Befehlseingabe

Die Wahl der Fahrstraßen erfolgt über ein kleines Gleisbildstellpult, dessen Taster als Widerstandsleiter verdrahtet sind. So reichen drei Leitungen und ein analoger Eingang zur Auswertung:

Widerstandsleiter für mehrere Taster an einem analogen Eingang

Widerstandsleiter für mehrere Taster an einem analogen Eingang

Allerdings darf immer nur ein Taster gedrückt werden. Diese Einschränkung halte ich bei einem privaten Projekt aber für vertretbar – ein Serienprodukt müsste solche Fehler natürlich abfangen können. Die Platine mit den Tastern und Widerständen wurde in ein kleines Kunststoff-Gehäuse eingebaut:

2014-10-06-6120-Stellpult
2014-10-06-6122-Stellpult
Vorbildgerechte Flügelbewegung

Hier beginnt nun der für mich besonders spannende Teil …


Erkennbar sind das „Umgreifen“ beim Stellen von HP0 auf HP2 und das „Nachfedern“ beim Stellen von HP2 auf HP0.

Den Code gibt´s als Download, wenn die erste voll funktionsfähige Version fertig ist.