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)

 

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


ARDUINO-Scetch und Fritzing

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
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
Anmerkung:
Die hier gezeigten Programme wurden von mir natürlich aufgebaut und getestet. Sie funktionierten auf einem ersten 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 ist nun erkannt: Ich verwendete ein 9V= 1,2A Steckernetzteil, welches an einen 5V= Regler auf dem Board zur Versorgung der Schaltung diente. Auf der zweiten aufgebauten Schaltung zogen die Servos (obwohl sie vom gleichen Typ waren!) mehr Strom in den Einschaltmomenten (entsprechende Einbrüche auf der Versorgungsspannung wurden mit einem Oszilloskop deutlich sichtbar), als die Servos des ersten Aufbaus dies taten. Die Spannung brach folglich dabei kurzeitig ein und der ARDUINO arbeitete nicht mehr sauber. Ich nahm daraufhin ein Steckernetzteil mit 5V=, welches bis zu 3A Strom liefert (damit war auch der 5V Regler auf dem Board nicht mehr erforderlich!). Damit funktioniert nun auch die zweite aufgebaute Schaltung.
Die oben beschrieben Schaltungen sind also fehlerfrei und brauchen nicht korrigiert zu werden.
Für die Ursachensuche hatte ich noch ein modifizierte Programm erstellt, welches für den realen Modellbahneinsatz zu Servo-Weichensteuerungen noch besser geeignet ist (die oben beschriebenen Programme sollen in erster Linie dazu dienen, Servoansteuerungen mittels eines ARDUINO verstehen zu lernen). Nachfolgend stelle ich das modifizierte Programm  mit Beschreibungen vor.

Ein modifiziertes Programm zur Servo-Steuerung zweier Weichen

Bisher wurde an Demo-Schaltungen schrittweise erklärt, wie Programme zur Ansteuerung von Servos an Weichen entwickelt werden können. Hier nun folg eine Schaltung, die für eine betriebssichere Servo-Weichensteuerung einer Modellbahnanlage geeignet ist
Die Tabelle in Abb.8 weist noch 8 Fälle auf. Es funktioniert aber auch mit nur 4 Fallunterscheidungen, wie es die Tabelle in Abb.25 zeigt, wenn eine UND-Verknüpfung verwendet wird. Aufbauten der Abb.10, sowie Abb.24 können sogar belassen werden; nur das Programm ändert sich.
Abb.25
zur Beachtung: die ARDUINO-Eingänge werden mit L, also mit Masse angesteuert!
Wie übrigens auch konventionell MÄRKLIN-Weichen-Antriebe; Kompatibilität ist damit gegeben!

Abb.26
(Das Programm lässt sich leicht auf mehr als 2 Servos erweitern)









































Fall 1














Fall 2














Fall 3














Fall 4
Der grundsätzlich Programmaufbau gegenüber Abb.9 hat sich nicht verändert, sodass weitgehend auf Beschreibungen verzichtet werden kann. Lediglich in der Schleife (loop) fanden die Hauptänderungen gemäß Tabelle der Abb.25 statt. Diese sind in Abb.26 durch farbliche Rahmen hervorgehoben:
Im gelben Rahmen finden "if"-Abfragen statt und zwar so, wie sie in der Tabelle der Abb.25 für die Fälle 1 bis 4 aufgeführt sind. Nehmen wir z.B. Fall 3: die Schalteingänge des ARDUIONs werden abgefragt (im gelben Rahmen); Wenn (if) S1=0 UND S2=1 (also nicht 0 ist, folglich nicht eingeschaltet ist!) UND S3=1 (also nicht 0 ist, folglich nicht eingeschaltet ist!) UND S4=0, dann wird das Nachstehende inner halb der {...} abgearbeitet.
Im grünen Rahmen wird abgefragt, ob der letzte zu Servo 1 übermittelte Puls (lastPuls1) kleiner/gleich 30 ist, aber 0 noch nicht erreicht hat. Nur wenn dies zutrifft, dann wird LastPuls1 um 1 vermindert und dieser Wert dem Servo 1 zugeführt, bis LastPuls1 Null ist, also die 0°-Stellung erreicht ist und somit die Weiche auf Gerade steht.
Im orangen Rahmen wird abgefragt, ob der letzte zu Servo 2 übermittelte Puls (lastPuls2) größer/gleich 0 ist, aber 30 noch nicht erreicht hat. Nur wenn dies zutrifft, dann wird LastPuls2 um 1 erhöht und dieser Wert dem Servo 2 zugeführt, bis LastPuls2 30 ist, also die 30°-Stellung erreicht ist und somit die Weiche auf Abzweig steht.
"switch (state2)" wird im Programm zyklisch permanent durchlaufen und dabei die Abfragen "case 1" bis "case 4" ausgeführt. Auch wenn ein Servo seine Endstellung noch nicht erreicht haben sollte und eine andere Weichenstellung gewählt wird, wird diese neue Stellung sofort abgefragt und ausgeführt!
Unter INIZIALISIERUNG steht die Zeile "int warte = 50;". Den Wert "50" können Sie vor dem Hochladen des Sketch (Programm) in den ARDUINO ändern; bei einem kleineren Wert werden die Servogeschwindikeiten erhöht, bei einem größeren Wert verlangsamt.
Die Zeile "delay(2); // TEST-PAUSE !!!!! " (ziemlich am Ende des Listings) kann entfallen; sie diente nur zu Testzwecken, worauf ich später noch eingehen werde.
Weitere Erklärungen sind den Kommentaren im Listing zu entnehmen, sowie weiter oben in diesem Abschnitt beschrieben.
Wichtig:
bei den vorigen Demo-Programmen wurden Taster verwendet. Bei diesem Programm sind Ein-/Aus-Schalter zu verwenden, damit die Servos (also die Weichen) sicher ihre Endlagen erreichen und nicht irgendwo stehen bleiben können!
Download
2WhV2.fzz

Fritzing und 2WhV2.ino
inkl. Abb.25, 27, 28
Anwendungsbeispiel
Die Abbildung 27 zeigt wie die Weichen-Servo-Steuerung bei einer digital betriebenen Modellbahnanlage integriert werden kann. Zur Ansteuerung der Servoschaltung wurde ein Schaltdecoder (hier von Viessmann) verwendet (welcher preiswerter ist, als ein Weichendecoder!). Der Schaltdecoder wird z.B. von einer Uhlenbrock-Zentrale (Intellibox) angesprochen. Die LEDs dienen nicht nur zu Anzeigen der Weichenstellungen! Ist nämlich ein Schalter des Schaltdecoders offen (also nicht mit 0V verbunden), so erhält der betreffende Eingang des ARDUINOs über die LED mit ihrem Vorwiderstand das Potential +5V. Damit "schwebt" der Eingang nicht "in der Luft", sondern hat definiertes Potential, was die Betriebssicherheit erhöht! Möchte man auf die Anzeigen verzichten (also auf die LEDs), so sind die Widerstände an den jeweiligen ARDUINO-Eingängen direkt an +5V zu legen.
Auch bei dieser Schaltung sind die Stromkreise "digitaler Bahnstrom" und "Weichen-Servos" vollständig galvanisch voneinander getrennt, also zueinander unabhängig, was eine weitere Betriebssicherheit bedeutet!

Abb.27

Abb.28

Eine Hilfe bei der ARDUINO-Programm-Erstellung: der Serial Monitor

Vielleicht hat der ein oder andere Leser hier Programme heruntergeladen, um sie dann für seine speziellen Bedürfnisse zu ändern. Dabei kann es durchaus vorkommen, dass dabei Fehler entstehen. Das ARDUINO-Tool meldet durchaus Fehler. Das sind aber nur Syntaxfehler (also Fehler der Programmstruktur). Wenn solche Fehler aber nicht vorhanden sind, aber das Programm nicht das tut, was der Programmierer erwartet, nun das kann der ARDUINO nicht melden. Woher soll er auch wissen, was der Anwender will?! Der Anwender kann nur programmieren und wenn das Programm dann läuft, das Resultat sehen. Was ihm verborgen bleibt, ist was im Innern des ARDUINOs während des Programmablaufs wirklich passiert. Es wäre demzufolge hilfreich diverse Abläufe innerhalb der Programmroutine sichtbar machen zu können. Und das ist tatsächlich möglich, nämlich mit dem Hyper Terminal als Serial Monitor!
Information und Anleitung habe ich bereits auf einer anderen Seite beschrieben, siehe unter ARDUINO => Grundlagen => Grundlagen der Programmierung, dort unter:
Anleitung zum Programm Hyper Terminal als Serial Monitor für den ARDUINO
Bevor Sie hier weiter lesen, empfiehlt es sich, dieses Kapitel nochmal durchzulesen.
Also, in das letzte Programm (2WhV2.fz) habe ich Zeilen für für einen Serial Monitor eingebaut. Damit werden auf dem PC-Monitor die Abläufe innerhalb der der Programmdurchläufe von "switch (state2)" angezeigt, also was innerhalb der Abfragen von "case1" bis "case4" jeweils zu den Servos gesendet wird. Damit wird sichtbar wie das Programm funktioniert (oder auch nicht?).
Die eingefügten Programmzeilen:

Abb.29
Die "Test-Pause" von 100 Millisekunden verlangsamt das Programm so, dass die Anzeigen auf dem PC-Monitor auch verfolgbar sind.
Die nachfolgende Abbildung 30 gibt verschiedene Szenarien des Monitors wieder:

Abb.30
Auf dem Monitor erscheinen die schrittweise hoch- oder runtergezählten Servoschritte der Weichen W1 und W2 in Grad, sowie welcher Fall (cas) gerade abgearbeitet wird bis die Endstellungen der Servos erreicht wurden.

Sie können sich das Programm mit diesen eingefügten Zeilen hier herunterladen:
Download 2WhV2Monitor

Sicherlich werden Sie erkennen, wie hilfreich so ein Monitor auch zu Testzwecken tauglich ist.
Darüber hinaus kann es auch zum besseren Verständnis von Programmabläufen hilfreich sein.

Wenn Sie bei einem Einsatz dieser Schaltung auf Ihrer Modellbahnanlage wünschen, dass auch auf dem PC-Monitor die Weichenstellungen angezeigt werden, so ändern Sie einfach entsprechend die Zeilen in den print-Befehlen und löschen die Zeile "delay(100); // TEST-PAUSE".

Wünschen Sie, dass Ihre Servos andere Winkel anfahren, so ändern Sie einfach den Wert 30 in allen Programmzeilen.

Ich wünsche gutes Gelingen bei Ihren eigenen Projekten!

Eine Servo-Steuerung für 2 Weichen-Antriebe mit einem ATtiny85
für unter 5 € einsetzbar für Modellbahnanlagen, aber auch zu anderen Zwecken

Nachdem für einen ATtiny85 ein Bootloader und ein HV-Brenner beschrieben wurden (siehe unter ARDUINO ATtiny-Brenner), zeige ich hier nun, wie eine Servosteuerung für 2 Weichenantriebe auch mit einem ATtiny85 äußerst preiswert realisiert werden kann:
erforderliche Bauteile für 2 Weichenantriebe mit Anzeigen, ohne Schalter, welche durch durch Schalt-Decoder realisiert werden.
Internet-Preise bei Abnahmemengen von jeweils 10 Stück (Stand Jan. 2022).
4 Widerstände
4 LEDs
2 Dioden
1 Elko
1 ATtiny85
1 ULN
2 Servos
1 Platine
Summe:
0,08 €
0,16 €
0,08 €
0,02 €
1,95 €
0,31 €
2,00 €
0,22 €
4,82 €

2 Servo-Weichenantriebe
mit Anzeigen
Schaltungsaufbau auf einer kleinen Lochrasterplatine (160x100mm 1 Stück 1,30€ für 6 Schaltungsplatinen).
Möchte man keine Lötverbindungen für die Anschlüsse, sondern Steckfassungen, so kommen ca. 2 € hinzu.
Vorweg bemerkt: das Einfügen einer Bibliothek (also der Befehl "#include <Servo.h>") funktioniert bei einem ATtiny-IC nicht (das IC ist eben kein UNO!). Wir können folglich die weiter oben beschriebenen Programme mit der Servo-Bibliothek für einen ATtiny nicht verwenden. Spätestens jetzt erkennen wir, dass es nicht umsonst war, sich mit den obigen Programmen zu beschäftigen, welche keine Servo-Bibliotheken verwenden! Ich habe aus der ersten Demo-Schaltung das Listing aus Abb.3 genommen und es dann für einen ATtiny85 angepasst, sowie um einen zweiten Servo-Antrieb erweitert. Sehen wir uns also den Schaltungsaufbau mit zugehörigen Programm an:

Abb.31 Testaufbau ATtiny-Servo-Steuerung für 2 Unterflur-Weichenantriebe mit Stellungsanzeigen für Gerade und Abzweig.
Hinweis: rein zu Testzwecken wurden auf dem Steckboard Taster verwendet, wodurch Servos nur solange in "Abzweigposition" verharren, wie ein Taster gedrückt ist. Für einen realen Modellbahnbetrieb sind natürlich Schalter statt Taster zu verwenden.

Abb.32 Schaltplan
Die obige Abbildung 32 zeigt den Gesamtschaltplan.
Die rechte Abbildung 33 veranschaulicht die Besonderheit der Funktion der beiden Schalter S1 und S2:
mit jeweils nur einem einzigen einfachen Ein-/Aus-Schalter gelingt es die LEDs (Orange und Grün) umzuschalten und gleichzeitig die ATtiny-Eingänge +/- umzuschalten (High/LOW-Umschaltung)! Ausschlaggebend ist hierfür die Diode (D1, bzw. D2), wodurch zwei Schalter eingespart werden (also nur 2, statt 4)!
Abb.33 links:
Schalter offen (bzw. Taster nicht betätigt).
Die grüne LED wird mit Plus/Minus versorgt und ist an.
Die orange LED wird beidseitig mit Plus versorgt und ist aus.
Abb.33 rechts:
Schalter geschlossen (bzw. Taster betätigt).
Die grüne LED wird beidseitig mit Minus versorgt und ist aus.
Die orange LED wird mit Plus/Minus versorgt und ist an.

Die Stromverläufe sind in den Abbildungen durch Pfeile hervorgehoben: in ROT Plus und in Schwarz Minus (GND); zu beachten ist dabei der jeweilige Stromfluss durch die Diode  1N914!

Der "Dioden-Umschalt-Trick"                       Abb.33
Das Einsparen von 2 Schaltern spart nicht nur Bauteile, sondern es sind mit dieser Schaltung lediglich 2 Eingänge am ATtiny, statt 4, erforderlich. Nur dadurch ist es möglich, mit einem einzigen ATtiny85 2 Servos ansteuern zu können! Auch bleiben damit die die Stellungsanzeigen der Weichen mittels 4 LEDs erhalten! Die "Umschaltlogik" wird nun per Software erledigt, wie wir gleich im Programmlisting sehen werden.

Das Programm für den ATtiny85


Abb.34
Beachte:
in einem ATthiny-Programm (Sketch) sind die Bezeichnungen für die Anschlusspins anders als bei einem ARDUINO! Im Listing oben (Abb.34, Zeile 5) ist z.B. Servo 1 an Pin 6 des ATtiny85 angeschlossen, der Befehl lautet aber "int Servo1Pin=1;" vergleiche Abb.35 rechts! In einem ATtiny-Programm sind für die Anschlüsse also die in Abb.35 blau hinterlegten Pin-Belegungen zu verwenden!

Abb.35
Hinweise

Anleitungen zu:
- Bootloader (damit Sketch hochgeladen werden kann).
- eine Programm (Sketch) in den ATtiny hochladen.
- HV-Brenner (ATtiny in Ursprungszustand  versetzen.

sind unter ARDUINO ATtiny-Brenner beschrieben.

Der Schaltungsaufbau auf einer Lochrasterplatine

Die Schaltung auf dem Steckboard dient lediglich zu Testzwecken der Schaltung. Für eine reale Weichenansteuerung einer Modellbahn werden wir aber die Schaltung auf einer kleinen Platine aufbauen, auf der sich aber nicht die externen Bauteile der Schalter, Anzeigen, sowie Servos befinden (diese finden ja auf unserem Stellpult Platz, beziehungsweise die Schalter werden durch einen Decoder bei einer digitalen Modellbahnsteuerung ersetzt und die Servos bei den Weichen verbaut).
Zum Erstellen einer geeigneten Platine ist es hilfreich aus dem Schaltplan (siehe Abb.32) einen neuen Schaltplan zu erstellen, der übersichtlich die externen Bauteile darstellt und wie diese über Anschlüsse zu der zu erstellenden Platine verbunden werden. Dies zeigt der Schaltplan der folgenden Abbildung 36:

Abb.36 Der Kondensator C2 ist nicht zwingend erforderlich, kann aber eventuelle ATtiny-Störungen minimieren.
Die Abbbildung 37 zeigt die Lochrasterplatine (Raster-Abstände 2,54 mm x 2,54 mm der einzelnen Lötaugen mit Bohrungen), mit den darauf befindlichen Bauteilen, sowie die Anschlüsse der externen Bauteile. Um die Anschlüsse nicht per Lötungen auszuführen, habe ich kleine Steckfassungen verwendet. Die Drahtverbindungen werden dann an Pfostenstecker gelötet um dann auf die Platinenanschlüsse aufgesteckt zu werden. Die Pfostenstecker gibt es preiswert in der Polzahl von 36 Pins und können leicht für die hier erforderlichen 2- und 3-poligen Anschlüsse getrennt werden.

Auf die Anschluss-Belegung der Bauteile ist zu achten!
LEDs: K=Kathode (Minus), A=Anode (Plus);
Servos: P=Pulseingang, +=Plus-Stromversorgung, GND=Minus-Stromversorgung.

Die Platine mit den Servos sollte in unmittelbarer Nähe der entsprechenden Weichen verbaut werden; die LEDs zur Anzeige der Weichen werden am Stellpult ihren Platz finden (müssen aber nicht verbaut werden). Die Anschlüsse der Schalter sollten möglichst kurz zu Schaltdecodern geführt werden. Sind hier längere Leitungen erforderlich, so kann es unter Umständen zu Störungen kommen; dann sind entsprechende Abhilfemaßnahmen erforderlich (nach Tests werde ich darüber berichten).

Als Stromversorgung sollte eine externe Quelle von 5V Gleichspannung verwendet werden (z.B. eine Steckernetzteil).

Abb.37

Abb.38 Platinen-Bestückungsseite (oben)
zuerst werden die niedrigen Bauteile aufgelötet, dann jeweils die nächst höheren. Die Abbildung zeigt grünlich durchscheinend die Leitungsverbindungen auf der Unterseite zur besseren Orientierung.
Platinengröße: 6,5 cm x 3 cm

Abb.39 Platinenverdrahtungsseite (unten)
Die meisten Verbindungen werden dadurch bewerkstelligt, dass  unisolierte dünne Drähte auf die Lötaugen gelötet werden und so die in der Abbildung grau/weiß dargestellten Verbindungen hergestellt werden. So verbleiben nur 6 herzustellende Verbindungen mittels isolierter Drähte; in der Abbildung blau, gelb, und rot dargestellt.
Wer mit Lötarbeiten noch nicht so wirklich versiert ist, dem empfehle ich eine etwas größere Lochrasterplatine zu verwenden, auf der die Bauteile in entsprechend größeren Abständen platziert werden. So sind Lötungen sicherer herzustellen und es passiert weniger leicht, dass ungewollte Lötverbindungen zu unmittelbar benachbarten Lötanschlüssen entstehen.

Der Einbau in einer Modellbahnanlage

Die rechte Abbildung 40 vermittelt die Anordnung der Schaltung auf einer Anlage mit 2 Servo Unterflur Weichenantrieben, geeignet zur digitalen, oder auch analogen Ansteuerung. Der Decoder kann entweder am Bedienpult oder auf der Anlage platziert werden (je was gefällt). Interessant ist die Möglichkeit auf einem externen Gleisbildstellwerk die Weichenstellungen anzeigen zu können, wobei sogar Schalter zum Umschalten der Weichen gleich mit integriert werden können! Der Servoeinbau bei den Weichen wurde bereits weiter oben beschrieben (Abb.20 bis 23).

Der Treiberbaustein (hier ULN2803) beinhaltet 8 Treiber, von denen nur 2 belegt werden. Der Baustein ist aber immer noch deutlich preiswerter, als 2 Treiberstufen mittels diskreter Bauteile aufzubauen und nimmt wesentlich weniger Platz in Anspruch. Man könnte natürlich auch eine Platine mit 4 ATtiny85 für 8 Servos und nur einen ULN2803 aufbauen, womit dann alle 8 Treiber ausgenutzt werden.

Natürlich lässt sich diese Schaltung auch für andere Anwendungen einsetzen. Beispielsweise: 2 einflügelige Signale, 1 zweiflügeliges Signal, drehbarer Wasserkran, Tore, und vieles mehr. Dabei ist lediglich das ATtiny-Programm bezüglich der Stellungswinkel der Servos anzupassen. Und das alles zu einem extrem niedrigen Preis!

Abb.40
Im Download enthalten:
- Programm-Dateien fritzing: Steckplatine, Schaltplan, Leiterplatte, Code
- ARDUINO IDE-Scetch (ATtiny 85 Programm)
- pdf-INFO
Download

2W30ATtiny85

 

zurück zu ARDUINO