Arduino - korak po korakOd ručne kontrole do automatskog svjetla

Primjena iz svakodnevnog života: svjetlo u hladnjaku
Gotovo svaki hladnjak ima svjetlo koje se automatski uključi kada otvorimo vrata i ugasi kada ih zatvorimo.
U jednostavnijim hladnjacima to radi prekidač u okviru vrata. Kada su vrata zatvorena, vrata pritisnu prekidač i svjetlo se ugasi. Kada otvorimo vrata, prekidač se otpusti i svjetlo se uključi.
Na ovoj radionici nećemo rastavljati ni spajati pravi hladnjak. Umjesto toga izradit ćemo sigurni niskonaponski model koji pokazuje isti princip upravljanja svjetlom.
Najprije ćemo isti princip isprobati običnim tipkalom. Tipkalo će predstavljati prekidač vrata hladnjaka.
Klasičan pristup kontrole svjetla
Promotrimo prvo ovu shemu:

Kada pritisnemo tipku, LED će zasvijetliti.Možete li prepoznati problem u primjeni ovog sklopa u hladnjaku?
Cilj ove radionice je razumjeti kako mala promjena u upravljačkom dijelu sklopa može uključiti LED-icu preko NPN tranzistora.
1. tipkalo, potenciometar i tranzistor

Ovo je najjednostavniji početni sklop. Promjenjivi otpornik dovodi mali upravljački signal (napon) na bazu NPN tranzistora, koji drži tranzistor uključenim i kroz LED-icu može poteći struja. Kada se tipkalo pritisne, upravljački napon nestaje (tipkalo ga spaja na GND, tj. na 0 V).
Ovdje koristimo promjenjivi otpornik, kojim reguliramo jačinu struje kroz bazu tranzistora (upravljački signal).
Uveli smo dva nova elektronička elementa: promjenjivi otpornik i tranzistor.

Potenciometar je otpornik čiju vrijednost možemo mijenjati okretanjem osovine. U sebi ima otpornu stazu i pomični kontakt, koji zovemo klizač. Zbog toga ima tri izvoda: dva krajnja izvoda i srednji izvod klizača.
Između dva krajnja izvoda otpor je uvijek jednak nazivnoj vrijednosti potenciometra, primjerice 10 kΩ. Kada okrećemo osovinu, mijenja se otpor između srednjeg izvoda, odnosno klizača, i svakog krajnjeg izvoda.
U ovom sklopu ne koristimo potenciometar kao klasični djelitelj napona s tri odvojena priključka. Koristimo ga kao promjenjivi otpornik, koji se naziva i reostat. Srednji izvod klizača spajamo sa jednim krajnjim izvodom i tako dobijamo otpornik promjenjive vrijednosti. Tako je između +5 V i upravljačke točke uvijek neki promjenjivi otpor: od približno 0 Ω do približno 10 kΩ.
NPN tranzistor je elektronička komponenta s tri priključka: baza (B), kolektor (C) i emiter (E).

U našem sklopu tranzistor radi kao elektronički prekidač. Mala promjena napona i struje na bazi određuje može li veća struja prolaziti između kolektora i emitera.
- Kada na bazi nema dovoljnog napona, tranzistor je zatvoren. Struja ne prolazi od kolektora prema emiteru, pa LED-ica ne svijetli.
- Kada baza dobije dovoljan napon u odnosu na emiter, tranzistor se otvara. Tada struja može proći kroz LED-icu, kolektor i emiter prema
GND.
Obrati pažnju da struja koju propuštamo kroz bazu utječe na otvaranje tranzistora, tj. na jačinu struje između kolektora i emitera. U sklopu tranzistora kao prekidač je struja kroz bazu dovoljno velika da dopusti maksimalno dozvoljenu struju između kolektora i emitera.
Zašto je potreban R1?
Promjenjivi otpornik R1 od 10 kΩ naziva se pull-up otpornik.
Kada tipkalo nije pritisnuto, on povlači bazu tranzistora prema +5 V. Tako baza nije u zraku, tranzistor ostaje pouzdano uključen, a LED-ica upaljena.
Bez pull-up otpornika baza može uhvatiti smetnje ili slučajni napon. Tada LED može slabo svijetliti, treperiti ili se ponašati nepredvidljivo.
Shema spajanja na breadboardu:

2. Fotootpornik (LDR), potenciometar i tranzistor

U drugom sklopu tipkalo zamjenjujemo LDR-om, odnosno fotootpornikom.
LDR je otpornik čija se vrijednost mijenja ovisno o količini svjetla:
- više svjetla ⇒ manji otpor LDR-a
- manje svjetla ⇒ veći otpor LDR-a
U ovom sklopu potenciometar R1 i LDR R4 čine djelitelj napona.
Napon na upravljačkoj točki zatim kroz otpornik R2 dolazi na bazu tranzistora.
Djelitelj napona (ili *djelilo* napona) je jednostavan sklop s dva otpornika spojena jedan za drugim između plusa napajanja i mase, odnosno GND.
Na mjestu između otpornika dobivamo novi napon. Taj napon može biti manji od napona izvora i mijenja se ovisno o vrijednostima otpornika.

U našem sklopu LDR i promjenjivi otpornik od 10 kΩ zajedno stvaraju djelitelj napona. Kada se promijeni količina svjetla, promijeni se otpor LDR-a. Zato se promijeni i napon na bazi tranzistora T1
Kako sklop reagira na svjetlo?
Kada je LDR osvijetljen, njegov je otpor mali. On tada lakše povlači upravljačku točku prema GND, te više struje prolazi kroz njega, a manje kroz bazu tranzistora, što rezultira njegovim zatvaranjem.
Kada prekrijemo LDR i postane tamnije, njegov otpor raste. Potenciometar tada može povući upravljačku točku prema +5 V.
Za ovaj djelitelj napona vrijedi:
Drugim riječima: LDR je senzor, a potenciometar je ručno podešavanje osjetljivosti.
Zašto postoji R2?
Otpornik R2 od 10 kΩ nalazi se između izlaza djelitelja napona i baze NPN tranzistora.
On:
- ograničava struju koja može ući u bazu tranzistora
- štiti tranzistor i ostale komponente
- sprječava da upravljački dio sklopa nepotrebno troši veliku struju
- odvaja djelitelj napona od baze tranzistora
Bez R2 baza tranzistora mogla bi povući previše struje, osobito kada je potenciometar postavljen na mali otpor, a LDR je u tami.
3. Arduino verzija: LDR očitava svjetlo, program upravlja LED-icom
U prethodnom sklopu LDR, promjenjivi otpornik i NPN tranzistor zajedno su određivali kada LED-ica svijetli. Sada Arduino preuzima dio posla: očitava količinu svjetla, programom odlučuje kako LED-ica treba reagirati, a zatim PWM signalom upravlja tranzistorom.

U ovoj verziji Arduino ne napaja LED-icu izravno preko svog pina. Pin D9 šalje upravljački signal prema bazi tranzistora T2, a tranzistor upravlja strujom kroz LED-icu. Tako učimo važan princip koji ćemo koristiti i kasnije uz motore, jače LED-ice, releje i druge potrošače:
Kako je spojen sklop?
Shema ima tri glavna dijela:
- LDR i promjenjivi otpornik ⇒ analogni ulaz
A0 - Arduino PWM izlaz
D9⇒ bazni otpornikR2⇒ baza NPN tranzistora +5 V⇒ LED otpornikR3⇒ LEDD1⇒ tranzistor ⇒GND
Svi dijelovi sklopa moraju dijeliti zajedničku masu, odnosno GND. To znači da su Arduino GND, minus napajanja, donji kraj LDR-a i emiter tranzistora povezani na istu točku.
GND nije povezan, Arduino D9 signal nema zajedničku referencu i LED-ica se može ponašati nepredvidljivo ili uopće neće reagirati.LDR i analogni ulaz A0
LDR je fotootpornik. Njegov otpor mijenja se ovisno o količini svjetla:
- više svjetla ⇒ manji otpor LDR-a
- manje svjetla ⇒ veći otpor LDR-a
U ovoj shemi LDR je spojen prema GND, a potenciometar RV1 prema +5 V. Potenciometar i LDR tvore djelitelj napona.
Potenciometar R1 koristi se kao promjenjivi otpornik: srednji izvod, klizač, spojen je s jednim krajnjim izvodom. Zato se njegov otpor između +5 V i točke A0 može mijenjati od približno 0 Ω do približno 10 kΩ.
Kada je LDR jako osvijetljen, njegov je otpor manji. Tada lakše povlači točku A0 prema GND, pa Arduino očitava manji napon.
Kada LDR prekrijemo i postane tamnije, njegov otpor raste. Tada se točka A0 preko potenciometra više povlači prema +5 V, pa Arduino očitava veći napon.
- više svjetla ⇒ manji otpor LDR-a ⇒ manji napon na
A0⇒ manja vrijednostanalogRead() - manje svjetla ⇒ veći otpor LDR-a ⇒ veći napon na
A0⇒ veća vrijednostanalogRead()
Arduino analogni ulaz ne očitava svjetlo izravno. On mjeri napon na pinu A0 i pretvara ga u broj. Na klasičnim Arduino Uno i Nano pločicama analogRead() najčešće vraća vrijednost od 0 do 1023.
int svjetlo = analogRead(A0);
D9, PWM i tranzistor
Arduino pin D9 je PWM pin. To znači da može vrlo brzo mijenjati stanje između HIGH i LOW.
PWM je skraćenica za Pulse Width Modulation. Ako je pin uključen kratko, LED-ica izgleda slabije osvijetljena. Ako je uključen veći dio vremena, LED-ica izgleda jače osvijetljena.

Arduino program upravlja PWM-om funkcijom analogWrite():
analogWrite(9, 0);- LED je ugašenaanalogWrite(9, 64);- LED svijetli slaboanalogWrite(9, 128);- LED svijetli srednje jakoanalogWrite(9, 255);- LED svijetli najjače
PWM signal s pinaD9ne ide izravno na LED-icu. Najprije prolazi kroz bazni otpornik R2 od 10 kΩ, a zatim dolazi na bazu NPN tranzistoraT1.
Otpornik R2 ograničava baznu struju. Bez njega bi Arduino pin i tranzistor mogli biti nepotrebno opterećeni.
Kada je Arduino D9 većinom u stanju HIGH, baza tranzistora dobiva napon, tranzistor provodi i LED-ica svijetli. Kada je D9 u stanju LOW, tranzistor se zatvara i LED-ica se gasi.
D9 = LOW⇒ tranzistor zatvoren ⇒ LED ugašenaD9 = HIGH⇒ tranzistor provodi ⇒ LED svijetli
Kada Arduino šalje PWM signal, tranzistor se vrlo brzo uključuje i isključuje. Zbog toga LED-ica izgleda kao da joj se jačina mijenja postupno.
Shema spajanja na breadboardu:

Program: LED jače svijetli u tami
U ovoj shemi veća vrijednost na A0 znači više tame. Zato veću vrijednost senzora pretvaramo u veću PWM vrijednost za pin D9.
Program radi ovim redoslijedom:
analogRead(ldrPin)očitava napon naA0.- U našem sklopu više tame daje veću očitanu vrijednost.
map()pretvara raspon 0–1023 u PWM raspon 0–255.analogWrite()šalje PWM signal na D9.D9prekoR1upravlja bazom tranzistora.- Tranzistor upravlja strujom kroz LED-icu.
- LED-ica svijetli jače kada je LDR u tami.
// C++
const int ldrPin = A0;
const int ledPin = 9;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int svjetlo = analogRead(ldrPin);
int jacinaLedice = map(svjetlo, 0, 1023, 0, 255);
jacinaLedice = constrain(jacinaLedice, 0, 255);
analogWrite(ledPin, jacinaLedice);
Serial.print("Svjetlo: ");
Serial.print(svjetlo);
Serial.print(" PWM LED: ");
Serial.println(jacinaLedice);
delay(50);
}
Testiranje i podešavanje
Nakon učitavanja programa otvorimo Serial Monitor pri brzini 9600 baud.
Zatim:
- Usmjerimo svjetlo prema LDR-u.
- Prekrijemo LDR rukom ili kartonom.
- Promatramo mijenja li se broj na serijskom monitoru.
- Promatramo reagira li LED-ica promjenom jačine.
- Okrećemo potenciometar
R1i promatramo kako se mijenja osjetljivost sklopa. - Provjeravamo svijetli li LED-ica jače kada je LDR prekriven.
Ako LED svijetli jače kada je LDR osvijetljen, najprije provjeravamo je li LDR stvarno spojen prema GND, a potenciometar prema +5 V. Ako je sklop pravilno povezan, a želimo obrnuto ponašanje, možemo promijeniti redoslijed brojeva u map() funkciji:
int jacinaLedice = map(svjetlo, 0, 1023, 255, 0);
Tada manja vrijednost s A0 daje veću PWM vrijednost na D9.
Ako sklop ne radi
Vrijednost u serijskom monitoru se ne mijenja
- Mogući uzrok: LDR ili potenciometar nisu pravilno spojeni
- Provjeriti: Vezu
+5 V⇒R1⇒A0⇒ LDR ⇒GND
Arduino stalno očitava 0
- Mogući uzrok:
A0je kratko spojen na GND ili LDR dio nije napajan - Provjeriti: Spoj
A0, LDR iGND
Arduino stalno očitava 1023
- Mogući uzrok:
A0je stalno na+5 Vili LDR nema vezu premaGND-u - Provjeriti: Vezu potenciometra, LDR-a i
A0
Vrijednost se mijenja, ali LED ne svijetli
- Mogući uzrok: Pogrešan polaritet LED-ice, pogrešan tranzistor ili pinout
- Provjeriti: LED, C-B-E priključke
T1, vezuD9⇒R2⇒ baza
LED stalno svijetli
- Mogući uzrok: Baza tranzistora stalno dobiva napon ili tranzistor nije pravilno spojen
- Provjeriti:
R2, bazuT1, emiter naGND
LED samo se pali/gasi, bez vidljive promjene jačine
- Mogući uzrok: Program ne koristi
analogWrite()iliD9nije stvarno spojen - Provjeriti: Kod, pin
D9, bazni otpornik
Arduino se resetira nakon spajanja
- Mogući uzrok: Kratki spoj između
+5 ViGNDili pogrešno postavljen tranzistor - Provjeriti: Odspoji USB, provjeri sve vodove, zatim ponovno spoji
Mali kviz
1. Što je LDR?
2. Čita li Arduino pin A0 svjetlo izravno?
3. Što je djelitelj napona?
4. Koje komponente čine djelitelj napona u našem Arduino sklopu?
5. Kako u ovom sklopu koristimo potenciometar?
6. Što se događa s otporom LDR-a kada ga osvijetlimo?
7. Što se u našoj shemi događa s naponom na A0 kada LDR prekrijemo i postane tamnije?
8. Koju funkciju koristimo za očitavanje LDR-a na pinu A0?
9. Koji raspon vrijednosti najčešće vraća analogRead() na klasičnim Arduino Uno i Nano pločicama?
10. Koji Arduino pin koristimo za PWM upravljanje tranzistorom i LED-icom u ovom sklopu?
11. Zašto između pina D9 i baze tranzistora postoji otpornik R1 od 10 kΩ?
12. Zašto LED-ica ima zaseban otpornik R2 od 220 Ω?
13. Što je uloga NPN tranzistora T2 u Arduino sklopu?
14. Što znači da Arduino i ostatak sklopa moraju imati zajednički GND?
15. Što je PWM?
16. Koju funkciju koristimo za PWM upravljanje pinom D9?
17. Što radi funkcija map() u našem programu?
18. Kako možemo promijeniti ponašanje tako da LED svijetli jače na svjetlu umjesto u tami?
19. Što prvo provjeravamo ako se vrijednost na serijskom monitoru ne mijenja kada osvijetlimo ili prekrijemo LDR?
20. Koji je pravilan redoslijed rada u automatiziranom sustavu poput ovoga?
Što smo naučili?
- Povezali smo analognu elektroniku i Arduino programiranje kroz jedan praktičan uređaj: automatsko upravljanje LED-icom prema količini svjetla.
- Najprije smo vidjeli da se isti problem može riješiti bez Arduina. U analognom sklopu LDR, promjenjivi otpornik i NPN tranzistor zajedno određuju hoće li LED-ica svijetliti. LDR reagira na svjetlo, potenciometar podešava osjetljivost, a tranzistor upravlja strujom kroz LED-icu.
- Zatim smo sličan princip izveli uz Arduino. Arduino ne vidi svjetlo izravno: on očitava napon na analognom ulazu
A0. LDR i promjenjivi otpornik stvaraju djelitelj napona, pa se promjenom svjetla mijenja i napon koji Arduino mjeri. Fotootpornik ima manji otpor pri jačem svjetlu, a veći pri slabijem svjetlu; djelitelj napona tu promjenu pretvara u signal koji Arduino može očitati. - Elektronička shema prikazuje električne veze i uloge komponenti, a ne stvarni raspored na breadboardu.
- LDR, odnosno fotootpornik, mijenja svoj otpor ovisno o količini svjetla.
- Više svjetla najčešće znači manji otpor LDR-a, a manje svjetla veći otpor.
- Potenciometar ima tri izvoda, ali ga možemo koristiti kao promjenjivi otpornik kada srednji izvod spojimo s jednim krajnjim izvodom.
- U našem sklopu potenciometar i LDR čine djelitelj napona između
+5 ViGND. - Djelitelj napona pretvara promjenu otpora u promjenu napona na točki spojenoj na
A0. - Arduino funkcijom
analogRead()očitava vrijednost analognog ulaza. - Pin
D9šalje PWM signal koji preko baznog otpornikaR2upravlja NPN tranzistorom. - NPN tranzistor omogućuje da mali upravljački signal s Arduino pina kontrolira zaseban strujni put kroz LED-icu.
- Otpornik
R2od 10 kΩ ograničava struju baze tranzistora. - Otpornik
R3od 220 Ω ograničava struju kroz LED-icu. - LED-ica i Arduino dio sklopa moraju imati zajednički
GND. - PWM nije pravi promjenjivi napon: Arduino vrlo brzo mijenja stanja
HIGHiLOW, a LED-ica zbog toga izgleda slabije ili jače osvijetljena. - Funkcija
map()pretvara raspon očitanja senzora u raspon PWM vrijednosti za LED-icu. - Promjenom programa možemo odlučiti hoće li LED svijetliti jače na svjetlu ili u tami, bez promjene fizičkog sklopa.
senzor ⇒ mjerenje ⇒ program ⇒ reakcija.

