14. LED heleduse muutmine vastavalt keskkonna valgustugevusele.
<- eelmine peatükk
järgmine peatükk ->
14.0. Seosed eelmiste peatükkidega
Meenutame kolme peatükki eelnenust: teises peatükis LED vilgutamist, viiendas peatükis LED juhtimist lülitiga ning seitsmendas peatükis fototakistiga korjatud andmete kuvamist arvuti ekraanile—Serial monitori aknasse. Võrdlesime fototakistit seitsmendas peatükis ka lülitiga—nüüd paneme ta ka „lülitina“ tööle—ta on endiselt INPUT rollis; meenutame, milleks kasutasime Analog-in viiku. Kas meenub, kus asuvad Analog-In viigud Arduinol.
14.1. Eesmärk ja selgitused
Peatüki eesmärgiks on tuua välja seoseid peatükkide vahel ning neid seoseid rakendada. Näitena on valitud LED heleduse juhtimine fototakistilt tuleva signaaliga.
Peatüki läbimise järel on õpilasel
ning
14.2. Töövahendid:
14.3. Tegevused
Kuna selle peatüki üks eesmärke on suuta vooluahelat koostada vaid programmi põhjal, siis sedakorda ühendamise kohta skeemi juurde ei pane. Skeemi kohta leiab näiteid varasematest peatükkidest—tasub vaadata viiendat ja seitsmendat peatükki. (Kuidas ühendasime lülitit? Kuidas ühendasime valgustundlikku takistit?)
NB!
Kui takisti valesti ühendada, siis me ei saa korralikult töötavat vooluahelat. Takisti enda ühendamisest midagi ei sõltu (erinevalt LED-ist), ent kui see ühendada lüliti või valgustundliku takisti suhtes vale viigu peale, siis meie süsteem ei hakka tööle. Vajadusel vaadake ühendamise kohta varasemate peatükkide materjalist järele.
14.3.1. Programmi tekst
Kommentaarid viikude kohta on kirjutatud programmi. Koosta Arduino-vooluahel, ühenda sellega arvuti, kopeeri siit see programm ning seejärel käivita.
Oleme eespool juba kasutanud ka map() funktsiooni. Vastendusfunktsioon1 map() aitab meil aga Analog-in viigu kaudu loetud analoog-signaali (anduri või potentsiomeetri näidud) muuta meie skeemis vajalikuks LED-i heleduse muutumist juhtivaks vooluks. Tuletame siinkohal meelde servo juhtimist potentsiomeetriga ning kahe servo juhtimist juhtkangi abil.
Kuna LED-i külge ühendatud PWM võimekusega digitaal-viigu pinge on stabiilselt ikka 5V, siis tuleb fototakistilt saadava signaali põhjal LED valgustugevuse juhtimiseks teha vastavas mahus sisse-välja-lülitusi—nii, et mõju LED helendumisele kas väheneks või suureneks vastavuses analoogsignaali muutustega.
Pulsilaiusmodulatsiooniga (PWM = Pulse Width Modulation) tutvusime ka näiteks potentsiomeetri ja juhtkangi abil servomootorite juhtimist käsitlenud 10. peatükis.
1 Vt mapping – tee otsing eestikeelse termini leidmiseks siit: https://stats.cyber.ee/term/238-mapping
14.3.1.2. Programmi tekst
int fotoresistoriViik = A0; int LED = 3; /* digitaal-real 3 viik on PWM tähistusega! NB! Mitte valida selle harjutuse jaoks neid digitaal-viikusid, mis ei oma PWM võimakust.*/ int fotoresistoriLugemine; /*sellesse muutujasse loeme analoogsinaali, mis tuleb fotoresistori pealt (A0).*/ int fotoresistoriPWMiksTegemine; /*sellesse muutujasse loeme peale map() funktsiooniga A0-signaali enne LED-ile edastamist PWM tarvis töötlemist.*/ void setup() { pinMode(LED, OUTPUT); /* Et aru saada, kas töötab setup osa, siis vilgutame üheksa korda kiirelt LED-i.*/ for (int i = 1; i<= 9; i= i+1) { digitalWrite (LED, HIGH); delay (200); digitalWrite (LED, LOW); delay (400); } } void loop() { int fotoresistoriLugemine = analogRead(fotoresistoriViik); /*loetakse analogRead abiga A0 pealt tulev fotoresisotri näit*/ int fotoresistoriPWMiksTegemine = map (fotoresistoriLugemine, 0, 1023, 0 , 255); /*map-funktsiooniga tehakse analoogist digitaalsignaal*/ analogWrite(LED, fotoresistoriPWMiksTegemine); delay(5); }
Harjutus A
Kommenteerimiseks:
- Miks ühendasime LED-i näiteks digitaal-viik 3 peale, ent ei pannud seda digitaal-viik 12 peale?
- Kui tegime map() funktsiooni kasutades analoog-signaalist (vahemikus 0-1023) digitaalsignaali (vahemikus 0-255), siis miks on meil valitud analoogile digitaal-vaste leidmiseks just sellised arvud? Mis numbrist alustab arvuti loendamist?
- Miks kasutame ka teist muutujat (fotoresistoriPWMiksTegemine)? Kas saaksime ka hakkama ühe muutujaga?
- Miks ühendasime fototakistilt loetava signaali Analog-in viigu peale?
Harjutus B
Muuda viikusid ja kirjuta programm vastavalt ümber—ent nii, et töötaks.
Muuda programmi algusesse pandud programmi tööle hakkamisest ühekordselt märku andvat for-tsüklit. Mis juhtuks, kui paneksime selle void loop() osasse?
Harjutus C
Pane programm tööle nii, et teatud valgustugevusest tugevama valguse korral oleks LED välja lülitatud ning teatud valgustugevusest nõrgema korral oleks LED sisse lülitatud.