Hallo an Alle.
Wir sind neu hier. Als Jugendgruppe beschäftigen wir uns mit der Modelleisenbahn.
Den Arduino nutzen wir zur Steuerung der Weichen mit Servos.
Das Programm, das wir dabei nutzen,ist:
#include <Servo.h>
Servo Weiche1;
Servo Weiche2;
Servo Weiche3;
Servo Weiche4;
int T_W = 53;
int T_O = 52;
int T_G1 = 51;
int T_G2 = 50;
int T_G3 = 49;
int Grad;
//___________________VOID SETUP______________
void setup() {
pinMode(T_W, INPUT);
pinMode(T_O, INPUT);
pinMode(T_G1, INPUT);
pinMode(T_G2, INPUT);
pinMode(T_G3, INPUT);
}
//___________FUNKTION "schalten"________________
void schalten (Servo Weiche, int PIN, int Winkel) {
Weiche.attach(PIN);
Weiche.write(Winkel);
delay(300);
Weiche.detach();
}
//___________FUNKTION "W1"___________________
void W1(int Stellung) { //0=gerade - 1=abbiegen
if(Stellung == 0) { //Stellung gerade aus
Grad = 0; //Position in Grad
}
if(Stellung == 1) { //Stellung abbiegend
Grad = 20; //Position in Grad
}
schalten(Weiche1, 2, Grad); //(Servo, Anschlusspin, Position)
}
//___________FUNKTION "W2"___________________
void W2(int Stellung) { //0=gerade - 1=abbiegen
if(Stellung == 0) { //Stellung gerade aus
Grad = 0; //Position in Grad
}
if(Stellung == 1) { //Stellung abbiegend
Grad = 20; //Position in Grad
}
schalten(Weiche2, 3, Grad); //(Servo, Anschlusspin, Position)
}
//___________FUNKTION "W3"___________________
void W3(int Stellung) { //0=gerade - 1=abbiegen
if(Stellung == 0) { //Stellung gerade aus
Grad = 0; //Position in Grad
}
if(Stellung == 1) { //Stellung abbiegend
Grad = 20; //Position in Grad
}
schalten(Weiche3, 4, Grad); //(Servo, Anschlusspin, Position)
}
//___________FUNKTION "W4"___________________
void W4(int Stellung) { //0=gerade - 1=abbiegen
if(Stellung == 0) { //Stellung gerade aus
Grad = 0; //Position in Grad
}
if(Stellung == 1) { //Stellung abbiegend
Grad = 20; //Position in Grad
}
schalten(Weiche4, 5, Grad); //(Servo, Anschlusspin, Position)
}
//_____________VOID LOOP______________________
void loop() {
while(digitalRead(T_W) == HIGH) { //Start Ein-Ausfahrt West
while(digitalRead(T_G1) == HIGH) { //Ziel Gleis1
W1(1);
}
while(digitalRead(T_G2) == HIGH) { //Ziel Gleis2
W1(0);
W2(0);
}
while(digitalRead(T_G3) == HIGH) { //Ziel Gleis3
W1(0);
W2(1);
}
}
while(digitalRead(T_O) == HIGH) { //Start Ein-Ausfahrt Ost
while(digitalRead(T_G1) == HIGH) { //Ziel Gleis1
W4(0);
W3(1);
}
while(digitalRead(T_G2) == HIGH) { //Ziel Gleis2
W4(0);
W3(0);
}
while(digitalRead(T_G3) == HIGH) { //Ziel Gleis3
W4(1);
}
}
while(digitalRead(T_G1) == HIGH) { //Start Gleis1
while(digitalRead(T_W) == HIGH) { //Ziel Ein-Ausfahrt West
W1(1);
}
while(digitalRead(T_O) == HIGH) { //Ziel Ein-Ausfahrt Ost
W3(1);
W4(0);
}
}
while(digitalRead(T_G2) == HIGH) { //Start Gleis2
while(digitalRead(T_W) == HIGH) { //Ziel Ein-Ausfahrt West
W2(0);
W1(0);
}
while(digitalRead(T_O) == HIGH) { //Ziel Ein-Ausfahrt Ost
W3(0);
W4(0);
}
}
while(digitalRead(T_G3) == HIGH) { //Start Gleis3
while(digitalRead(T_W) == HIGH) { //Ziel Ein-Ausfahrt West
W2(1);
W1(0);
}
while(digitalRead(T_O) == HIGH) { //Ziel Ein-Ausfahrt Ost
W4(1);
}
}
}
Wir wollen nun für ein neues Diorama ein mechanisches Stellwerk nachbauen. Das funktioniert mit Drahtseilen zu den Weichen und Signalen.
Unser Problem ist, das wir jedes Mal das Programm ändern müssen, um die Servos an die weiche oder Signal anpassen zu müssen.
Winkel gerade und abzweigend
// nach dem Einbau müssen die Werte angepasst werden. Wir bauen die Servos ein. Dann werden die Servos soo gestellt, dass die Weichenzungen anliegen dann zurückgestellt bis sie eben anliegen, aber nicht aufgefahren werden können.
Gut wäre es wenn wir das beim Einbau machen können und die werte im Arduino speichern für jedes Servo
Auch wenn der Arduino billig ist, man braucht ihn auf anderen Modulen wenn mal was passiert.
Das andere Problem ist, wie wir das mechanische Stellwerk nachbauen.
Das funktionirt so:
Jede Weiche wird für die Fahrstrasse eingestellt. Hebel oben bedeutet Durchfahrt, auch wenn Abzweig der Weiche eingestellt sein sollte. Hebel unten bedeutet gestellt.
Dann wird der Fahrstrassenhebel umgelegt.Dabei muss überprüft werden, ob alle Weichen gestellt wurden. dabei werden alle Fahrstrassen gesperrt die den Weg berühren
Erst dann legt man das betreffende Signal um. Auch die anderen gefährlichen Signale werden gesperrt.
Vorher muss bei nächsten Stellwerk angefragt werden ob der Zug angenommen wird. Gelbe LED anfrage, grüne LED Zustimmung, rote LED Geblockt. Wenn rotled , dann kann die Fahrstrasse nicht angelegt werden. Dann muss alles rüchwärts zurückgestelltwerden, erst dann darf eine neue Fahrstrasse eingestellt werden. Auch erst bei einer Zustimmung von anderen Stellwerk,Block frei etc.
was wir noch machen möchten, ist den Stellwerker in den Atduino zu bringen.
wenn der Hebel gezogen wird, ist es erst mal langsamer bis zur Hälfte dann bis unten schneller beim runterdrücken.
und die Signale wippen ein bisschen nach
Leider können wir die älteren nicht fragen, wegen Corona.
Deshalb wäre es schön, wenn uns hier einer etwas helfen könnte.
Aber bitte einfach und erklärt es. wir hatten noch computer unterricht sondern haben nur beim bauen den Arduino coden gelernt.
Ein anderes Problem ist, könntet ihr uns auch sagen wo man im Internet auch die befehle für den ARDUINO IN DEUTSCH FINDEN KANN.
vielen Dank
Die Feelltbaanschneggen