"Bodite svetla iskra, lučke ugasnite, dokler se ne stemni!" včasih pozabimo ugasniti luči in zapraviti elektriko in zagotovo ste videli tudi, da je bila podnevi prižgana ulična luč. Na temnem detektorju smo že zgradili nekaj vezij, kjer se luči samodejno izklopijo, če je zunaj svetlo in se vklopi, če je zunaj temno. Tokrat pa v tem vezju ne vklopimo in izključimo luči samo glede na svetlobne pogoje, temveč tudi spreminjamo jakost svetlobe glede na zunanje svetlobne razmere. Tu smo uporabili koncept LDR in PWM z Arduinom za samodejno zmanjšanje ali povečanje svetlosti 1 W LED moči.
V bistvu se PWM nanaša na modulacijo širine impulza, izhodni signal prek PWM zatiča bo analogni signal, pridobljen kot digitalni signal od Arduina. Delovni cikel digitalnega vala uporablja za generiranje zaporedne analogne vrednosti za signal. Ta signal se nadalje uporablja za nadzor svetlosti LED za napajanje.
Potreben material
- Arduino UNO
- LDR
- Upor (510, 100 k ohm)
- Kondenzator (0,1uF)
- Tranzistor 2N2222
- 1-vatna LED moči
- Priključne žice
- Breadboard
Shema vezja
Koda in razlaga
Na koncu je podana celotna koda Arduino za samodejni zatemnilnik LED.
V spodnji kodi definiramo pin PWM in spremenljivke, ki bodo uporabljene v kodi.
int pwmPin = 2; // spremenljivki pwm int LDR = A0 dodeli zatič 12 ; // analognemu vhodu A0 dodelimo spremenljivi pot int c1 = 0; // razglasi spremenljivko c1 int c2 = 0; // izjavi spremenljivko c2
Zdaj v zanki najprej beremo vrednost z ukazom “analogRead (LDR)”, nato analogni vhod shranimo v spremenljivko z imenom “value” . Z nekaj matematičnimi izračuni ustvarjamo signal PWM. Tu nadzorujemo jakost svetlobe s pomočjo PWM le, če je analogna vrednost manjša od 500, in če je večja od 500, lučke popolnoma izklopimo.
int vrednost = analogRead (LDR); Serial.println (vrednost); c1 = vrednost; c2 = 500-c1; // odšteje c2 od 1000 ans shrani rezultat v c1 if (vrednost <500) { digitalWrite (pwmPin, HIGH); delayMicroseconds (c2); digitalWrite (pwmPin, LOW); delayMicroseconds (c1); } if (vrednost> 500) { digitalWrite (2, LOW); } }
Tukaj lahko izveste več o PWM v Arduinu.
Kako samodejno nadzoruje intenzivnost svetlobe:
Glede na diagram vezja smo izdelali vezje delilnika napetosti z uporabo LDR in 100k upora. Izhod delilnika napetosti se napaja na analogni zatič Arduino. Analogni pin zazna napetost in Arduinu da nekaj analognih vrednosti. Analogna vrednost se spreminja glede na upor LDR. Torej, če je nad LDR temno, se njegov upor poveča in s tem se vrednost napetosti (analogna vrednost) zmanjša. Analogne vrednosti torej spreminjajo izhod PWM ali delovni cikel, delovni cikel pa je nadalje sorazmeren z jakostjo svetlobe moči LED. Tako bo luč nad LDR samodejno nadzorovala jakost LED za vklop. Spodaj je diagram poteka, kako bo to delovalo, znak s puščico navzgor označuje "narašča", znak s puščico navzdol pa "zmanjšuje".
Intenzivnost svetlobe (na LDR) ↓ - Odpornost ↑ - Napetost na analognem zatiču ↓ - Delovni cikel (PWM) ↑ - Svetlost LED moči ↑
Če je zunaj povsem svetlo (ko se analogna vrednost poveča več kot 500), se lučka za vklop izklopi.
Tako lahko samodejno nadzorujete jakost svetlobe z LDR.
Nadalje preverite vsa naša LDR vezja tukaj.