Použité komponenty:
1 x Arduino Pro Mini (Nano) - Aliexpress (cca 35 CZK klon)
4 x IR (infrared) modul
1 x odpor 680R pro LED
1 x LED dioda (místo led pak spínací prvek, např. 5V relé)
4 x IR (infrared) modul
1 x odpor 680R pro LED
1 x LED dioda (místo led pak spínací prvek, např. 5V relé)
Program:
Stav klidu - nic se neděje
1 funkce z leva - vlak sepne A (nic se nestane) dále sepne B (spustí se výstražníky) -> projede sledovaným úsekem a následně sepne C (nic se nestane) a sepne D (vypne výstražníky)
2 funkce z prava - vlak sepne D (nic se nestane) dále sepne C (spustí se výstražníky) -> projede sledovaným úsekem a následně sepne B (nic se nestane) a sepne A (vypne výstražníky)
3 funkce při posunu (z leva) - vlak sepne A (nic se nestane) dále sepne B (spustí se výstražníky) -> neprojede celým sledovaným úsekem a následně se vrací a sepne B (nic se nestane) a sepne A (vypne výstražníky) - totáž platí při vjezdu z pravé strany do D a C
Poznámka - vlak může zastavit i v poloze kteréhokoli čidla, v tom momentě se zaznamenává pouze poslední funkce a při sepnutí dvou čidel zároveň má přednost to čislo první sepnuté.
Z důvodu posunu jsou použita 4 čidla, která hlídá železniční přejezd v obou směrech vždy pro vjezd a tak i výjezd. Díky tomuto je možný 100% posun s automatickým ovládáním přejezdových výstražníků.
Z důvodu posunu jsou použita 4 čidla, která hlídá železniční přejezd v obou směrech vždy pro vjezd a tak i výjezd. Díky tomuto je možný 100% posun s automatickým ovládáním přejezdových výstražníků.
Funkce viz. video (led indikuje sepnutí přejezdového zařízení):
int ledPin = 8;
int irApin = 3; //vypínací
int irBpin = 2; //spínací
int irCpin = 4; //spínací
int irDpin = 5; //vypínací
byte leds = 0;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(irApin, INPUT);
pinMode(irBpin, INPUT);
pinMode(irCpin, INPUT);
pinMode(irDpin, INPUT);
}
void loop()
{
if (digitalRead(irApin) == LOW)
{
digitalWrite(ledPin, HIGH);
}
if (digitalRead(irBpin) == LOW)
{
digitalWrite(ledPin, LOW);
}
if (digitalRead(irCpin) == LOW)
{
digitalWrite(ledPin, HIGH);
}
if (digitalRead(irDpin) == LOW)
{
digitalWrite(ledPin, LOW);
}
}