Kedves Blogolvasó!
Két csatornás relé vezérlése? Mire is használható? 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, csak illeszteni kell a kész modult. 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. Nyilvá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.
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.
Két csatornás relé vezérlése – Arduino Forráskód:
#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.