Dnes vám popíšu zapojení a program pro řízení přejezdového zařízení AŽD typ 71.
Použité komponenty:
1 x Arduino Pro Mini (Nano) - Aliexpress (cca 35 CZK klon)
1 x DFPlayer MP3 (Mp3-TF-16P) - AliExpress (cca 30 CZK verze mp3-tf-16p)
4 x led červená
2 x led bílá
1 x spínač dle volby, možné i magnetické spínače do kolejí
1 x odpor 10 k pro spínač
6 x odpor 330 ohmů pro led
1 x odpor 1 k pro pin TX propojení modulů (ochrana)
1 x microSD paměťová karta - formát FAT32
1 x repro 3 W 4 ohmy
Použité komponenty:
1 x Arduino Pro Mini (Nano) - Aliexpress (cca 35 CZK klon)
1 x DFPlayer MP3 (Mp3-TF-16P) - AliExpress (cca 30 CZK verze mp3-tf-16p)
4 x led červená
2 x led bílá
1 x spínač dle volby, možné i magnetické spínače do kolejí
1 x odpor 10 k pro spínač
6 x odpor 330 ohmů pro led
1 x odpor 1 k pro pin TX propojení modulů (ochrana)
1 x microSD paměťová karta - formát FAT32
1 x repro 3 W 4 ohmy
microSD karta - do kořenového adresáře nahrajte zvuk s názvem 0001.mp3
Zvuk AŽD 71 můžete stáhnout zde.
Zapojení:
Pin 4 a 5, 7 a 8 - červená světla (4 a 7 jsou levá, 5 a 8 jsou pravá)
Pin 6 a 9 - bílá světla
Pin 12 - spínač proti plus (odpor proti GND)
Napájení:
5 V všechny moduly.
Video: (Pozor na videu je jiná verze se základním Pull-Up rezistor spínačem proti GND a starší verzí programu, která způsobovala krátkodobé nesvícení ani jednoho červeného světla ve výstraze, což originál nezpůsobuje - verze programu v obsahu je již opravena)
#include <SoftwareSerial.h> //vejrov.cz
SoftwareSerial mySerial(2, 3); // RX, TX
uint8_t play1[10] = { 0X7E, 0xFF, 0x06, 0X03, 00, 00, 0x01, 0xFE, 0xF7, 0XEF};
int red1 = 4;
int red2 = 5; //vejrov.cz
int red3 = 7; //vejrov.cz
int red4 = 8;
int white1 = 6;
int white2 = 9;
int ledDelay = 400;
bool wait = true;
const int buttonPin = 12;
int buttonPushCounter = 0; // počítadlo stlačení tlačítka
int buttonState = 0; // současný stav tlačítka
int lastButtonState = 0; // předchozí stav tlačítka
void setup()
{
pinMode(red1, OUTPUT); //vejrov.cz
pinMode(red2, OUTPUT);
pinMode(red3, OUTPUT);
pinMode(red4, OUTPUT);
pinMode(white1, OUTPUT);
pinMode(white2, OUTPUT);
mySerial.begin(9600);
Serial.begin(9600);
pinMode(buttonPin, INPUT);
}
void loop()
{
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
}
else {
Serial.println("off");
}
}
lastButtonState = buttonState;
//vejrov.cz
if (buttonPushCounter % 2 == 0) {
if (wait == true){delay (6000);} //delay - délka zpoždění bílého světla 6000 = 6 sekund - max 32 000 = 32 sekund
wait = false;
digitalWrite(white1, HIGH);
digitalWrite(white2, LOW);
delay(ledDelay);
digitalWrite(white1, LOW);
digitalWrite(white2, HIGH);
delay(ledDelay); //vejrov.cz
}
else {
wait = true;
for (int i=0; i<10; i++) {mySerial.write( play1[i]);}
delay(10); //vejrov.cz
digitalWrite(red1, HIGH);
digitalWrite(red3, HIGH);
delay(ledDelay); //vejrov.cz
digitalWrite(red1, LOW);
digitalWrite(red3, LOW);
delay(100);
digitalWrite(red2, HIGH);
digitalWrite(red4, HIGH);
delay(ledDelay);
delay(200); //vejrov.cz
digitalWrite(red2, LOW);
digitalWrite(red4, LOW);
}
}