Arduino 2
Die Sicherung eines Bahnübergang.28,12,2016
Hier ist ein großes Projekt ein Bü soll mit vielen Extras für die Sicherung der Bahnstrecke sorgen.
Man sieht zur Zeit nur den Arduino Nano mit seinem i/o Platinchen, daran ist noch die Servo-Verteilerplatine angeschlossen, so das man mit einem PWM - PIN gleich beide Schrankenbäume ansteuren kann.
Doch wofür ist den die Relaiskarte mit angeschlossen?
Eine alte Faller Wechselstrom Glocke wird akustisch vor den Zug warnen.
Die Funktion soll so ablaufen das durch einen Einschaltimpuls von einen Tastschalter das Läutewerk und die vier roten LEDs für drei Sekunden warnt und dann gehen die Schrankenbäume runter.
Wenn der Zug den Bü verlassen hat wird mit einem zweiten Tastschalter gleichzeitig das Läuten,Blinken ausgeschaltet und die Schrankenbäume geben die Strasse frei.
Wenn die zwei Servoböcke in den nächsten paar Tagen fertig geklebt sind geht es hier weiter mit der Beschreibung von meinem Automatischen Bahnübergang.
---17,02,2017 nun geht es langsam weiter, für die zwei Servos habe ich nun Aluhalter gebaut und ein Gestänge für die ansteuerung der Schrankenbäume habe ich auch schon vorbereitet.
Schön wenn man sich selber helfen kann mit meiner Fräsmaschine die Teile ausgefräst und weiter geht es.
Die zwei MS - Hülsen sind als Gleitlager vorgesehen, damit die Bohrung durch die Holzplatte nicht von der Gestängebewegung auf gefeilt wird.
07,10,2017 das ist mir erst heute aufgefallen, den Sketch habe ich vergessen hier mir hinein zustellen!?!!?!?
Damit ist es nun geschafft, viel Spass beim Bauen und Basteln ; )
-----------------------------------------------------------------------------------------
#include <Servo.h> // Variablen-Deklaration und Definition
// das ist für die Servoantriebe und muss überall wo es um die Schranke geht mit hinter die laufzahl geschrieben werden!
int Kreuz1 = 13; // BITTE NICHT IN KREUZ1 UMSCHREIBEN das geht NICHT!!!!
int Kreuz2 = 12;
int Kreuz3 = 11;
int Kreuz4 = 8;
int Kreuz5 = 5;
int Reed1 = 6;
int Reed2 = 7;
int buttonState = 0;
int Schranke1 = 9;
int Schranke2 = 10;
unsigned int TimerSchrankeZu = 0;
Servo Schranke1a; // das a hinter der Zahl ist wichtig und darf nicht vergessen werden!
Servo Schranke2a;
unsigned long aktMillis, vorMillis; // aktuelle Millisekunden und vorherige
byte b = 0;
boolean KreuzAnAus = LOW; // boolean Kreuz1-x an low werden über internenwiederstand angeschlossen auch ein relais an kreuz3 wird zum läutwerk geschaltet
boolean Kreuz2AnAus = LOW;
boolean Kreuz3AnAus = LOW;
boolean Kreuz4AnAus = LOW;
boolean Kreuz5AnAus = LOW; // hier wird das alte spulenläutwerk über ein relais mit optokoppler angesteuert!!!
boolean blink100ms = LOW;
boolean blink500ms = LOW;
boolean blink1000ms = LOW;
//boolean Schranke1u2SollZu = LOW;
// Funktionsdeklaration
void Funktion100ms();
void setup() // put your setup code here, to run once:
{
aktMillis = vorMillis = 0;
pinMode(Kreuz1, OUTPUT);
pinMode(Kreuz2, OUTPUT);
pinMode(Kreuz3, OUTPUT);
pinMode(Kreuz4, OUTPUT);
pinMode(Kreuz5, OUTPUT);
pinMode(Reed1, INPUT);
pinMode(Reed2, INPUT);
digitalWrite(Reed1, HIGH);
digitalWrite(Reed2, HIGH);
Schranke1a.attach(Schranke1);
Schranke2a.attach(Schranke2);
Schranke1a.write(10);
Schranke2a.write(7);
}
void loop() // put your main code here, to run repeatedly:
{
aktMillis = millis();
if( aktMillis < vorMillis ) // Wird Bei Variablenüberlauf zurücgesetzt
aktMillis = vorMillis = 0;
if( aktMillis - vorMillis >= 100)
{
Funktion100ms();
}
buttonState = digitalRead(Reed1);
if(buttonState == LOW)
{ // Schranken ZU
KreuzAnAus = HIGH;
TimerSchrankeZu = 30; // Timer auf Wunschzeit setzen auf 3 Sekunden
}
else
{
buttonState = digitalRead(Reed2);
if(buttonState == LOW)
{ // Schranken AUF
KreuzAnAus = LOW;
Schranke1a.write(10);
Schranke2a.write(7);
TimerSchrankeZu = 0; // Timer Reset nicht zwingend erforderlich
}
}
digitalWrite(Kreuz1, KreuzAnAus && blink500ms);
digitalWrite(Kreuz2, KreuzAnAus && !blink500ms); // ausrufezeichen kehr die funktion um!!!
digitalWrite(Kreuz3, KreuzAnAus && blink500ms);
digitalWrite(Kreuz4, KreuzAnAus && !blink500ms);
digitalWrite(Kreuz5, KreuzAnAus && !blink500ms); //ist der anschlußpin für das läutwerk-relais!!
}
// Die Funktion 100ms wird alle 100 ms aufgerufen
void Funktion100ms()
{
b++;
if(b == 0)
b = 1;
blink100ms = !blink100ms;
if((b % 5) == 0 )
blink500ms ^= 1;
if((b % 10) == 0 )
blink1000ms ^= 1;
if(TimerSchrankeZu > 0) // Ist Timer/Zähler > 0 ?
{//ja
TimerSchrankeZu--;
if((TimerSchrankeZu == 0) && KreuzAnAus)
{
Schranke1a.write(100);
Schranke2a.write(95);
}
}
vorMillis = aktMillis;
}
-------------------------------------------