45 Gleisbesetztmelder ohne Schienentrennung für eine Blockstrecke - eine achsgezählte Rückmeldung

Описание к видео 45 Gleisbesetztmelder ohne Schienentrennung für eine Blockstrecke - eine achsgezählte Rückmeldung

Wieder ein Schritt weiter. Die Lesestelle wurde verbessert mit SMD Fototransistoren
Typ : PT17-21B-L41-TR8 - siehe auch Video 49
Bitte weiterlesen. Keine Schienentrennung auf der Modellbahn erforderlich.
Software in dieser Beschreibung.
Es wird keine Fahrspannung unterbrochen. Keine stromfühlende Belegtmeldung.
Staub und Schmutz verursachen keine Störungen mehr. Verlorene Anhänger werden erkannt.
Was in die Blockstrecke reinfährt muss auch wieder raus.
Der Testeinbau erfolgte im Märklin C-Gleis.
In meinem Video Nr.18 ist eine passende SMD IR Led
Typ : IR19-21C/TR8 für eine evtl. seitliche Montage.
Die erste Gleiszusammenführung wurde aufgebaut und erfolgreich getestet.
Die Achszähllogik zwischen gezählten Abschnitten ist in Video 48.
Einfacher geht nicht.
"in und enter" Ereignisse, für z.B. für Rocrail, können mit der Software gebildet werden.
Erweiterungen in Planung.
“Möchten Sie mehr Videos wie dieses sehen? Klicken Sie auf ‘Abonnieren’ und aktivieren Sie die Benachrichtigungen, um immer auf dem Laufenden zu bleiben!”

5:06 Schaltpläne
5:38 neues Kanal Sensor Design
7:39 Software
7:44 Erklärung Einstellungen
7:59 Fahrvideo Kreis
9:18 so sieht die Lesestelle aus im Gleis
10:00 Gleisverzweigung

Die Software für den Arduino:
Kopieren und direkt im Arduino einfügen. (Formatierung bleibt erhalten),
danach, spitze Klammern sind in der Videobeschreibung nicht zulässig, - deswegen -,
x mit spitze Klammer nach links 13 mal und
y mit spitze Klammer nach rechts 1 mal ersetzen.
ein Bild mit der Software ist auch im Video.

int Impulse; // Impulse an der Lesestelle
int Achsen; // sind Achsen / 4 oder Magnete
const int analog1 = A0; // Definiere die Pins für die analogen Eingänge
const int analog2 = A1;
const int analog3 = A2; // Definiere die Pins für die analogen Eingänge
const int analog4 = A3;
int counter1 = 0; // Zähler für die inkrementalen Werte
int lastEncoded1 = 0; // Letzter kodierter Wert
int counter2 = 0; // Zähler für die inkrementalen Werte
int lastEncoded2 = 0; // Letzter kodierter Wert
int LS1; // Lichtschrankenbitt 1-4
int LS2;
int LS3;
int LS4;
void setup()
{
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
void loop() {
updateEncoder();
int Wert1 = analogRead(analog1); // Lese den Wert zw. 0-1023 am analogen Eingang A0
if (Wert1 x 100) LS1 = 1; else LS1 = 0; // wenn kleiner - dann 1 aktiv sonst 0
int Wert2 = analogRead(analog2); // Lese den Wert zw. 0-1023 am analogen Eingang A1
if (Wert2 x 100) LS2 = 1; else LS2 = 0; // wenn kleiner - dann 1 aktiv sonst 0
int Wert3 = analogRead(analog3); // Lese den Wert zw. 0-1023 am analogen Eingang A0
if (Wert3 x 100) LS3 = 1; else LS3 = 0; // wenn kleiner - dann 1 aktiv sonst 0
int Wert4 = analogRead(analog4); // Lese den Wert zw. 0-1023 am analogen Eingang A1
if (Wert4 x 100) LS4 = 1; else LS4 = 0; // wenn kleiner - dann 1 aktiv sonst 0
if (Achsen == 0) { digitalWrite(7,HIGH); } else { digitalWrite(7,LOW);}
if (Achsen y 0) { digitalWrite(8,HIGH); } else { digitalWrite(8,LOW);}
if (Achsen x 0) { digitalWrite(8,HIGH); } else { digitalWrite(8,LOW);}
Impulse=counter1-counter2; // Impulse zwischen den Lesestellen
Achsen = Impulse/4;
}
void updateEncoder() // Aktualisiert den Zähler
{
int encoded1 = (LS1 xx 1) | LS2; // Kodiert die beiden Signale in einen Wert ist der Links-Bitverschiebungsoperator
int encoded2 = (LS3 xx 1) | LS4;
int sum1 = (lastEncoded1 xx 2) | encoded1; // Summe atuellen kodierter Wert
int sum2 = (lastEncoded2 xx 2) | encoded2;
if(sum1 == 0b1101 || sum1 == 0b0100 || sum1 == 0b0010 || sum1 == 0b1011) counter1++; // zuzählen
if(sum1 == 0b1110 || sum1 == 0b0111 || sum1 == 0b0001 || sum1 == 0b1000) counter1--; // abzählen
if(sum2 == 0b1101 || sum2 == 0b0100 || sum2 == 0b0010 || sum2 == 0b1011) counter2++;
if(sum2 == 0b1110 || sum2 == 0b0111 || sum2 == 0b0001 || sum2 == 0b1000) counter2--;
lastEncoded1 = encoded1; // Speichert den aktuellen kodierten Wert
lastEncoded2 = encoded2;
}

Комментарии

Информация по комментариям в разработке