Der Weg zur Drehscheibe - Steuerung

Steuerung

Geplant war es zwei Sperrsignale auf die Bühne zu bringen und die Drehung über einen Arduino zu steuern. Da ich nur zwei Kontakte habe und damit ohne großen Aufwand nur Digitalstrom auf die Bühne legen kann würde in die Bühne ein Funktionsdekoder integriert der die Beleuchtung regeln würde. Der Arduino würde auch als Dekoder geschaltet so dass möglicherweise Rocrail die Bühne ansteuern kann. Allerdings fand ich keine Hinweise darauf welche Befehle Rocrail hier versendet. Das hat aber auch noch etwas Zeit bis der Mechanismus funktioniert.

DS MagnetFuerSchalter

Idee 1 - Magnete und Hallsensoren

Der erste Gedanke war es in die Bühne einen Magneten einzubauen und an jeder Stelle wo ein Gleisabgang ist entweder einen Reed-Kontakt oder einen Hallsensor anzubringen. Der Magnet würde dann den Schalter betätigen und der Arduino könnte die Drehung anhalten.

Ich hatte auch Magnete die durch die Wand der Grube hindurch erkannt wurden, allerdings war das Signal nicht genau genug um die Gleise ordentlich auszurichten. Ich hätte pro Gleis noch speichern müssen wie lange die Bühne weiterdrehen muss um exakt positioniert zu sein. Das hätte noch in zwei Richtungen erfolgen müssen, je nachdem ob sich die Bühne im oder gegen den Urzeigersinn dreht. Diese Werte zu erfassen wäre ziemlich aufwendig geworden.

Weiterhin ist damit die Anzahl der Gleise begrenzt, denn für jeden Zugang benötige ich einen Sensor und damit einen Eingang am Arduino. Somit wären vielleicht nur sechs bis acht Abgänge möglich bevor ich aufwendigere Schaltungen benötige.

DS Steppermotor

Idee 2 - Schrittmotor statt des Walther-Antriebs

Das Arduino-Kit das ich mir kaufte enthält unter Anderem einen Schrittmotor mit passendem Treiber.

Diese Art von Motor kann sehr genau positioniert werden, denn pro Puls den man an den Motor sendet dreht er sich um eine feste Gradzahl, meist 1,8°. Damit kann man 200 Positionen anfahren und das mit sehr hoher Wiederholgenauigkeit.

Erste Versuche das Teil mit dem Arduino anzutrieben waren aber fruchtlos. Die Standard-Library zur Steuerung dieser Motoren führte zu gar nichts. So googlte ich die Typenbezeichnung und landete auf einer Instructables-Seite auf der ein Stück Code angeboten war das aber leider auch nicht funktionierte. Aber immerhin hatte ich so eine Grundlage auf der ich weiterarbeiten konnte. Dazu musste ich mich zwar tief in die Funktionsweise von Schrittmotoren einarbeiten und eine eigene Funktionsbibliothek zu deren Steuerung schreiben, aber in einem Testaufbau funktionierte das Prinzip.

Anm.: inzwischen habe ich eine deutsche Seite gefunden auf der das Problem beschrieben und gelöst wird. Aber etwas zu spät...

Der Grundgedanke war statt pro Gleis einen eigenen Sensor zu verbauen nur noch einen einzelnen Sensor zu setzen und diesen als Position Null zu definieren. Die Position der Gleise kann dann in 1,8-Schritten ausgehend von dieser Position bestimmt werden, und das reicht von der Genauigkeit her um Lokomotiven auf die Gleise fahren zu lassen ohne dass sie entgleisen.

Ein weiterer Vorteil ist dass man sogar einfach das anzufahrende Gleis angeben kann und das Modul selbst die Drehrichtung bestimmt, je nachdem welche Richtung kürzer ist. Außerdem habe ich meine Bibliothek so geschrieben dass der Arduino nicht blockiert wird während eine Drehung läuft. So kann ich ihn noch andere Dinge machen lassen, zum Beispiel ein Warnblinklicht ansteuern während die Scheibe dreht oder Ähnliches.

 


Allerdings war der billige Schrittmotor viel zu schwach um die Bühne zu bewegen und kann auch nur 96 Positionen anfahren. Also fing ich an zu suchen und kaufte mehr oder weniger auf das Geradewohl einen Schrittmotor auf ebay sowie die dazu nötige Treiberplatine.

Idee 2b - ein stärkerer Schrittmotor

Bis der neue Schrittmotor ankam und ich wieder Zeit hatte mich mit der Drehscheibe zu beschäftigen war viel Zeit vergangen und ich hatte schon das Meiste wieder vergessen was die Steuerung angeht. Darum brauchte ich wieder mehrere Tage bis der neue Motor sich endlich drehte.

Dann begann die Tauchsaison und ich kam erst im April wieder zur Drehscheibe. Und wieder funktionierte der Motor nicht. Da es schon funktioniert hatte ging ich davon aus dass irgend etwas kaputt gegangen sei und war zunächst einmal frustriert und legte das Projekt zur Seite. Datenblatt des neuen Schrittmotors Im August stellte sich aber heraus dass ich irgendwann den richtigen Code mit dem falschen überschrieben hatte und ich konnte anhand des Motor-Datenblattes die Steuerungssequenz wieder herstellen.

BuehneMitSplintAuch die mechanischen Probleme löste ich Ende August. Statt des Zahnrades das bisher die Bühne sicherte kommt ein einfacher Splint zum Tragen und der Motor wird direkt mit der Achse der Bühne gekoppelt - zumindest mal vorerst. Schnell wurden die Rangiersignale installiert und die Verkabelung erstellt - und siehe da, alles funktioniert.
Da die Motortreiber angeben mit 5-12V zu arbeiten und mit 12V alles recht warm wurde habe ich versucht den Motor direkt vom Arduino zu versorgen. Das funktioniert so lange er die Bühne nicht antreibt, sobald ich ihn aber mit der Bühne verbinde zuckt er nur noch. Erst wenn ich den Strom auf 10-11V erhöhe dreht er die Bühne.
Verkabelung der Scheibe funktioniert
DekoderAbgeraucht

Durch die Fahrtrichtung kann ich schalten ob die Signale rot oder weiß sind und auch das Licht im Kontrollhäuschen sollte schaltbar sein. Da ich den Lokprogrammer zur Zeit nicht hatte versuchte ich die Zuordnung zu einer Funktionstaste über CVs zu programmieren - und dann roch es plötzlich etwas merkwürdig und nichts funktionierte mehr. Schnell stellte sich der Dekoder als Übeltäter heraus - sieh Bild. Entweder hatte ich mich bei den CVs vertan oder an der Verkabelung geschlampt.

Jetzt benötige ich erst einmal einen neuen Dekoder - und zu allem Überfluss ist auch noch eines der Kabel vom Gleis gebrochen. Das wieder anzulöten ohne die Bühne zu schmelzen wird sicherlich auch ein toller Spass.

Leider ist die Bewegung der Bühne ziemlich ruckartig, auch nachdem ich auf Halbschritte umgestellt habe. Vielleicht hänge ich noch ein Getriebe zwischen Motor und Bühne um eine flüssigere Bewegung erreichen zu können. Alternativ wäre auch möglich statt der Halbschritte das sogenannte "Microstepping" einzusetzen, für den Arduino beschrieben habe ich es hier gefunden. Evtl. wäre es am Einfachsten ein anderes Treibermodul zu verwenden, das überlege ich noch.

Software

Im Moment stelle ich mir für die manuelle Bedienung vor dass ich drei Knöpfe und ein Display habe. Im Normalmodus dienen die Knöpfe dazu das nächste Gleis im oder gegen den Uhrzeigersinn anzufahren. Der dritte Knopf hat keine Funktion, oder vielleicht ein "drehe die Bühne um 180°" damit er nicht ganz nutzlos ist. Drückt man links und rechts gleichzeitig kommt man in den Programmiermodus. Hier stellt man mit Links und Rechts eine Gleisnummer ein und wählt sie mit dem dritten Knopf an. Dann kann man die Bühne mit links und rechts verfahren.