ARDUINO Servosteuerung
preiswerte, vielfältige Anwendungsmöglichkeiten
 
Ein Muss für jede Modellbahnanlage sind Weichenantriebe. Diese sind im Allgemeinen relativ teuer; so liegt beispielsweise bei MÄRKLIN der Preis pro Weichenantrieb bei bei 21,99 € und möchte man dann noch einen Unterflurantrieb, so kostet der Unterflurzurüstsatz nochmal 16,49 €, in Summe also stattliche 38,48 € pro Antrieb (Stand Oktober 2021)! Und dabei schalten die Weichen nicht einmal vorbildgerecht langsam, sondern schlagartig!
Ein ARDUINO NANO kostet rund 2,-- € (im 5-wer Set) und ein SERVO etwa 4,-- € (im 10-ner Set), in Summe also ca. 6,-- € (Stand Oktober 2021). Der kurze kleine Antriebsdraht fällt kostenmäßig nicht ins Gewicht und eine Servohalterung ist schnell aus zwei Holzklötzchen hergestellt.
Natürlich wird auch eine Stromversorgung für die Servos und ARDOINOs benötigt. Hier kann aber eine Stromversorgung mehrere Einheiten versorgen. Außerdem kann mit einem einzigen ARDUINO NANO mehr als nur ein einziger Weichenantrieb realisiert werden: ein NANO steuert z.B. 6 Antriebe, dann reduziert sich der Preis auf 4,33 € pro Antrieb, eine Ersparnis von fast 34,15 € zum oben genannten MÄRKLIN-Preis bei einem einzigen Unterflurantrieb; bei nur 6 Antrieben ergibt sich somit bereits eine Ersparnis von stattlichen 204,88 € ! Da lohnt sich ein Selbstbau nun wirklich, welcher zu dem noch mit nur wenigen Bauteilen realisierbar ist und Weichenzungen bewegen sich dazu noch vorbildgerecht, einschließlich verbauter  Weichenlaternen !
Aber auch andere Anwendungen erschließen sich mit Servosteuerungen: Tore von Lokschuppen, drehbare Wasserkräne, und so weiter.
Vorbemerkungen:
1.] zu Servoansteuerungen mit einem ARDUINO stehen auch fertige Bibliotheken zur Verfügung. Ich möchte aber grundlegend zeigen wie Servos mit einem ARDUINO angesteuert werden können (verwendet man Bibliotheken, so ist nicht erkennbar, was diese wie tun!).
2.] Meist ist zu lesen, dass Servos an PWM-Anschlüssen (PWM = PulsWeitenModulation) eines ARDUINOs anzuschließen sind. Ich zeige, dass auch digitale Pins (D0 - D13) verwendbar sind.
3.] Im Allgemeinen ziehen Servos (insbesondere im Einschaltmoment) viel Strom, sodass eine entsprechende externe Stromversorgung der Servos eingesetzt wird. In der nachfolgenden Beschreibung eines Tests mit nur einem Servo verzichten wir darauf, damit die grundlegende Ansteuerung deutlicher ist.
4.] Die in einem Servo enthaltenen Spulen erzeugen beim Betrieb mehr oder weniger hohe Spannungsspitzen, welche ARDUINO-Ausgänge schädigen können. Deshalb werden hier zumeist sogenannte Treiberbausteine verwendet. Auch diese setze ich in meiner ersten TEST-BESCHREIBUNG nicht ein, damit die Schaltung so einfach wie möglich ist und damit das Wesentliche deutlicher wird.
5.] Verwendet man im TEST nur einen einzigen kleinen Servo, der wenig Leistung hat und damit wenig Strom benötigt, so spielen die oben genannten Punkt [3] und [4] keine Rolle, was meine Testaufbauten bestätigen.

Eine erste Demo-Schaltung

Abbildung 1 zeigt den Testaufbau.

Mit nur einem ARDUINO NANO, einem Servo, und 2 Taster (der Elko dient nur zur Stabilisierung, da die Stromversorgung über den USB-Anschluss erfolgt) ist eine Servosteuerung auf einem Steckboard aufgebaut. Der Servo ist mit GND und +5V

Unter den oben genannten Bedingungen dient dieser Aufbau lediglich der Demonstration, um das erforderliche Programm (Scetch) des ARDUIONO zu testen.


Abb.1
Abbildung 2 zeigt den Schaltplan.

Der Servo ist mit GND (scharz) und +5V (rot), sowie seiner Pulsleitung (gelb) an Pin D2 des ARDUINO NANO verbunden.
Der Taster Ta1, zuständig für den Linkslauf des Servos, ist an D3 und Taster Ta2, für den Rechtslauf, an D4 des NONOs angeschlossen. Ein Elektrolytkondensator (Elko) stabilisiert die Stromversorgung beim Anlauf des Servos.

Fehlt nur noch das Programm (Scetch), was nachfolgend kommentiert in Abbildung 3 dargestellt wird. Hier habe ich bewusst auf Einbindungen von Bibliotheken zu Servosteuerungen verzichtet, um das Prinzip von Servoansteuerungen explizit zu zeigen, denn bei Verwendung von Bibliothekten ist das nicht erkennbar.

Abb.2

Abb.3
Download obiger Abbildungen 1 bis 3:
Servo_NANO_1-Servo
ARDUINO Sketch und Fritzing
Weitere Informationen finden Sie unter:
=> Grundlagen
=> ARDUINO und Zubehör
Nimmt man diese Demo-Schaltung in Betrieb, so wird man feststellen, dass der Servo sich in seiner Mittelstellung befindet. Der Servo führt eine langsame Linksbewegung aus, solange die Taste Ta1 gedrückt wird. Eine Rechsbewegung erfolgt solange die Taste Ta2 gedrückt wird. Nach Unterbrechung der Versorgungsspannung verbleibt der Servo in seiner letzten Position. Wird die Versorgungsspannung wieder eingeschaltet, so kehrt der Servo automatisch schnell in seine Mittelstellung zurück! Ohne die Stromversorgung zu unterbrechen kann auch die RESET-Taste am UNO betätigt werden, worauf das Programm neu gestartet wird und der Servo natürlich ebenfalls in seine Mittelstellung zurückgesetzt wird.
In den Endpositionen stoppt der Servo automatisch.
Statt Taster können auch Schalter verwendet werden. Dann führt der Servo entsprechende Bewegungen solange aus, wie ein Schalter eingeschaltet ist, oder seine jeweilige Endposition erreicht hat.
Taster, bzw. Schalter, können natürlich auch durch Schaltmodulausgänge von einer Modellbahnanlagensteuerung ersetzt werden. Dies soll aber einem separaten späteren Thema vorbehalten bleiben, wenn es um reale Einsätze geht. Hier soll "nur" das Grundsätzliche in Form von Test-Schaltungen vermittelt werden, also wie ein ARDUINO zur Ansteuerung von Servos prinzipiell zu programmieren ist! Dem geneigten Leser ist es natürlich nicht vorbehalten, selber die hier vorgestellten Demo-Programme zu seinen Zwecken zu verändern.

Demo-Schaltung für 2 Servos

Das Programm zur unabhängigen Ansteuerung von 2 Servos entwickeln wir aus dem obigen Programm der Abbildung 3, damit die Vorgehensweise leichter verständlich ist. Das Programm wird aber auch Schwächen aufweisen (davon später).

 

 

Abbildung 4
zeigt den
Testaufbau
.

Da hier 2 Servos verbaut sind, verwenden wir eine externe Stromversorgung (für stromsparende Servos zu Testzwecken nicht zwingend erforderlich).

Servo 1 ist an D2 mit zugehörigen Tastern Ta1 an D3 und Ta2 an D4 verbunden.

Servo 2 ist an D5 mit zugehörigen Tastern Ta3 an D6 und Ta4 an D7 verbunden.

Abb.4
Abbildung 5
zeigt den
Schaltplan
.

im Prinzip wie Abbildung 2, nur erweitert um einen zweiten Servo und der externen Stromversorgung, wobei zu beachten ist, dass die Versorgungs-Ströme (Plus und Minus) für die Servos nicht durch den ARDUINO NANO laufen!

Fehlt nur noch das Programm, was in Abbildung 6 dargestellt wird.

Abb.5

Abb.6
Wie wurde das Listing aus Abbildung 3 verändert? Nun, es wurden entsprechende Abschnitte kopiert und hinter entsprechenden Abschnitten eingefügt. Dann wurden Namen dahingehend geändert, dass eine Nummer hinzugefügt wurde, jeweils eine "1", was den Servo 1 betrifft und eine "2", was den servo 2 betrifft. Also wurde z.B. "int minPuls = 600;" ersetzt durch "int minPuls1 = 600;", bzw. "int minPuls2 = 600;", usw. Außerdem wurden für Servo 2 und zugehörigen Tastern (Ta3 und Ta4; deren Nummern auch geändert wurden!) auch die Anschlüsse im Listing angepasst. In der obigen Listingsabbildung 6 habe ich die entsprechenden Abschnitte durch gelbe Schriftbezeichnungen kenntlich gemacht.
Wie in der ersten Demo-Schaltung wird mit den Tastern 1 und 2 der Servo 1 gesteuert. Die Taster 3 und 4 steuern entsprechend den Servo 2. Beide Servos können gleichzeitig angesprochen werden.

Download obiger Abbildungen 4 bis 6: Servo_NANO_2-Servo_extPOWER ARDUINO Sketch und Fritzing

Was sind nun aber die anfangs genannten Schwächen des Programms?
Wird zeitlich jeweils nur ein Servo angesprochen, so funktioniert alles genau wie beim ersten Demo-Programm. Werden aber beide Servos gleichzeitig angesprochen, so ist deren Stellgeschwindigkeit verlangsamt! Woran liegt das? Nun, der ARDUINO kann nicht beide Servos gleichzeitig ansprechen, sondern nur hintereinander! Also erst wird die Schleife für Servo 1 durchlaufen und danach die Schleife für Servo 2.
Wird nur Servo 1 angesprochen und nicht Servo 2, so arbeitet der ARDUINO die Schleife für Servo 1 ab und für die Schleife des Servos 2 hat der ARDUINO nichts zu tun (diese Schleife wird also schnell verlassen).
Wird nur Servo 2 angesprochen und nicht Servo 1, so arbeitet der ARDUINO die Schleife für Servo 1 nicht ab, sondern springt gleich zur Schleife des Servos 2.
Werden hingegen beide Servos angesprochen, so muss der ARDUINO natürlich beide Schleifen abarbeiten, was selbstverständlich mehr Zeit in Anspruch nimmt. Die Servos bewegen sich deshalb langsamer und ein kompletter Schaltdurchlauf dauert entsprechend länger.
Was bedeutet dies, wenn man diese Schaltung für den Antrieb von Weichen einsetzen möchte?
Sollen 2 Weichen gleichzeitig geschaltet werden, dann dauern die Weichenumschalten eben etwas länger, als wenn nur eine Weiche umgeschaltet werden muss. Erweitert man das Programm (was prinzipiell möglich ist) auf gleiche Weise auf 6 Servos, so verlängern sich die Schaltvorgänge bei gleichzeitiger Ansteuerungen aller 6 Antriebe doch erheblich und das ist dann nicht mehr zu vernachlässigen! Man könnte natürlich die Geschwindigkeit der Servos erhöhen. Dann aber würde die Weichengeschwindigkeit bei nur Betätigung eines einzigen Antriebs nicht mehr so vorbildgerecht langsam ablaufen.
Um das Problem zu langer Schaltzeiten zu umgehen, könnten die Servogeschwindigkeiten auch bis auf ein Minimum reduziert werden. Damit würde bei Schaltung nur einer Weiche diese aber nicht mehr vorbildgerecht langsam umschalten, sondern nahezu schlagartig, wie bei den Spulenantrieben.
Gibt es einen Ausweg aus dieser Problematik? Ja, siehe unten: 2 Servos behalten stets ihre Geschwindigkeiten bei.
Außerdem wird bei den meisten Weichenantrieben keine Mittelstellung des Servos benötigt (außer vielleicht bei Dreiwegweichen), sondern nur eine einfache Links-Rechts-Bewegung. Das Programm dahingehend zu ändern ist aber trivial. Auch dies werde ich einmal gesondert beschreiben.

Servos behalten stets ihre Geschwindigkeiten bei

Die Schaltung bleibt unverändert (also so, wie sie die obigen Abbildungen 4 und 5 zeigen. Lediglich das Programm (der Sketch) wird angepasst. In der folgenden Abbildung 7 ist dies in zwei orangen Rahmen kenntlich gemacht.
Im oberen Rahmen werden deklariert: die Variablen "turnRate", "TurnRate1" mit dem zugewiesenem Wert 1 (wenn jeweils nur ein Servo angesteuert wird, und "turnRate2" mit zugewiesenem Wert 2 (wenn zwei Servos gleichzeitig angesteuert werden.

Abb.7
Im untere, zweiten Rahmen wird abgefragt, ob 2 Servos gleichzeitig angesteuert werden; also ob  (Ta1 oder Ta2 und Ta3 oder Ta4) gedrückt sind. Ist diese der Fall ("if"), dann wird der Variablen "turnRate" der Wert der Variablen "turnRate2", also 2, zugewiesen. Damit sind dann die Servogeschwindigkeiten höher.
Trifft die obige "if"-Bedingung nicht zu, so ("else" =sonst) wird der Variablen "turnRate" der Wert der Variablen "turnRate1", also 1, zugewiesen. Also eine langsamere Geschwindigkeitsänderung der Servos pro Schritt.
Wir haben also für die Geschwindigkeiten der Servos zwei Umdrehungsgeschwindigkeiten ("turnRate1" und "turnRate2") eingeführt, welche den Servos je nachdem, ob jeweils nur ein Servo, oder beide zur Zeit angesprochen werden, zugeordnet wird ("turnRate").
Download obiger Abbildungen 7: Servo_NANO_2-Servo_Geschwindigkeit ARDUINO Sketch und Fritzing
Im Programm "Fritzing" (Download) sind natürlich wieder enthalten die Abbildungen "Steckplatine", "Schaltplan", "Code" (das Programm-Listing), aber auch "Leiterplatte". "Leiterplatte" bietet die Möglichkeit eine Platine für die Schaltung zu erstellen, was sich in diesem Fall wohl nicht lohnt, da es sich ja nur um eine Test-Schaltung handelt. Später einmal, wenn wir einen für Modellbahnanwendungen geeigneten Aufbau mit vielen Servos haben, dann wird eine Platine zum Festaufbau sinnvoll sein. Hier sollen lediglich die dazu erforderlichen Grundlagen vermittelt werden!
Ich habe hier gezeigt, dass mit einem ARDUINO Servosteuerungen realisierbar sind, bei denen auch rein digitale Ein-/Ausgänge des ARDUINOs zu Servosteuerungen verwendet werden können und man nicht auf die wenigen PWM-Ausgängen angewiesen ist. Und dass es auch ohne Einbindungen von Libraries (Bibliotheken) in das Programm funktioniert! Dadurch wird es deutlicher, wie prinzipiell die Ansteuerung von Servos funktioniert.
Es sei aber nicht verschwiegen, dass bei Einbindungen von  Libraries Programme deutlich vereinfacht werden und dazu noch viel mehr Servos an einem einzigen ARDUINO betrieben werden können; bei Verwendung preiswerter Module (im Handel erhältlich). Mit einem einzigen Modul können 16 Servos angesteuert werden. Und es können 62 solcher Boards zusammengeschaltet werden, wobei dann 992 PWM-Ausgänge für Servos zur Verfügung stehen! Gemeint ist hier das Modul "Adafruit 16-Channel 12-bit PWM/Servo Driver-I2C interface-PCA9685", welches für 13,45 € erhältlich ist (Stand Oktober 2021). Jeder kann sich selber ausrechen, wie preiswert damit bis zu 992 Servoantriebe machbar sind (im Gegensatz zu 992 käuflich erwerbbare Weichenantriebe). Es zahlt sich folglich aus, sich mit Programmierungen zu beschäftigen und zu "Basteln", wobei zudem die erforderlich Bauteilemenge zum Bauen gering ist!!!
Über den Bau von servogesteuerten Weichenantrieben für den Betrieb auf einer Modellbahnanlage werde ich bei Gelegenheit an geeigneter Stelle berichten. Hier sollten die dazu erforderlichen Grundkenntnisse vermittelt werden.

Demo-Schaltung für 2 Servo-Weichenantriebe

Bisher eignen sich unsere Demoprogramme nicht so wirklich für Weichenantriebe einer Modellbahnanlage, sie sollten ja auch "nur" in die Thematik einführen, wie ADRUINO-Programme für Servos realisiert werden können. Nun aber wollen wir ein Programm entwickeln, welches Weichen mittels Servos "vernünftig" ansteuern kann. Dazu verwenden wir jetzt aber eine in der IDE des ARDOINOs verfügbaren Library (zu deutsch: Bibliothek), sowie Programmbefehle, die bis jetzt noch nicht verwendet und beschrieben wurden. Damit gestaltet sich das Programm wesentlich einfacher, denn wir müssen nicht alles selbst programmieren, weil vieles die Library für uns erledigt. Mit einer Library namens "servo.h" können nämlich Servos zu Positionen bewegt werden, indem man nur einen Winkel in Grad angibt. So stellen wir im Programm damit Servos einfach auf 0° (Weiche Gerade) und auf 30° (weiche Abzweig). Auch kann der Anwender ohne großen Aufwand andere Gradzahlen für seine individuellen Anforderungen wählen.
Bevor wir uns jedoch mit einem solchen Programm beschäftigen, ist es sinnvoll sich mit den neuen erforderlichen Befehlen vertraut zu machen. Diese sind: #include <Servo.h> und "switch", "case", "break", und eine Variable "state". Ich habe dazu Informationen unter ARDUION => Grundlagen => ARDUINO Beispiele eingestellt. Bitte machen Sie sich vorab damit vertraut bevor Sie hier weiterlesen.

Um das nun folgende Programm zu entwickeln, überlegen wir uns erst einmal welche und wie viele Tastenkombinationen es zur Stellung von Tastern von 2 Weichen gibt. Für die Weiche W1 verwenden wir Taster Ta1 für Gerade und Taster Ta2 für Abzweig. Entsprechend für Weiche W2 die Taster Ta3 für Gerade und Taster Ta4 für Abzweig. 4 Taster bilden also eine Menge von insgesamt 16 möglichen Betätigungen, von denen aber nicht alle vorkommen; d.h. nicht sinnvoll sind. Auch hier erfüllt eine Wahrheitstabelle gute Dienste, denn sie erleichtert die Programmierung ungemein! Siehe Abb.8 rechts. Aus der Tabelle sehen Sie übersichtlich alle möglichen Tastenkombinationen. Grün hinterlegt für Schaltungen Gerade und Rot hinterlegt für Abzweig. Unter Aktion ist eingetragen, in welche Stellungen sich die zugehörigen Servos bewegen sollen. Aus der Tabelle erkennen wir leicht, dass es 8 sinnvolle Fälle gibt, welche zu programmieren sind.
8 Fälle? Da eignet sich ja der oben genannte Swich-Befehl hervorragend!
Und das Einbinden der Servo-Bibliothek erspart uns viel Programmieraufwand bei den Servoansteuerungen.

                Wahrheitstabelle der Tasten für 2 Weichen-Servos

Menge

Weiche W1

Weiche W2

 

 

 

Ta1

gerade

Ta2

Abzweig

Ta3

gerade

Ta4

Abzweig

Ta´s betätigt = ja

Aktion

relevante

Fälle

1

nein

nein

nein

nein

keine Taste betätigt => keine Aktion

 

2

ja

nein

nein

nein

Servo 1 30 =>   0

Fall 1

3

nein

ja

nein

nein

Servo 1   0 => 30

Fall 2

4

ja

ja

nein

nein

=0 (kommt nicht vor)

 

5

nein

nein

ja

nein

Servo 2 30 =>   0

Fall 3

6

ja

nein

ja

nein

Servo 1 30 =>   0 und Servo 2 30 =>   0

Fall 4

7

nein

ja

ja

nein

Servo 1   0 => 30 und Servo 2 30 =>   0

Fall 5

8

ja

ja

ja

nein

=0 (kommt nicht vor)

 

9

nein

nein

nein

ja

                                    Servo 2 0 => 30

Fall 6

10

ja

nein

nein

ja

Servo 1 30 =>   0 und Servo 2 0 => 30

Fall 7

11

nein

ja

nein

ja

Servo 1   0 => 30 und Servo 2 0 => 30

Fall 8

12

ja

ja

nein

ja

=0 (kommt nicht vor)

 

13

nein

nein

ja

ja

=0 (kommt nicht vor)

 

14

ja

nein

ja

ja

=0 (kommt nicht vor)

 

15

nein

ja

ja

ja

=0 (kommt nicht vor)

 

16

ja

ja

ja

ja

=0 (kommt nicht vor)

 


 20.11. aktualisiert Abb.8
 Grundlegendes zu Wahrheitstabellen finden Sie unter Steuerungen,
 dort scrollen Sie runter bis "II] Die Schaltalgebra".

Abb.9
Programm-Struktur

// Komentare



Servo Library einbinden


INIZIALISIERUNG








DEKLARATION








ENDLOSSCHLEIFE

Schalter

Fall 1





Fall 2



for-Schleife 1 bis 8

Schalter 2

Fall 1











ENDE Fall 1

Fall 2












ENDE Fall 2

Fall 3











ENDE Fall 3

Fall 4













ENDE Fall 4

Fall 5












ENDE Fall 5

Fall 6











ENDE Fall 6

Fall 7













ENDE Fall 7

Fall 8












Ende Fall 8


ENDE Schalter 2


ENDE for-Schleife

ENDE ENDLOSSCHLEIFE
In der obigen Abb.9 wurde die Programm-Struktur farbig markiert und zwar gleich wie unter ARDUION => Grundlagen => ARDUINO Beispiele eingestellt.
Wie auch im Programm der Abb.7 bleiben Drehgeschwindigkeiten der Servos für die Weichenstellungen stets gleich, ob nun nur eine Weiche, oder beide gleichzeitig gestellt werden. Aber auch Unterschiede bestehen:
1. beim Programm der Abb.9 führen die Servos nur so lange Drehbewegungen aus, wie eine Taste gedrückt ist (man könnte natürlich auch Umschalter statt Taster verwenden)! Folglich ist eine Ansteuerung mittels eines Impulses (wie in Programm-Abb.7 möglich) nicht gegeben. Wird die Servoschaltung aber durch einen entsprechenden Schaltdecoder angesteuert, so spielt das keine Rolle. Andernfalls könnte man das Programm auch leicht ändern.
2. bei erneutem Einschalten der Spannung, oder bei Reset, gehen alle Servos in die 0°-Stellung und damit die Weichen auf Gerade (also keine Mittelstellung mehr!). Wenn die Schaltung aber an entsprechenden Modellbahn-Decodern verbunden ist und diese Decoder auf definierte Weichenstellungen weisen, so werden die Servos der Weichen sofort auch zu diesen Positionen wieder gefahren.
Programm-Download

20.11. aktualisiert

ARDUINO-Scetch und Fritzing

inklusive
Wahrheitstabelle Abb.8
und
Listing von Abb.9
Für einen Testaufbau kann der Schaltungsaufbau, wie in obiger Abb.4 (oder im Download von Fritzing) dargestellt, verwendet werden. Wenn Sie bereits Testaufbauten so gemacht haben, wird es Ihnen eventuell aufgefallen sein, dass bei gleichzeitiger Ansteuerung beider Weichenservos diese manchmal nicht ordnungsgemäß schalten. Eine Störung tritt auf. Ursache sind auftretende Spannungsspitzen der Servos, welche mit ihren Steuerungseingängen direkt an Ausgängen des ADRUINOs verbunden sind und dann im ARDUINO intern zu Überkopplungen führen können, welche dann eben diese Störungen verursachen können. Dem kann aber abgeholfen werden, und zwar durch Entkopplung mittels preiswerter Treiberbausteine, ohne dass weitere Bauteile erforderlich sind. Für meine Testschaltung habe ich den Treiberbaustein UDN 2981 A, mit dem man 8 Servos betreiben kann (Firma Reichelt Elektronik: 1,13 €, also gerade einmal 14 Cent pro Servo, Stand Nov.2021) verwendet. Aber auch andere, ähnliche sind geeignet. Der Testaufbau zeigt Abbildung 10, den Schaltplan Abbildung 11.

Abb.10 Steckbord


Abb.11Schaltplan
C1 mit 100uF bei den Servos zu positionieren und C2 beim ARDUINO dienen zusätzlicher Spannungsstabilisierungen

Die Schaltung mit selbst gebauter Stromversorgung


Abb.12 auch mit Fritzing darstellbar

Abb. 13
Wenn man keinen Testaufbau möchte, sondern einen normalen Schaltungsaufbau, dann wird man das Modul in Abb.10 nicht verwenden, sondern eine eigene Stromversorgung aufbauen. Dies ist sehr einfach mit einem Fest-Spannungsregler möglich. Abb.12 zeigt den Testaufbau und ersetzt das rote Modul in Abb.10. Die Abb.13 zeigt den Schaltplan. Über Anschluss J3 kann eine Gleichspannung und über J4 eine Wechselspannung zugeführt werden (je nachdem was man möchte). Am Ausgang des 7805 steht dann eine Spannung von 5V= zur Verfügung.

Abb.14
Mit dem Programm Fritzing lässt sich auch ein Layout für eine Platine erstellen, wie es die Abbildung 14 zeigt. J1 und J2 sind Jumper, also Steckverbinder, an denen die Servos angeschlossen werden. An J3 kann eine Gleichspannungsquelle und an J4 eine Wechselspannungsquelle angeschlossen werden, je nach Bedarf. Die unterschiedlichen Farben der Leiterbahnen brauchen Sie nicht  beachten.
Das Programm Fritzing verfügt über Autorouting, wenn man anders routen möchte und das manuell macht, ändert Fritzing die Farben dafür.
Das Listing ist natürlich unverändert wie in Abb.9.

Fritzing
Download Servo_2Wh7805
Wie funktioniert es?

Abb.15

Die einzelnen Signalfolgen

Abb.16
Erklärungen in Kurzfassung

ist eine Weiche auf Gerade (grün) gestellt (Servo also auf 0°), so liefert der Ausgang des ADROINOs periodisch entsprechend relativ kurze positive Rechtecke in Abständen von ca. 45 Millisekunden.
Wird nun eine Taste permanent gedrückt, so wird das Rechteck schrittweise länger, die Pulsweite wird also größer. Der Servo folgt mit seiner Bewegung, bis z. B. der Winkel von 30° erreicht ist => rotes Rechteck in Abb.15. Die interne Elektronik des Servos vergleicht also die eingehende Pulsweite mit seiner internen Stellung und passt diese solange an, bis sie mit dem Eingangssignal übereinstimmt.
Versucht man (mit Gewalt) den Servo manuell eine andere Stellung zu geben, so wird der Servo nach Ende der Krafteinwirkung seine ursprüngliche Stellung wieder einnehmen.





Die Abb.16 zeigt Signalverläufe, wenn die Ausgänge des ARDUINOs zu den 2 Servos einem Oszilloskop zugeführt werden.
Die Oszillogramme zeigen, dass das Rechtecksignal zu W2 (Servo 2) stets nach dem Rechtecksignal zu W1 (Servo 1) gesendet wird. Das ist nur logisch, da der ARDUINO nicht beide Signale gleichzeitig senden kann!




So zeigt der Fall 5, dass erst nach dem langen Rechtecksignal an W1 für Abzweig das kurze Rechtecksignal an W2 für Gerade gesendet wird.





Die weiteren dargestellten Fälle für mögliche Weichenstellungen der Servos verstehen sich dann von selbst.




Es gibt nur 4 Fälle; wärend im Programmlisting aber 8 Fälle zu unterscheiden sind, zur Unterscheidung, ob jeweils nur 1 Servo angesteuert wird, oder ob 2 Servos gleichzeitig angesteuert werden, um eben Servogeschwindigkeiten stets gleichbleibend zu halten!
Die einzelnen Schritte in der for-Schleife des Programms



Abb.17
Beschreibung der in der for-Schleife erzeugten Rechteckimpulse

Die obige Abb.16 zeigt die Oszillogramme jeweils nachdem die Servos ihre Endpositionen erreicht haben. Wir schalten unsere Weichen aber langsam, und daher unsere Servos in kleinen 1°-Einzelschritten bis sie jeweils eine Endposition erreicht haben. Dies veranschaulicht die Abb.17. Und damit werden wir das Programm noch besser verstehen, wie es funktioniert:

Diagramm zeigt die Ausgangsposition: W1 und W2 Gerade.
Nun werden die Tasten Ta2 und Ta4 betätigt, sodass im Programm  in der for-Schleife "case 8" ausführt (siehe Abb.9).

Diagramm 1°W1: lastPuls1 und lastpuls2 werden um 1 erhöht und  dann der Servo 1 in der Zeile W1.write(lastPuls1) angesteuert. Die Pulsweite für Servo 2 bleibt noch unverändert, rückt aber zeitlich etwas weiter.



Diagramm 1°W1&W2: erst dann wird in der Zeile W2.write(lastPuls2) Servo 2 angesteuert. Beide Servos habe jetzt 1°-Stellung erreicht.

Die for-Schleife hat 8 Fälle abgearbeitet und erreicht ihr Ende und es wird wieder an den Anfang gesprungen.  Da 30° noch nicht erreicht sind, wird die for-Schleife abermals die Servos in case 8 um 1° weiter stellen.

Diagramm 30°W1&W2: die Schritte wurden nun solange durchlaufen bis die Servos 30° erreicht haben.
Beide Weichen sind nun auf Abzweig (fast) gleichzeitig gestellt worden; "fast" gleichzeitig, da sie jeweils nur kurz hintereinander um 1° gestellt werden können, was aber so gut wie nicht auffällt.
Möge nach diesen Erklärungen die Funktionsweise des Programms und der Servos noch besser verständlich geworden sein!

Abb.18
27.11. Oszillogramme

Die in den obigen Abbildungen dargestellten Oszillogramme können auch auf einem kleinen Video dynamisch betrachtet werden, welche ich mit einem 2-Kanal-Oszilloskop aufgezeichnet habe.

Oszillogramme 2W


Abbb.19


Abb.20
An Hand eines Testaufbaus möchte ich zeigen, wie der Servoeinbau mit einer K-Gleis-MÄRKLIN-Weiche realisierbar ist.
Im Bereich, wo normalerweise ein Weichenantrieb angesteckt wird, befindet sich zwischen den beiden Schienen ein bewegliches Teil (Stellungshebel). In dieses Teil bohren wir äußerst vorsichtig ein Loch von 1mm Durchmesser; der rote Pfeil in Abb.20 weist darauf hin. Durch diese Bohrung wird später ein Rundfederstahlstift von 1mm Durchmesser gesteckt, welche ebenfalls auf einem Servohebel gesteckt wird und dort mit einem kleinen Tropfen Sekundenkleber befestigt wird.

Abb.21
Die Abb.21 zeigt den Aufbau im Querschnitt.

Ganz oben ist die Weiche angedeutet. Darunter die Grundplatte mit einer 10mm Bohrung zur Durchführung des Stelldrahts.

Der Servoantrieb wird mittels zweier 6-Kand Abstandshalter mit M3-Gewindeschrauben befestigt. Dabei werden die oberen beiden Schrauben in der Grundplatte versenkt, damit die Weiche plan aufliegen kann.
 
Der Federrundstahl des korrekt aufgesteckten Servohebel (dargestellt in Abb.22) führt durch das Loch des Weichenstellhebels, wie in Abb.20 dargestellt.

Abb.22
Die Draufsicht des Testaufbaus.
Der Servoantrieb (hellblau) ist natürlich mit seinem Stellhebel (weiß) unter der Weiche verbaut, hier aber zur besseren Sichtbarkeit für seine Position sichtbar dargestellt! Der Servohebel ist auf die Servoachse so zu positionieren, dass mit der 30°-Bewegung des Servos die Weiche exakt von Gerade (0°) nach Abzweig (30°) schaltet. Eine beleuchtete MÄRKLIN-Weichenlaterne ist rechts an der Weiche aufgesteckt und folgt in langsamer vorbildgerechter Bewegung den Weichenstellungen.

Abb.23
Die Abbildung 23 zeigt eine Bohrschablone, mit der ein Einbau erleichtert wird. Die Schienen der Weiche, sowie deren Endabschnitte, sind in der Schablone in Schwarz dargestellt. Damit kann die Schablone auf einer Anlage exakt positioniert werden und die entsprechenden Bohrungen durchgeführt werden. Für Links-Weichen kann die Schablone einfach umgedreht aufgelegt werden. Ebenso lassen sich sehr leicht selber Schablonen für andere Weichenformen erstellen (welche ich bei meinen Anlagenbauten sicher einmal an geeigneter Stelle zur Verfügung stellen werde).

Hier stelle ich dem geneigten Interessenten zum Nachbau die Beschreibungen mit den Abbildungen 20 bis 23 zum Download pdf als zur Verfügung.

Ebenso kann die Funktion des Testaufbaus in einem kleinen Video betrachtet werden.
Baubeschreibung

VIDEO
Sie möchten diese Servo-Weichen-Steuerung auf Ihrer Modellbahn digital ansteuern? Bitte sehr, hier die Schaltung inklusive Anzeigen:

Abb.24

 


  ACHTUNG   

Die hier gezeigten Programme wurden von mir natürlich aufgebaut und getestet. Sie funktionierten auf einem Testboard, wie es auch die Videos zeigen.
Ich baute mit einem zweiten ADRUINO-Nano eine weitere Schaltung auf. Hier zeigten sich nun Probleme, wenn 2 Servos gleichzeitig angesteuert werden. Der Ursache muss natürlich auf den Grund gegangen werden und das Programm entsprechend geändert werden.
Sowie ich die Ursache gefunden habe, werde ich die verbesserte Programmversion hier einstellen und darüber berichten.
Bis es soweit ist, sind die oben zum Download bereitgestellten Programme für einen realen Modellbahneinsatz leider nicht betriebssicher geeignet!
Ich bitte um Nachsicht.


 

wird fortgesetz

 

zurück zu ARDUINO