26. Relee juhtimine
<- eelmine peatükk
järgmine peatükk ->
26.0. Varem õpitu meenutuseks
Relee sisse ja välja lülitamise teemat alustades meenutame surunupp-lülitit neljandast peatükist.
Uurige kordamiseks neljandat peatükki. Me ei lülitanud niivõrd midagi „sisse“ või „välja“ vaid pigem andsime edasi elektrilisel teel signaali 0 ja signaali 1.
Kusjuures nii 0 kui ka 1 korral saame programmi kirjutada midagi, mida programm teeb või tegemata jätab.
26.1. Eesmärk ja selgitused
Tutvume releega. Tegemist on lülitite komplektiga, mis on juhitav elektrilise impulsiga. Alustuseks konstrueerime skeemi, mille puhul relee on juhitav vaid tavalise lülitiga. Räägime kindlasti ka ohutusnõuetest: relee ei ole enam ohutu mänguasi… Oleme jõudmas tõsielu-robootikale üsna lähedale.
Lüliti saame asendada mistahes muu seadmega, mis annab meile võimaluse edastada muutujat, mis mõistagi on kas 0 või 1 väärtusega kirjeldatav. Ka nn „nutiseade“ sobib selleks. Seejuures nutiseade ei tee midagi oluliselt nutikamat kui meie poolt rakendatud odav lüliti. Milles seisneb nutiseadme nutikus? See seisneb meie kirjutatud programmides ning seadme võimekuses neid täita. Saame näiteks ka temperatuurianduri väljundviigult Arduino poolt loetavat mõõtmistulemust kasutada signaalide 0 ja 1 genereerimiseks if-tingimuslausega. Kas õpitust meenub veel võimalusi? Serial monitor näiteks?
Selle peatüki järel
NB!
Tunnis me teadlikult ei kasuta 220V pinget, ehkki mõni relee võimaldaks minna ka vaat et 250V pingeni välja… Suuname õpilasi tähelepanu pöörama kõigele, mis elektrit juhtida võiks.
Õpilane on mõelnud elektriohutuse üle. Kuhugi ei ole kiiret: me ei pea Arduinoga töötamise õpetamiseks tingimata juhtima laualampi vooluvõrgust: näite tarvis piisav on LED-riba juhtimine—saame kasutada pinget 9V.
Mõtleme korra veel selle üle, mis võiks juhtuda siis, kui väiksem õde või vend kodus võtaks pihku relee, mis on ühendatud vooluvõrguga? Releesid on erinevaid, ent ohutusnõuded peavad olema kantud ettenägelikkusest. Õnnetused juhtuvad mitme teguri koosmõjul—nähakse aga sageli vaid mõnda tegurit korraga.
Ohutusteemat mainime korduvalt.
26.2. Töövahendid:
26.3. Kahteistkümnenda tunni tegevused
26.3.1. Koostame Arduino-skeemi
Kõigepealt koostame surunupp-lülitiga LED juhtimiseks vajaliku vooluahela. Sellele saame lisada relee-osa.
Relee abil sisse-välja lülitatava vooluahela relee külge ühendamise eel uurime releele tähistatud kinnistukohti: vaatleme markeeringuid NO (normally open), C või COM tähistusega (common) ja NC (normally closed).
Et mitte luua petlikku muljet ohutust seadmest—me ei nimeta neid kolme (NO, COM ja NC) enam viikudeks vaid nimetame neid kontaktideks. Järgnevatelt fotodelt näete, et kontaktid ühendatakse nüüd juba kruvidega: mängu tulevad kruviklemmid.
Selline tõsine muutus võiks anda aimu sellest, et ohutus on nüüd vaja läbi mõelda juba uuel tasemel. Enam ei ole tegu viikudega, millel kuni 5V maksimum pinge.
Teisel pool aga leiame harjumuspärased GND, IN1 ja VCC—neid nimetame endiselt viikudeks. Neid viikusid vajame selleks, et juhtida kruviklemmidel toimuvat.
26.3.2. Teooria: kuidas töötab relee
Relee on tegelikult elektriliselt sisse-välja lülitatav lüliti. Lihtne skeem, milles on madalam pinge, ühendab elektromagneti abil vooluahela, milles võib olla la kõrgem pinge: nõrga juhtvooluga saame juhtida näiteks tööstusliku vooluseadme sisse-välja lülitamist.
Ajaloost teame, et sellist vooluahela ühendamist on kasutatud juba telegraafi aegadest alates: releest saame rääkida kui 19.sajandi keskpaigast kasutusele võetud vahendist.
Vaatame releeskeemil antud kruviklemmide tähistusi: need on NC (normally closed), C (common) ja NO (normally open).
Uurime relee juhtmekinnituste kombinatsioone.
COM-NO: normaaljuhul ei lase läbi voolu:
Kui testri ühe elektroodiga puudutada COM-tähistusega kruviklemmi, teisega aga NO-tähistusega kruviklemmi (NO = normally open = normaaljuhul avatud: NO märgib avatud vooluahelat), siis selline kontroll annab tulemuseks, et COM ning NO kruviklemmide ühendamine ei lase läbi voolu. Meil on tegemist normaaljuhul väljalülitatud olekus lülitiga.
COM-NC: normaaljuhul laseb läbi voolu:
Kui aga testri ühe elektroodiga puudutada COM-tähistusega kruviklemmi ja teisega NC-tähistusega kruviklemmi (NC = normally closed = normaaljuhul suletud: NC märgib suletud vooluahelat), siis selline kontrollimine annab tulemuseks, et COM ning NC klemmide omavahel ühendamine laseb läbi voolu. Meil on tegemist normaaljuhul sisselülitatud olekus lülitiga.
26.3.3. Ühendame relee
Talitame nii, et ilma vooluta olekus oleks Arduino-väline vooluahel välja lülitatud—st vooluahel vanaaegse elektripirni ja toite vahel on normaal-olekus välja lülitatud. Mõelge, miks talitame nii? Kuidas võiks selline valik mõjutada ohutust?
Mõtlemisaineseks: kui teeme roboti, millel on rattad ja ratastel pidurid—kas pidurid võiks olla ilma vooluta roboti nö „mittetöises puhke-olekus“ sisse lülitatud olekus või välja lülitatud olekus. Kas võimalikust veerema pääsemisest põhjustatud õnnetuse vältimiseks peaks üldjuhul rattad olema seisma pidurdatud olekus või peaksid olema rattad vabalt veereda võimaldavas olekus? Kas raske robotauto rattad peaks blokeeruma siis, kui ei ole nende üle elektroonilist kontrolli—st juhtahelas puudub pinge?
Releega seoses—kas Arduino poolse juhtimise kadumise korral toite katkemise korral peaks katkema ka kõrgemat pinget omav vooluring? Robot peab olema ohutu ka neil juhtudel, kui meil ei pruugi tema üle enam täit kontrolli olla. Roboti käitumine saab peegeldama üsna täpselt meie tehtud või ka tegemata jäetud mõttetööd. Mõttetöö aluseks on aga eetiline tõekspidamine—õnnetus ei tohi olla võimalik ka neil juhtudel, mida me seda mõttetööd tehes veel ei pruugi täies mahus ette näha osata.
Vaadake järgnevat skeemi ja mõelge, millise kruvidega releeklemmi külge ühendate 9V toite. Tahate juhtida 9V valgustit: kuhu on mõistlik ühendada 9V patareiploki miinus?
Lülitit on tark ühendada ikka pigem toite plussi külge, ehkki lülitamine ju toimib ka siis, kui lüliti ühendada miinuse külge.
Mõtelgem korraks näitele gaaslahendustoruga—ühendades selle kodus olmevooluallikaga nii, et lüliti jääb negatiivse maa-juhtme peale ja seejärel jälgides väljalülitatud gaaslahendustoru ööpimeduses on võimalik veenduda, kas antud elektritarvik on pinge all. Kuna katkestasite vooluahela nulljuhtme peal—siis ka väljalülitatult on pinge toime õrnalt märgatav—gaaslahendustoru läbib kerge ergastatud virvendusena nähtav valgusefekt. Efekt tuleb sellest, et vahelduvvoolu pinge alla jäetult läbib gaaslahendustoru lekkevool—vool leiab ikka tee: GND on vaat et kõikjal kus elekter suudab läbi pugeda. Näiteks leidub natuke niiskem ja kehvema isolatsiooniga juhtmeühenduskoht…
Mõistlik on niisiis panna lüliti (vooluahela katkestamise koht) ikkagi mitte miinus-juhtmele vaid pluss-juhtmele. Toimime samamoodi ka releega—vt skeemi. Kasutame võimaluse korral ka kokkuleppelist värvikoodi.
26.3.4. Programmi leiate siit
Käivitage see Arduinol.
int LYLITIasend = 0; int LYLITIviik = 12; int LEDviik = 10 ; int RELEEviik = 7; void setup() { // put your setup code here, to run once: pinMode (LYLITIviik, INPUT); pinMode (LEDviik, OUTPUT); pinMode (RELEEviik, OUTPUT); digitalWrite(RELEEviik, HIGH); Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: LYLITIasend = digitalRead (LYLITIviik); Serial.println(LYLITIasend); /*nii saame näha, mis on väärtuseks--kas 0 ja üks klapivad?*/ /* lülitiasendi kohta info jälgitav Serial monitoriga!*/ if (LYLITIasend != 0) { /*kui lülitit vajutada, st kui lüliti ei ole enam "puhkeasendis", siis signaali väärtus ei ole enam 0. */ digitalWrite(RELEEviik, LOW);/*kui vajutasime lülitit, siis andsime relee LOW kaudu relee poolt hallatavale vooluahelale pinge*/ /*relee jaoks LOW paneb relee avama releega ühendatud vooluahela*/ /*ja LED risti vastupidi: järgmisena śeesama lülitivajutus (LYLITIasend != 0) käivitas ka märgutule--LED HIGH paneb LED särama*/ digitalWrite (LEDviik, HIGH); /*märgutulega on risti vastupidi releele: LOW ja HIGH töötavad nii nagu varem õppisime. Märgutuli sai pandud selleks, et see võimaldab täiendavat kontrolli skeemi toimimise üle.*/ delay (100); /*märgutuli vältab kümnendik sekundit*/ digitalWrite (LEDviik, LOW); /*märgutuli jääb ilma pingeta*/ delay (5000); digitalWrite (RELEEviik, HIGH);/*vastupidiselt märgutulele jääb relee HIGH korral "puhkeasendisse"--katkestab relee poolt hallatava vooluahela*/ delay (1000); digitalWrite (RELEEviik, LOW); delay (5000); digitalWrite (RELEEviik, HIGH); /*erinevalt eelnenud töövahenditest: HIGH on relee puhul positsioon, milles relee lüliti ei anna releega juhitavale vooluahelale pinget*/ } }
Uurige programmi tööd.
Muutke näiteks ära RELEEviik HIGH ja RELEEviik LOW. Mida märkate? Kuidas selgitate erinevust? NB! Kuigi juhime nende viikudega kruviklemmiks nimetatud osade ühendamist, on juhtimises osalejad ikka endiselt viigud—5V juhtvooluga toimetajad.
Harjutus A
HIGH ja LOW?
0 ja 1!
Mõlemale saame anda tähendusi, mida vajame!
Kirjeldage enda jaoks, mis asi on lüliti. Pange enda mõte kirja.
Lüliti versus surunupp-tüüpi lüliti versus muud sisse-välja „lülituslikud“ võimalused. Palju neid oleks? Loetlege ja lisage neile ka programmi vms vahendiga tehtav. Võite koostada ka tabeli, millest näete, et sisult sarnast vooluahela katkestamist-ühendamist on erinevateks lahendusteks võimalik valida vastavalt selle omadustele. Igale situatsioonile valime kõige sobilikuma lahenduse.
26.4. Siit edasi nuputamist väikese etteütlemisega
Saame lisada oma releele lüliti asemele sinihamba—kordame nii ka eelmist tundi. Selle materjali võime jätte ka kodutööks
26.3.4. Programmi leiate siit
Käivitage see Arduinol.
#include <SoftwareSerial.h> /*kasutame SoftwareSerial library */ SoftwareSerial noiaHAMMAS(10, 11); /* anname sinihmabale nime: tarkuseHAMMAS ; määrame viigud: RX=10 ning TX=11. */ //int juhtimis_LED = 13; int RELEEviik = 7; void setup() { //pinMode(juhtimis_LED, OUTPUT); Serial.begin(9600); /*käivitame serial monitori*/ noiaHAMMAS.begin(9600); /* käivitame sinihamba */ /*AT testimiseks 38400, muidu endiselt 9600 */ /*relee jaoks:*/ pinMode (RELEEviik, OUTPUT); digitalWrite(RELEEviik, HIGH); Serial.println("kui on programmis baud rate 38400, siis saad anda AT käsklusi, kui suhtled, siis 9600--kontrolli programmiteksti void setup osa!"); /* Kui 38400 baud rate ja muu on ka korras, siis Serial monitorille käsu AT sisestamise järel ilmub vastus OK. */ /* Leidke AT käsklused, kuidas uurida järgi sinihamba nimi ja siis seda muuta siit: https://www.itead.cc/wiki/Serial_Port_Bluetooth_Module_(Master/Slave)_:_HC-05 */ } void loop() { // info saatmine sinihambalt temaga ühendatud terminalile: saadetava info kirjutame sinihambaga seotud Serial monitor aknasse. if (noiaHAMMAS.available()) /* vt https://www.arduino.cc/en/Reference/SoftwareSerialAvailable available() funktsioon võimaldab juba serial receive puhvrisse loetud infot töötlusse võtta. */ Serial.write(noiaHAMMAS.read()); char muutuja = noiaHAMMAS.read(); if (muutuja == '1'){ Serial.print("muutuja on: "); Serial.println(muutuja); //digitalWrite (juhtimis_LED, HIGH); digitalWrite(RELEEviik, LOW); Serial.print("süütasid releega riba-ledid: RELEEviik, LOW "); /*saame näiteks '1' abil ka vilkuma panna--kui lisame midagi sellist:*/ //delay(10000); //digitalWrite (kontrollLED, LOW); } else if (muutuja == '0'){ Serial.print("null_muutuja on: "); Serial.println(muutuja); //digitalWrite (juhtimis_LED, LOW); digitalWrite (RELEEviik, HIGH); Serial.print("kustutasid releega riba-ledid: RELEEviik, HIGH "); } // info saatmine terminalilt sinihambale: /* töötab kui serial monitorile midagi kirjutate*/ if (Serial.available()){ noiaHAMMAS.write(Serial.read()); } }
Hoiatus: ei hakka tööle kui baud rate on vale!
NB!
9600 baud rate puhul toimib side.
NB!!
AT käsklustega juhtida saab sinihammast 38400 juures.