Két csatornás relé vezérlése Arduinoval

Ebben a példában megnézzük, hogy miként lehet vezérelni egy két csatornás relé modult, ami egyébként készen kapható az arudinohoz. Az forráskód csak a relé vezérlésre terjed ki, de a kódot ha kiegészítjük, akkor szinte bármilyen modullal kombinálható. Vegyünk egy egyszerű hétköznapi példát. Szinte minden garázs kelléke a mozgásérzékelős lámpa, és ha csak ezt vesszük alapul akkor máris kombinálható a relé modul egy SR501-es mozgásérzékelővel, és ugyanezt a hatást érhetjük el. Vezérelhetünk vele világítást, szivattyút, garázskaput, és szinte bármit ami eszünkbe jut. Nyílván a relének is vannak határai mert maximum 250V és 10 A amit váltóáram esetében elbír, egyenáram esetében pedig 30V és 10 A a tűréshatára.

Akkor nézzünk egy egyszerű kapcsolást, amivel egy ledet kapcsolhatunk.

2 ch relay_bb

 

A kapcsolásban a nyomógomb megnyomásával együtt a relé meghúz és a kód miatt úgy is marad. A nyomógomb ismételt megnyomására a relé kienged. A relé meghúzásval egyidőben felvillan a 13-as kimenetre helyezett led is és a relére bekötött led is.

 

#define LED 13           // led világítás
#define BUTTON 2         // nyomógomb
#define RELAY 11         // Relé vezérlés
 
 int val=0;               // val a nyomógomb beolvasott érték 
                                               
 int old_val=0;           // az old_val az előzőleg beolvasott val érték
                                              
 int state=0;             // 0=kiold a relé 1=meghúz a relé

void setup(){
 pinMode(LED, OUTPUT);       // Led deklarálása kimenetként
 pinMode(BUTTON, INPUT);     // nyomógomb deklarálása bemenetként
 pinMode(RELAY, OUTPUT);     // relé kimenet deklarálása
}

void loop(){
 val=digitalRead(BUTTON);    // beolvassa a nyomógomb állapotát 
                                  
// Nyomógomb állapotának és előző állapotának összevetése
if ((val==HIGH) && (old_val==LOW)) 
// Ha a nyomógomb nyomva van : 1-0 akkor state = 1-0=1 ----> 
// következő gombnyomásra amikor a state már 1 akkor state = 1-1=0  
 {
   state = 1 - state;
   delay(10);
 }

 old_val=val;      // Mivel a nyomógomb felengedett ezért nullázza a old_val változót

 if (state == 1){
  digitalWrite(LED,HIGH);        // LED bekapcsolása
  digitalWrite(RELAY,HIGH);      // Relé bekapcsolása
 }else{
  digitalWrite(LED,LOW);         // LED kikapcsolása
  digitalWrite(RELAY,LOW);       // Relé kikapcsolása
 }
} 

Abban az esetben, ha valakinek a relé duplán húzna meg akkor az azért van, mert a beolvasás utáni feltételvizsgálatban a state változó átállításánál a késleltetés rövid időre van állítva. Sok esetben a nyomógombot az ujjunkkal rövidre zárjuk véletlenül, amikor a próbapanelre van berakva. Ezt elkerülendő, a késleltetést ha 500-ra állítjuk akkor az érintést követő rövidre zárás miatti dupla jel nem fogja átállítani a “val” változó értékét. Ezzel fél másodpercre állítjuk a beolvasások közötti szünetet a 10 ms-os idő helyett. Ezt orvosolhatjuk azzal is hogy beillesztünk a kódba vagy az elejére vagy a végére késleltetést.

 

 

(Statisztika: 62 megtekintés)

Vélemény, hozzászólás?

Az email címet nem tesszük közzé.