Arduino 8, IR spínač pro přejezdové zařízení

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é)


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ů.

Funkce viz. video (led indikuje sepnutí přejezdového zařízení):


Program:
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);
  }
}