Die Motoren sind da. (3)
// 0° = Puls 500 µs = Rechtsanschlag
// 45° = Puls 975 µs
// 90° = Puls 1450 µs
// 135° = Puls 1925 µs
// 180° = Puls 2400 µs = Linksanschlag
int Puls1 = 500; // fixer Wert
int Puls2 = 1600; // einstellbar bis 2400
int Servo1 = 3; // entspricht Pin 2 vom ATTINY85
float Pulsdauer;
float Periode = 20000; // 20ms bzw. 50Hz
void setup() {
pinMode(Servo1, OUTPUT);
}
void loop() {
for(Pulsdauer = 2400; Pulsdauer >= 500; Pulsdauer=Pulsdauer-5){
digitalWrite(Servo1,HIGH);
delayMicroseconds(Pulsdauer);
digitalWrite(Servo1,LOW);
delayMicroseconds(Periode - Pulsdauer);
}
void loop() {
for(Pulsdauer = 500; Pulsdauer <= 2400; Pulsdauer=Pulsdauer+5){
digitalWrite(Servo1,HIGH);
delayMicroseconds(Pulsdauer);
digitalWrite(Servo1,LOW);
delayMicroseconds(Periode - Pulsdauer);
}
Nein, die Praxis will nicht immer so, wie man sich das in der Theorie vorstellt. Sie macht einem bisweilen einen Strich durch die Rechnung. Jetzt haben wir das so schön im Kapitel 'Die Motoren sind da'
vorgestellt. Einfach ein paar Zeilen weglassen und schon funktioniert es.
Wir haben lange rumprobiert, aber nichts erreicht außer inneren Vorgängen in unserem Servomotor, die man deutlich spüren konnte. Und auch jetzt wissen wir noch nicht, was denn letztendlich den Ausschlag
ergeben hat.
Per Zufall haben wir bei unseren vielen Änderungen den Wert der Periode auf nur 2.000 statt 20.000 gesetzt und immerhin macht der Servomotor jetzt, was er soll. Allerdings doppelt, einmal relativ schnell
zwischen den beiden Endpunkten und einmal zitternd langsam.
Wir werden noch ermitteln, was wir verändern müssen, denn nur letztere Bewegungen wollen wir haben. Der Motor soll, sogar mit Pausen, so angesteuert werden, dass er immer nur kleine Schritte vollführt.
Warum ist das so wichtig? Ganz klar wollen wir den Motor so einstellen, dass er auch noch ein bis zwei Bewegungen vollzieht, wenn die Weichenzunge an ihrem jeweiligen Endanschlag liegt. Da soll ein
gewisser Druck am Ende aufgebaut werden.
Gleichzeitig darf das aber nicht zu einer zu großen Erwärmung und damit Stromaufnahme des Motors führen. Das könnte in unserem Fall den ATtiny überfordern. Wir sind heilfroh, ihn direkt und ohne
Verstärkung mit dem zu steuernden Element verbinden zu können.
Dabei wird der ATtiny bei Weichen gar nicht eingesetzt werden, sondern ausschließlich der Arduino Mega mit seinen bis zu 53 möglichen Ausgängen. Da werden bei maximal 80 Eingangsweichen nur zwei
Megas gebraucht.
Das ist der Vorteil, wenn man über einen Draht eine Weiche sowohl in die eine, wie auch in die andere Richtung steuern kann. Dann kommen noch zwei USB-Verbindungen zu einem steuernden alten Laptop
hinzu und schon rollen Züge präzise gesteuert in die Schattenbahnhöfe.
Wir jedenfalls sind froh, mit so wenig Steuerelementen auskommen zu können, mit der äußerst sparsamen Verkabelung ohnehin. Die beiden Arduinos könnten sogar alle Weichen auf der Anlage steuern, aber
wir werden die guten nicht auf Servomotor umstellen.
Denn dazu muss der komplette elektromagnetische Stellmechanismus abgetrennt werden, wodurch der Wert der Weiche auf Null gesetzt wird. Wir erwägen sogar, die Weichen die irgendwann noch verkäuflich wären,
bewusst auf die Ausgangsseite der jeweiligen Schattenbahnhöfe zu verwenden.
Für die Eingänge reichen Weichen, bei denen nur noch der Mechanismus der Zungenverstellung funktioniert. Diesen werden wir dann über den besonders gebogenen Draht alter Büroklammern mit dem Ausleger
unserer Motoren verbinden.
Gleichzeitig können wir für diese tatsächlich Löcher in unser Laminat einbringen. Sie stehen dann nach unten noch ein wenig vor. Auch oben bewegt sich der Ausleger auf wesentlich größerer Höhe als der
Angriffspunkt der Weichenzunge. Das muss durch einen längeren Draht ausgeglichen werden.
Und warum haben wir diese Versuche mit dem ATtiny unternommen? Weil wir hier zu Recht wesentlich mehr Probleme vermutet haben. Was der ATtiny huckepack auf dem Arduino kann, das kann letzterer
alleine allemal. Der ATtiny soll später Funktionen in fahrendem Material ausführen.
|