LAKI PINGVINI<>
062017<><>

Arduino: LE diode

Svetleći svet

Tri boje za ceo spektar

Kao što se već može da se zaključi iz naziva, LE diode su varijanta „običnih” dioda čija je funkcija da dozvole kretanje elektriciteta samo u jednom pravcu. Kroz PN sloj struja protiče od anode (p) i kreće se prema katodi (n). Elektroni i šupljine se kreću jedni prema drugima i u trenutku sudara elektroni prelaze na niži energetski nivo, pri tome oslobađajući energiju u obliku fotona. Šematske oznake dioda i LE dioda su veoma slične i razlikuju se u dve male strelice koje simbolizuju izlučenje svetlosti.

Zbog svoje „diodne prirode”, LED lampice dozvoljavaju kretanje elektriciteta samo u jednom pravcu, od anode prema katodi. To znači da, ukoliko slučajno diodu okrenemo naopako, ona neće svetliti. Pozitivna stvar u svemu tome je da na ovaj način u standardnim uslovima nećemo izazvati pregorevanje elementa.

U svrhu lakšeg raspoznavanja, LE diode dolaze sa nožicama različitih dužina. Anoda ima dužu žicu od katode i na nju dovodimo pozitivni napon. Još jedan vizuelni način razlikovanja anode i katode odnosi se na malu izbočinu koja se nalazi na strani anode.

Intenzitet svetlosti LE dioda je direktno vezana za jačinu struje koja kroz njih prolazi. Što više struje, to više svetlosti. Međutim, ukoliko dovedemo više struje nego što je to dozvoljeno, lampica će jednostavno pregoreti. Ako malo obratimo pažnju na električne šeme, videćemo da uz svaku LE diodu ide prateći otpornik. Otpornici su pasivni elektronički elementi čija je funkcija da pruže otpor toku struje. Na taj način se ograničava maksimalna vrednost strujnog toka koja je bezbedna za naš uređaj.

Da bi odredili veličinu otpornika, potrebno je da poznajemo određene karakteristike LE diode sa kojom radimo. Iako svi proizvođači uz svoje proizvode navode tehničke specifikacije, prilikom kupovine preko interneta često dobijamo narudžbinu bez bilo kakvih pratećih informacija. Zato nam ne preostaje ništa drugo nego da koristimo standardne vrednosti, koje nisu uvek optimalne, ali su dovoljne za normalno funkcionisanje. Glavne karakteristike koje nas interesuju su: radni napon, maksimalna jačina struje i preporučena jačina struje.

Dva osnovna parametra svetlećih dioda su jačina struje i napon. Da bi videli svetlost, potrebno je da napon izvora energije bude veći od radnog napona. U sledećoj tabeli su prikazani podaci sa karakterističnim vrednostima radnog napona u zavisnosti od boje svetlosti:

Kao što možemo zaključiti iz priloženog, što je manja talasna dužina svetlosti, potrebno je više napona. Ukoliko ne posedujemo podatke o maksimalnoj jačini struje i preporučenoj jačini struje, okvirno možemo uzeti da se vrednosti za sve LE diode kreću u opsegu od 18-30 miliampera i pri tome se vodimo pravilom da onima koje imaju manje vrednosti radnog napona dajemo manje struje, dok onima kod kojih je ta vrednost veća, propuštamo više struje. Tako ćemo, recimo, za crvenu svetleću diodu uzimati da je potrebna jačina struje u rangu 18-20 miliampera, za žutu 20-22 miliampera, a za zelenu i plavu 23-26 miliampera. Treba voditi računa o tome da maksimalne vrednosti skraćuju vek trajanja uređaja, pa se preporučuje da se koristi 80% predviđene jačine struje. Ukoliko smatrate da jačina svetlosti LE diode nije dovoljno intenzivna, možete pokušati sa promenom vrednosti otpornika za nekih 10% njegove trenutne vrednosti.

Računanje električnog otpora se izvodi preko starog dobrog Omovog zakona:

(R – otpor, Ui – napon izvora, Urn – radni napon, I – jačina struje)

Uzmimo za primer da želimo da priključimo svetleću diodu crvene boje na naš Arduino, koji radi sa naponom od pet volti:

R= (5 V - 1,8 V) / 0,02 A = 160 oma

Za radni napon crvene LE diode uzeli smo srednju vrednost koja se kreće u okviru 1,6-2 volta i oduzeli je od napona Arduina (pet volti), pa smo to podelili sa 0,02 ampera (20 miliampera) i dobili minimalnu vrednost otpornika od 160 oma. Za plavu LE diodu imamo sledeću kalkulaciju:

R= (5 V - 3,3 V) / 0,025 A = 68 oma

Ovde smo za vrednost radnog napona uzeli 3,3 volta, a za jačinu struje 25 miliampera. U oba slučaja smo dobili vrednosti koje odgovaraju otpornicima sa standardnim vrednostima. Ukoliko smo proračunom dobili neku nestandardnu brojku (recimo, 500 oma), onda uzimamo sledeću veličinu koja odgovara standardnoj vrednosti (510 oma).

 
Povezivanje više svetlećih dioda na Arduino je trivijalan posao. Svaku anodu preko otpornika vežemo na neki od izlaza mikrokontrolera, dok katode priključujemo na uzemljenje. Pošto Arduino (Uno) raspolaže strujom jačine oko 200 miliampera, jednostavna matematika nam govori da smo u mogućnosti da povežemo do maksimalno deset LE dioda koje troše po 20 miliampera. Ukoliko je potrošnja 25 miliampera, onda nam, teoretski, preostaje osam LE dioda. Jedan jednostavan primer koda za konfiguraciju sa osam LE dioda koje se pale i gase od početka do kraja bi mogao da izgleda ovako:

// niz portova za LED

int ledNiz[] = {8, 7, 6, 5, 4, 3, 2, 1}; int pinovi = 7; // ukupno pinova (8)

int pauza = 100;

void setup() {

for (int pin = 0; pin < pinovi; pin++) {

// svi pinovi na OUTPUT

pinMode(ledNiz[pin], OUTPUT);

}

}

void loop() {

// od prve do poslednje

for (int pin = 0; pin < pinovi; pin++) {

digitalWrite(ledNiz[pin], HIGH);// upali LED

delay(pauza);

digitalWrite(ledNiz[pin], LOW); // ugasi LED

}

// od poslednje do prve

for (int pin = pinovi – 1; pin >= 0; pin--) {

digitalWrite(ledNiz[pin], HIGH);// upali LED

delay(pauza);

digitalWrite(ledNiz[pin], LOW); // ugasi LED

}

}

U prvoj liniji definišemo niz koji sadrži izlazne pinove Arduina, a njih je u našem slučaju osam (0-7). Kod sa funkcijom setup() uz pomoć For..Next petlje inicijalizuje sve pomenute pinove kao izlazne. U okviru loop() bloka imamo dve petlje koje uključuju i isključuju diode na portovima ukazanim nizom ledNiz[].

Šta da se radi u situacijama kada je potrebno priključiti veći broj lampica? Odgovor na to pitanje se ogleda u korišćenju integrisanih kola koja se nazivaju pomeračkim (shift) registrima. Reč je o relativno jednostavnim napravama koje za svoju osnovu koriste flip-flop registre D tipa. Da sada ne ulazimo u detalje, ukratko ćemo reći da je flip-flop digitalni sklop koji je u stanju da pamti jedan bit informacije. Prateća šema prikazuje SIPO (Serial-In, Parallel-Out) šift registar sa četiri flip-flopa (FF1-FF4) koji na ulazu dobijaju podatke u serijskom obliku i transformišu ih u paralelni izlaz. Za sinhronizaciju se koristi klok signal magistrale podataka. Upravo ovaj mehanizam nam omogućava da znatno povećamo broj izlaznih portova na račun transformacije serijskih podataka u paralelni oblik. Najpoznatiji predstavnik ove vrste integrisanih kola nosi naziv 74HC595 (varijanta u DIP kućištu ima dodatno slovo N) i obavlja funkciju 8-bitnog šift registra koji može da radi kako u SIPO, tako i u SISO režimu (Serial-In, Serial-Out). Osim njega, veoma često se kao 8-bitni šift registri koriste i čipovi sa oznakama 74HC594, 74HC164. 74HC165, 74HC299 (PIPO) i 74HC4094, koji imaju neke svoje specifičnosti. Pored 8-bitnih pomeračkih registara, postoje i integralna kola koja rade sa 4 i 16 bitova.

Pinovi 1-7, kao i pin 15, predstavljaju osam bitova paralelnog izlaza i imaju vrednost unutrašnjih flip-flopova. Zapravo, unutar čipa 74HC595 postoje dva bloka od po osam memorijskih ćelija. Prvi blok služi za popunjavanje podacima koji dolaze preko serijskog ulaza (ovo i jeste „pravi” šift registar), dok drugi blok (naziva se „latch”) pri pojavljivanju impulsa sinhronizacije ST_CP, preslikava trenutne vrednosti iz šift registra. Na taj način se sprečava treperenje koje može nastati pomeranjem bitova u šift registru. Serijski binarni podaci u čip stižu preko pina broj 14 (DS). Usled pomeranja, novi bit dolazi na mesto prethodnog. Pin 11 ili SH_CP (Shift Register Input clock), prelaskom iz stanja logičke nule u jedinicu, bit koji se nalazi na pinu DS smešta u registar, dok se istovremeno svi ostali bitovi registra pomeraju za jednu poziciju. Pin 12 (ST_CP) se za vreme upisivanja podataka nalazi u stanju logičke nule. Njegovim prelaskom u logičku jedinicu, bitovi se preslikavaju u „latch” registar. Pin 10 nosi oznaku MR (Master Reset) i ima funkciju brisanja podataka u šift registru bez uticaja na latch. Mi ga fiksno povezujemo na 5V.

Funkcija pina 13 (OE, Output Enable) je da dozvoli slanje stanja bitova latch registra na izlazne pinove. I ovde je standardno stanje logička nula, a najčešće se ovaj konektor fiksno povezuje na liniju GND, čime se omogućava konstantno prikazivanje podataka.

Zanimljiva je funkcija pina 9 (Q7’), koji služi kao mesto izlaza serijskih podataka iz šift registra (Serial Out). Zahvaljujući njemu, moguće je iskombinovati veći broj 74HC595 kola u šift registar veličine 16, 24, 32, 40 ili još više bitova. To se postiže povezivanjem pina broj 9 na prvom čipu sa pinom 14 na sledećem.

 
Pošto je konstrukcija sklopa veoma slična, u našem praktičnom primeru ćemo pokazati kako se povezuje šesnaest LED lampica preko dva integralna kola 74HC595.

Iako nisu u pitanju idealne vrednosti, u primeru smo koristili otpornike od 220 oma, kojih smo imali na raspolaganju u većoj količini. Žutom džamper žicom smo povezali D3 pin Arduina sa pinom 14 (DS) levog čipa, narandžastom pin D2 sa pinom 12 (ST_CP), a ljubičastom pin D1 sa pinom 11 (SH_CP). Bela žica povezuje pin 9 levog čipa sa pinom 14 (DS) desnog čipa i na taj način omogućavamo serijski prenos podataka među njima.

int clock = 1; // SH_CP ulaz na 74HC595

int latch = 2; // ST_CP -//-

int data = 3; // DS -//-

void setup() { // svi pinovi su OUTPUT

pinMode(clock, OUTPUT);

pinMode(latch, OUTPUT);

pinMode(data, OUTPUT);

}

void loop() {

// upali sve

digitalWrite(latch, LOW);

shiftOut(data, clock, MSBFIRST, 0xFF);

shiftOut(data, clock, MSBFIRST, 0xFF);

digitalWrite(latch, HIGH);//B11111111-11111111

delay(1000);

// upali neparne

digitalWrite(latch, LOW);

shiftOut(data, clock, MSBFIRST, 0xAA);

shiftOut(data, clock, MSBFIRST, 0xAA);

digitalWrite(latch, HIGH);//B10101010-10101010

delay(1000);

// upali parne

digitalWrite(latch, LOW);

shiftOut(data, clock, MSBFIRST, 0x55);

shiftOut(data, clock, MSBFIRST, 0x55);

digitalWrite(latch, HIGH);//B01010101-01010101

delay(1000);

// ugasi sve

digitalWrite(latch, LOW);

shiftOut(data, clock, MSBFIRST, 0x00);

shiftOut(data, clock, MSBFIRST, 0x00);

digitalWrite(latch, HIGH);

delay(1000);

}

 
Prve tri naredbe određuju pinove koje nameravamo da koristimo, a onda, u bloku setup() svaki od tih pinova postavljamo u stanje izlaza. U okviru petlje loop() ponavlja se isti šablon četiri puta. Prvo postavljamo pin „latch” u stanje logičke nule, zatim sa dve komande shiftOut() šaljemo dva bajta prema našim šift registrima i na kraju, postavljanjem signala ST_CP u stanje logičke jedinice, prepisujemo podatke iz šift registara u „latch”, čime dovodimo do promene stanja na izlaznim pinovima čipa. Naredba shiftOut ima sledeću sintaksu:

shiftOut(DS pin, SH_CP pin, redosled, vrednost)

Prva dva parametra ukazuju na to koji su pinovi Arduina povezani sa pomenutim nožicama integralnog kola. Argument redosled ukazuje na način pomeranja bitova. Može da bude MSBFIRST ili LSBFIRST i od njega zavisi da li će upisivanje bitova ići od najmanjeg ka najvećem ili obratno. Argument vrednost predstavlja osmobitni broj koji šaljemo šift registru. Mi smo koristili heksadecimalni prikaz brojeva pošto on olakšava definisanje šablona binarnih brojeva. Ako bi hteli da napravimo raspored od po dve lampice koje svetle, iza kojih dolaze dve koje ne svetle, to bi se binarnim brojevima pisalo kao: B11001100, a heksadecimalnim kao 0xCC.

Višebojne (RGB) LED

Osim jednobojnih, postoje i svetleće diode koje mogu da prikažu svetlost u širokom opsegu boja. Njihova konstrukcija se sastoji u aditivnom kombinovanju crvene, zelene i plave svetlosti. Postoje modeli sa zajedničkom katodom i sa zajedničkom anodom, kao što je to prikazano na pratećoj ilustraciji. Sve „prave” LE diode imaju po četiri nožice: tri za boje i jednu koja predstavlja zajedničku katodu ili anodu. Moguće je kupiti LE diode koje emituju svetlost u bojama i imaju samo dve nožice, ali njih ne možemo programirati pošto u sebi već sadrže elektroniku i program za emitovanje po određenoj šemi.

Zajedničku anodu priključujemo na napon od pet volti, dok se pojedinačne nožice katoda putem otpornika priključuju na izlaze Arduina. Po analogiji, kod modela sa zajedničkom katodom nju priključujemo na uzemljenje, dok pojedinačne anode sa Arduinom spajamo preko otpornika. Kada imamo dve vezane elektroničke komponente i kada na prvoj imamo stanje logičke jedinice, struja iz prve komponente služi kao izvor struje za drugu komponentu, koja deluje kao otporno opterećenje prema uzemljenju. Zbog asocijacije na strujni izvor, ova pojava se na engleskom naziva current sourcing. U slučaju da je na izlazu stanje logičke nule, struja teče iz ulaza druge komponente u izlaz prve i tada izlaz prve komponente deluje kao ponor koji vuče struju iz druge komponente, koja ima ulogu otpornog opterećenja prema naponu napajanja. Ovo se naziva current sinking. Za sada nije potrebno da se opterećujemo ovim stručnim pojmovima, već ćemo jednostavno objasniti razliku između primene LED elemenata sa zajedničkom katodom i anodom. U slučaju da želimo da uključimo neku od tri LE diode na modele sa zajedničkom katodom, potrebno je da izlaznom Arduino pinu postavimo stanje HIGH (current sourcing), dok isključivanje postižemo slanjem signala LOW. Međutim, kod modela sa zajedničkom anodom, sve moramo da radimo suprotno. Lampicu uključujemo slanjem signala LOW, a isključujemo je signalom HIGH (current sinking). Dakle, u slučaju da radimo sa elementom koji ima zajedničku katodu, kôd bi mogao da izgleda ovako:

digitalWrite(11, HIGH); // ukljuci crvenu

digitalWrite(10, HIGH); // ukljuci zelenu

delay(1000);

digitalWrite(11, LOW); // iskljuci crvenu

digitalWrite(10, LOW); // iskljuci zelenu

delay(1000);

 
A u slučaju korišćenja LE diode sa zajedničkom anodom, ovako:

digitalWrite(11, LOW); // ukljuci crvenu

digitalWrite(9, LOW); // ukljuci plavu

delay(1000);

digitalWrite(11, HIGH); // iskljuci crvenu

digitalWrite(9, HIGH); // iskljuci plavu

delay(1000);

Funkcija digitalWrite, koju smo koristili u prethodnom kodu, poznaje samo dva stanja: uključeno i isključeno. To znači da uz njenu pomoć možemo prikazati samo ograničen broj boja (sedam). Ukoliko želimo da prikažemo neku od (teoretskih) 16,7 (2563) miliona boja, potrebno je da koristimo funkciju analogWrite. Ona se oslanja na tehniku PWM (Pulse Width Modulation), koja joj omogućava emulaciju 256 različitih nivoa napona, kao da je u pitanju analogni uređaj.

int crvena = 0;

int zelena = 0;

int plava = 0;

int pauza = 250;

void setup() { // izlazni pinovi

pinMode(11, OUTPUT); // crvena

pinMode(10, OUTPUT); // zelena

pinMode(9, OUTPUT); // plava

}

void loop() {

crvena = random(255);

zelena = random(255);

plava = random(255);

analogWrite(11, crvena);

analogWrite(10, zelena);

analogWrite(9, plava);

delay(pauza);

}

Kod je dovoljno jasan i svodi se na generisanje slučajnih vrednosti za sve tri boje, a zatim se te vrednosti šalju na izlazne pinove u pseudo-analognom PWM obliku putem funkcije analogWrite().

Svetleće diode su zanimljivi elektronički elementi koji nisu teški za korišćenje, a istovremeno obezbeđuju dosta zabave i imaju širok spektar primena. Osim toga, videli smo da upotreba integrisanih kola za pomeranje sadržaja ne predstavlja nikakav bauk. U sledećem nastavku ćemo se pozabaviti tehnikama koje obuhvataju korišćenje uređaja kreiranih na osnovu svetlećih dioda, organizovanih u segmente i matrice.

Igor S. RUŽIĆ

 
SparkyLinux 4.5.2
Windows Subsystem for Linux
Arduino: LE diode
Šta mislite o ovom tekstu?
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2018. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 3.22
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



Naslovna stranaPrethodni brojeviOpšte informacijeKontaktOglašavanjePomoćInfo in English

Svet kompjutera