Arduino 5, AŽD přejezdové zařízení bez závor (LED + zvuk)

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

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)


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


Arduino 4, Osvětlení modelu automobilu (Policie, Hasiči, Záchranka a civil)

V dnešním programování si ukážeme jak naprogramovat Arduino, které použijeme jako řídící modul pro osvětlení modelu auta. Modul zastane všechny možné varianty osvětlení modelu, jak civilního, tak záchranářského účelu. Doporučuji použít Arduino Pro Mini, které se třeba do náklaďáku 1:87 vejde.

Obvod spíná LED, který vytváří patřičný efekt.

Výstupy:
Pin 2 = maják IZS /3 rychlé zákmity s pauzou/
Pin 3 = maják IZS /3 rychlé zákmity s pauzou/
(Pin 2 a Pin 3 se střídají v blikání - tedy možné použít PIN 2 např. pro levou půlku majáku a Pin 3 pro pravou půlku majáku)
Pin 4 a 5 = přední světlomety /trvale svítí/
Pin 6 a 7 = zadní světla /trvale svítí/
Pin 8 až 11 = blinkry, směrová světla /blikají ve stejném intervalu/

Zapojení: (schema je orientační a výstupy na schematu neodpovídají nastavení)


Napájení:

Pro napájení Arduina používám moduly s LM2596, které kupuji v číně.

Video:

Program:

int ledDelay = 50; // delay by 50ms
int majak = 2;
int majak2 = 3;
int predek = 4;
int predek2 = 5;
int zadek = 6;
int zadek2 = 7;
int blinkr = 8;
int blinkr2 = 9;
int blinkr3 = 10;
int blinkr4 = 11;

void setup() {
pinMode(majak, OUTPUT);
pinMode(majak2, OUTPUT);
pinMode(predek, OUTPUT);
pinMode(predek2, OUTPUT);
pinMode(zadek, OUTPUT);
pinMode(zadek2, OUTPUT);
pinMode(blinkr, OUTPUT);
pinMode(blinkr2, OUTPUT);
pinMode(blinkr3, OUTPUT);
pinMode(blinkr4, OUTPUT);

}

void loop() {

digitalWrite(predek, HIGH); // predni svetlo 1 ON
digitalWrite(predek2, HIGH); // predni svetlo 2 ON
digitalWrite(zadek, HIGH); // zadni svetlo 1 ON
digitalWrite(zadek2, HIGH); // zadni svetlo 2 ON

digitalWrite(majak, HIGH); // majak ON
delay(ledDelay); // wait 50 ms

digitalWrite(blinkr, HIGH); // blinkry ON
digitalWrite(blinkr2, HIGH); // blinkry 2 ON
digitalWrite(blinkr3, HIGH); // blinkry 3 ON
digitalWrite(blinkr4, HIGH); // blinkry 4 ON

digitalWrite(majak, LOW); // majak OFF
delay(ledDelay); // wait 50 ms

digitalWrite(majak, HIGH); // majak ON
delay(ledDelay); // wait 50 ms

digitalWrite(majak, LOW); // majak OFF
delay(ledDelay); // wait 50 ms

digitalWrite(majak, HIGH); // majak ON
delay(ledDelay); // wait 50 ms

digitalWrite(majak, LOW); // majak OFF
delay(ledDelay); // wait 50 ms

digitalWrite(blinkr, LOW); // blinkry OFF
digitalWrite(blinkr2, LOW); // blinkry 2 OFF
digitalWrite(blinkr3, LOW); // blinkry 3 OFF
digitalWrite(blinkr4, LOW); // blinkry 4 OFF

delay(150); // delay midpoint by 100ms

digitalWrite(majak2, HIGH); // majak 2 ON
delay(ledDelay); // wait 50 ms

digitalWrite(majak2, LOW); // majak 2 OFF
delay(ledDelay); // wait 50 ms

digitalWrite(majak2, HIGH); // majak 2 ON
delay(ledDelay); // wait 50 ms

digitalWrite(majak2, LOW); // majak 2 OFF
delay(ledDelay); // wait 50 ms

digitalWrite(majak2, HIGH); // majak 2 ON
delay(ledDelay); // wait 50 ms

digitalWrite(majak2, LOW); // majak 2 OFF
delay(ledDelay); // wait 50 ms

delay(150); // delay midpoint by 100ms
}

Arduino 3, Servo s časovačem

Všude jsem hledal program na ovládání serva. Ano všude jsem našel, ale pokud chcete do toho časovač a nebo rychlost, už je toho mnohem méně a co tahle všechny funkce najednou, tak to jsem už nenašel :D

Dneska si ukážeme jak rozpohybovat servo. Naučit ho kam má chodit, jak rychle a kdy. Servo = modelářské servo na 5V, nijak upravené. PS: toto zapojení nepotřebuje odrušení, jelikož v pauze (delay) nekmitá!

Nastavení:
X - z pozice přesuň
X - do pozice přesuň
X - rychlost (1 nejpomalejší)
Modrý text lze zkopírovat pod sebe podle počtu cyklů za sebou.

Zapojení:


PIN 13 - servo řídící vodič



Použití: Používám jej jako pohyb postavičky sekáče s kosou, tedy 10 krát mám pohyb serva a pak náhodná pauza. Další použítí, je třeba pohyb bagru, kohouta a nevím co vás ještě napadne na kolejišti rozhýbat.

Video: Arduino ovládá servo, které hýbe s postavičkou sekáče s kosou.

Program:
#include <Servo.h>        
Servo servo;
int pos = 0;
int value = 0;

void setup() {  
  servo.attach(13);                                // nastavení řidícího signálu serva na pin 13
  Serial.begin(9600);
}
void loop() 
  servo.attach(13);                                // pripoji servo k pinu

  for (pos = 0; pos <= 80; pos +=5){     // hýbne servem z pozice 0 do 80 s danou rychlostí
  servo.write(pos);   
  value = servo.read();
  Serial.println(value);
  delay(20);            
}
  
  for (pos = 80; pos >= 0; pos -=3){      // hýbne servem z pozice 80 do 0 s danou rychlostí
  servo.write(pos);  
  value = servo.read();
  Serial.println(value);
  delay(20);            
}

  servo.detach();                                  // vypne servo od pinu, protikmit funkce
  delay(random(10000,32000));          // cekej a nahodne spust (cekej od 10000 do 32000 nahodne) maximum - 32000 a minimum 1

}

/// sekce for (pos... je potřeba duplikovat pro případ sekáče minimálně tolíkrát, kolikrát má seknout. Defaultní program je jen s jedním seknutím nápřah/sek.

Arduino 2, Napájení - power modul 5V 3A

Dobré napájení je důležitou součástí správné funkce modulů. Já osobně napájím moduly centrálním ATX zdrojem k PC o výstupním napětí 12 a 5V. Tedy již není potřeba nějak upravovat napájení a stačí využít napájení 5V ze zdroje.

Pro ostatní aplikace používám DC-DC moduly buď s XL4015 na 5A a nebo LM2596S na 3A v rozpětí nastavení 3 - 40 V. Tedy jen mezi DC zdroj vložím tento modul z číny a potenciometrem nastavím výstupní napětí. Práce s těmito moduly je velice jednoduchá.

Poznámka: ATX zdroj sám nefunguje, je potřeba propojit power a gnd pin a tak celý ATX uvést do chodu. 

Arduino 1, Imitace sváření - světelný efekt

I já jsem přičichl k Arduinu a vzhledem k možnosti nákupu klonů v číně, je to nejlevnější a nejrychlejší varianta jak vyrábět moduly. Jako První modul jsem si připravil simulátor sváření - tzv. svařeč. Program je uzpůsoben pro moduly Pro Mini a nebo Nano, jelikož jsou malé a vejdou se všude.

Obvod sepne LED, který náhodnou funkcí kmitá po určitý čas a pak vypne. Funkcí delay (čekej) počkáme do dalšího cyklu.

Zapojení:

PIN 3 - výstup pro led (nutno zapojit předřadný odpor 680 ohm)


Napájení:

Pro napájení Arduina používám moduly s LM2596, které kupuji v číně.

Program:
int ledPin = 3; // LED pripojena na digitalni pin 3

void setup()
{
 pinMode(ledPin, OUTPUT);
}

void loop()
{
 int i,count;
 count=random(10,60);
 for (i=0;i<count;i++)
 {
  digitalWrite(ledPin, HIGH); // LED on
  delay(random(60));
  digitalWrite(ledPin, LOW); // LED off
  delay(random(200));
 }
 delay(random(1000,20000)); // cekej nahodny cas
}