RE: MobaTools - Demo: Wechselblinker

#1 von e69-fan ( gelöscht ) , 06.05.2020 10:14

Grüß Gott aus Bayern,

Ich möchte das Demo "Wechselblinker" von den MobaTools verwenden. Der Schalter "const int SchalterP = 7;" soll durch zwei Hallsensonren ersetzt werden. Magnet unter der Lok startet die Schaltung und der Magnet unter dem letzten Wagon schaltet ab. Der feste Zugverband ist gewollt, da die Schaltung auch für mein CAR-System verwendet werden soll.

Wie würdet Ihr das umsetzen? (Relais mit Selbsthaltung, Flip-Flop etc. - der einfachste Weg ist mein Ziel)

Schon mal Danke für die Hilfe.

mfg Wolfgang


e69-fan

RE: MobaTools - Demo: Wechselblinker

#2 von schmiedi , 06.05.2020 11:20

Hallo Wolfgang,

mir ist nicht ganz klar, was Du mit Relais oder Flip-Flop erreichen möchtest. Kannst Du das bitte erklären?

Meine grobe Idee wäre, die Abfrage des Tasters so zu modifizieren, dass beim Einschalten des ersten Sensors der Ablauf gestartet und beim Schalten des 2. Sensors beendet wird. Du müsstest also wohl beide Sensoren separat im Sketch abfragen und entsprechend der Fahrtrichtung behandeln. Dabei wäre zu beachten, dass jeder Sensor zweimal beim Überfahren ausgelöst wird. Das genaue Verhalten richtet sich danach, welchen Hall-Sensor Du einsetzen möchtest - und hier steige ich aus, da mir die praktischen Erfahrungen fehlen...

Viele Grüße und viel Erfolg,
Dieter


Der Zug zur Besichtigungstour "Rund um Steinen":


 
schmiedi
InterRegioExpress (IRE)
Beiträge: 446
Registriert am: 07.07.2015
Homepage: Link
Spurweite H0
Steuerung Arduino, Eigenbau
Stromart DC, Analog


RE: MobaTools - Demo: Wechselblinker

#3 von Bodo , 06.05.2020 13:09

Hallo Wolfgang,

alle Zusatzkomponenten machen die Sache im Prinzip nur komplizierter, wenn Du eh´ den Arduino programmierst.

Leider fehlt eine konkrete Darstellung Deiner Situation. Eine Fahrtrichtung oder Fahrt des Zuges in beide Richtungen ? Sind die Positionen der Magnete und Hall-Sensoren für Lok und Schlusswagen unterschiedlich, oder hast Du immer vier Auslösungen (2x Lok, 2x Wagen).

In eine Richtung dürfte es über eine Zustandsvariable relativ leicht gehen, in beide Richtungen wird es komplizierter, da beide Sensoren sowohl Einschalter als auch Ausschalter sein können.

Viele Grüße, Bodo

PS: Ich würde es über einen Belegtmelder realisieren, aber das war nur teilweise die Frage .


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.474
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: MobaTools - Demo: Wechselblinker

#4 von e69-fan ( gelöscht ) , 06.05.2020 15:19

Hallo Bodo,

vielen Dank für Deine schnelle Reaktion.

Der Bahnübergang befindet sich auf einer zweigleisigen Strecke. Jedes Gleis erhält zwei Hallsensoren. Die Lok schaltet mit Nordpol und der letzte Wagen mit Südpol.

Mein erster Gedanke waren Relais - Corona-Denkfehler, diese fallen jedoch ab, da die HALL nur Taster sind.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
 

#include <MobaTools.h>
 
/* Demo: Wechselblinker
Dieses Demo ist etwas komplexer und zeigt die Realisierung eines
Wechselblinker, der per Schalter ein- und ausgeschaltet wird.
Wie bei Wechselblinkern an einem BÜ üblich, starten die beiden Lampen
gleichzeitig, um dann im Wechseltakt zu blinken
Dieses Demo verwendet auch die 'Eieruhr' um Zeitverzögerungen zu realisieren
Die 'Eieruhr' ist ein Zeitzähler, der aufgezogen werden kann und im loop kann
abgefragt werden, ob er abgelaufen ist.
*/
 
// Festlegen der Ports
const int Blinker1P = 13 ; // Die beiden Led's des
const int Blinker2P = 11 ; // Wechselblinkers.
 
const int hallSensorPin2 = 2; // Gleis A - AN
const int hallSensorPin3 = 3; // Gleis A - AUS
const int hallSensorPin4 = 4; // Gleis B - AN
const int hallSensorPin5 = 5; // Gleis B - AUS
 
int hallSensorPIN2Status = 0;
int hallSensorPIN3Status = 0;
int hallSensorPIN4Status = 0;
int hallSensorPIN5Status = 0;
 
const int Relais_IN1 = 6; // Gleis A
const int Relais_IN2 = 7; // Gleis B
 
const int SchalterP = 8; // Schalter, der den Wechselblinker ein und ausschaltet
 
// Weitere Konstante
const int wbZykl = 1100; // Zykluszeit des Wechselblinkers
const int wbSoft = 400; // Auf/Abblendzeit der Lampen
 
// Zustand des Wechselblinker
byte wblZustand = 0; // In dieser Variable wird hinterlegt, in welchem Zustand
// sich der Wechselblinker gerade befindet
#define WBL_AUS 0 // beide Lampen sind aus
#define WBL_START 1 // Startphase: beide Lampen sind an
#define WBL_BLINKT 2 // Die Lampen blinken normal im Wechsel
byte ledState; // HIGH : Blinker1 ist an, LOW Blinker2 ist an
 
MoToSoftLed Blinker1;
MoToSoftLed Blinker2;
 
MoToTimer BlinkUhr;
 
void setup() {
pinMode(SchalterP, INPUT_PULLUP);
Blinker1.attach(Blinker1P); // die Ausgänge werden automatisch auf OUTPUT gesetzt
Blinker2.attach(Blinker2P);
Blinker1.riseTime( wbSoft ); // Aufblendzeit in ms
Blinker2.riseTime( wbSoft ); // Aufblendzeit in ms
pinMode(hallSensorPin2, INPUT_PULLUP);
pinMode(hallSensorPin3, INPUT_PULLUP);
pinMode(hallSensorPin4, INPUT_PULLUP);
pinMode(hallSensorPin5, INPUT_PULLUP);
pinMode(Relais_IN1, OUTPUT);
pinMode(Relais_IN2, OUTPUT);
}
 
void loop() {
 
//digitalWrite (Relais_IN1, LOW); // low - eingeschaltet
//digitalWrite (Relais_IN2, HIGH);
 
// Status des Hall-Sensors auslesen
hallSensorPIN2Status = digitalRead(hallSensorPin2);
hallSensorPIN3Status = digitalRead(hallSensorPin3);
hallSensorPIN4Status = digitalRead(hallSensorPin4);
hallSensorPIN5Status = digitalRead(hallSensorPin5);
 
if (hallSensorPIN2Status == LOW) {
digitalWrite(SchalterP, HIGH);
}
else {
digitalWrite(SchalterP, LOW);
}

if (hallSensorPIN3Status == LOW) {
digitalWrite(SchalterP, HIGH);
}
else {
digitalWrite(SchalterP, LOW);
}
 
// Wechselblinker
switch (wblZustand) {
case WBL_AUS:
// Beide Lampen sind aus, warten auf einschalten
if ( digitalRead(SchalterP) == HIGH && BlinkUhr.running() == false ) {
// Beide Leds einschalten, Timer für gemeinsames Startleuchten
Blinker1.on();
Blinker2.on();
BlinkUhr.setTime( wbSoft );
wblZustand = WBL_START;
}
break;
case WBL_START:
// Startphase: Nach Zeitablauf erste Led wieder aus
if ( BlinkUhr.running() == false ) {
// Die Startzeit ist abgelaufen, Übergang zur normalen Blinkphase
ledState = HIGH;
Blinker2.off();
BlinkUhr.setTime(wbZykl / 2); // Zeitverzögerung setzen
wblZustand = WBL_BLINKT;
}
break;
case WBL_BLINKT:
if ( BlinkUhr.running() == false ) {
BlinkUhr.setTime(wbZykl / 2); // Zeitverzögerung setzen
if ( ledState == LOW ) {
Blinker1.on();
Blinker2.off();
ledState = HIGH;
} else {
ledState = LOW;
Blinker2.on();
Blinker1.off();
}
}
if ( digitalRead(SchalterP) == LOW ) {
// Wechselblinker abschalten
Blinker1.off();
Blinker2.off();
wblZustand = WBL_AUS;
BlinkUhr.setTime(wbZykl); // minimale 'Aus' zeit des Blinkers
//( schützt vor Schalterprellen )
}
break;
 
} // Ende switch Wechselblinker
}
 
 





mfg wolfgang


e69-fan

RE: MobaTools - Demo: Wechselblinker

#5 von Bodo , 07.05.2020 09:50

Hallo Wolfgang,

so richtig in Ruhe drüber nachdenken kann ich erst ab morgen Abend ... aber ich glaube, die Logik hat noch mindestens einen Fehler. Wenn sich zwei Züge begegnen, darf der erste den BÜ nämlich nicht abschalten, solange der andere Zug ihn noch belegt. Ich denke, man muss beiden Gleisen eine Status-Variable spendieren und per ODER-Logik verknüpfen.

Ich werde das am WE mal gedanklich durchspielen, ist ja durchaus eine interessante Aufgabenstellung .

Viele Grüße, Bodo


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.474
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: MobaTools - Demo: Wechselblinker

#6 von Bodo , 09.05.2020 10:10

Hallo zusammen,

hier also der zweigleisige BÜ. Die wesentlichen Änderungen (der lauffähige Sketch befindet sich im Anhang):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
const int Gleis1onP  =  8;  // Gleis 1 Start-Kontakt
const int Gleis1offP = 9; // Gleis 1 Ende-Kontakt
const int Gleis2onP = 10; // Gleis 2 Start-Kontakt
const int Gleis2offP = 11; // Gleis 1 Ende-Kontakt
//const int SchalterP = 7; // Schalter, der den Wechselblinker ein und ausschaltet
boolean SchalterP = false; // Blinkschaltung on/off
boolean Gleis1 = false; // Gleis 1 belegt/frei
boolean Gleis2 = false; // Gleis 2 belegt/frei
 
void setup() {
pinMode(Gleis1onP, INPUT_PULLUP);
pinMode(Gleis1offP, INPUT_PULLUP);
pinMode(Gleis2onP, INPUT_PULLUP);
pinMode(Gleis2offP, INPUT_PULLUP);
// pinMode(SchalterP, INPUT_PULLUP);
}
 
void loop() {
 
if ( digitalRead(Gleis1onP) == LOW ) { Gleis1 = true; }
if ( digitalRead(Gleis1offP) == LOW ) { Gleis1 = false; }
if ( digitalRead(Gleis2onP) == LOW ) { Gleis2 = true; }
if ( digitalRead(Gleis2offP) == LOW ) { Gleis2 = false; }
SchalterP = Gleis1 || Gleis2; // Blinken, wenn Gleis 1 oder Gleis 2 belegt

// Wechselblinker
switch (wblZustand) {
case WBL_AUS:
// Beide Lampen sind aus, warten auf einschalten
if ( SchalterP == true && BlinkUhr.running() == false ) {
...
}
if ( SchalterP == false ) {
// Wechselblinker abschalten
Blinker1.off();
Blinker2.off();
wblZustand = WBL_AUS;
BlinkUhr.setTime(wbZykl); // minimale 'Aus' zeit des Blinkers
//( schützt vor Schalterprellen )
}
break;

} // Ende switch Wechselblinker
}
 



Ob man die Hall-Sensoren wie Taster gegen Masse schalten kann, weiß ich nicht - aber die Programmlogik funktioniert zumindest auf meinem Steckbrett so. Ist auch ein super Beispiel, warum "delay" nicht verwendet werden sollte - dann werden nämlich ziemlich sicher die Schaltmomente verpasst .

Viele Grüße, Bodo


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen

Dateianlage:
Sie haben nicht die nötigen Rechte, um die angehängten Dateien zu sehen

 
Bodo
InterCityExpress (ICE)
Beiträge: 2.474
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: MobaTools - Demo: Wechselblinker

#7 von e69-fan ( gelöscht ) , 10.05.2020 10:39

Hallo Bodo,

vielen Dank - der Sketch funktioniert super. Ich habe bei Deiner Lösung einiges hinzugelernt.



Schöner Wochenende - Wolfgang


e69-fan

   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz