Anda di halaman 1dari 7

Arduino učionica: 3.

-Fading LED

Date: јул 22, 2016Author: Aleksa Ristić 0 Коментари

Okej, svetleći krug smo savladali (nadam se), sada ćemo ponovo raditi sa LED, ali ovog
puta samo sa jednom. U ovom tutorijalu pokazaćemo kako manuelno možemo smanjivati
i pojačavati osvetljenje LED korišćenjem PWM signala.

 Arduino
 Kratkosponici
 1 LED
 330R otpornik
 Obrtni potenciometar

Ono što je novo je to što do sada nismo radili sa PWM signalima (šta je PWM – pročitaj OVDE-
SIGNALI), kao i to što ćemo po prvi put koristiti analogni ulaz na Arduinu.

Arduino učionica: Signali


Date: новембар 20, 2015Author: Aleksa Ristić 2 Коментари

…i napokon, nastavljamo dalje!

U ovom postu ukratko ćemo reći nešto o signalima.

Signale možemo podeliti na analogne i digitalne. Starija tehnologija koristila je analognu


tehnologiju, tu spada analogna elektronika koja se služi analognim signalima, kao što su
npr. stariji radio kasetofoni, fiksni telefoni, ostala audio tehnika i slično. U današnje
vreme najzastupljenija je digitalna tehnologija koja koristi digitalne signale. Tu se
svakodnevno srećemo sa mobilnim telefonima, računarima, internetom…

Analogni signal
Analogni signal predstavlja kontinualan signal. Taj signal moze imati neogranicenu vrednost i
svakave oblike. Na slici ispod je prikazan primer jednog oblika analognog signala.
analogni sinusoidni signal

Pređimo na digitalne, oni su nam trenutno važniji

Digitalni signal
U digitalnim sistemima prenos podataka vrši se digitalnim pravougaonim signalima, koji za
razliku od analognih imaju samo 2 vrednosti, tj. 2 stanja. Oni predstavljaju stanje logičke 0 i
logičke 1 i sve se izražava putem ta 2 stanja, stanje kada nema napona (logička 0) i stanje kada
ima napona (logička 1).

U zavisnosti od namene kola koriste se logički nivoi 24V, 15V, 12V, 9V, 5V, 3.3V, 1.8V i
manje. Za nas je najbitniji nivo 5V (kada ima napona od 5V taj signal predstavlja logičku 1)
koji koristi naš Arduino za kontrolu periferija (I/O pinovi), takodje 5V logika predstavlja u
današnje vreme školski primer za digitalnu elektroniku. Na slici ispod prikazan je primer jednog
digitalnog signala.
digitalni pravougaoni signal

PWM

Pošto ne želimo da se fokusiramo na elektroniku objasniću samo u nekoliko rečenica šta je


PWM i za šta služi.

PWM signal (Pulse Width Modulation) ili impulsno širinski modulisan signal koristi se kada
želimo da izimitiramo neki analogni signal, jer digitalni sistemi nisu u stanju da proizvode
analogne signale. Ovi signali nam služe na primer kada želimo da podešavamo osvetljenost
nekog LCD ekrana, dakle, kako ne bi bilo samo 1 ili 0, tj. samo najsvetlije i bez svetla, mi
koristimo PWM da podešavamo vrednost osvetljenosti koja je između „najsvetlijeg“ i „bez
svetla“.

Takođe moram napomenuti da postoje A/D konvertori koji pretvaraju analogni u digitalni
signal. A/D konvertore poseduju svi (ili makar velika većina) mikrokontrolera, kako bi neku
analognu veličinu izrazili digitalnim binarnim veličinama i mogli da manipulišu tim podacima.

Ovo je bilo nešto najelementarnije o signalima, vrlo kratak tekst jer me je iskreno mnogo
mrzelo da ga napišem, što se može videti u razlici između vremena objavljivanja ovog i

prethodnog teksta U sledećem krećemo sa programiranjem! A kada počnemo sa


Arduino projektima i elektronskim kolima usputno ću objasniti uopšteno o
komponentama ili modulima koje ćemo koristiti.

Pozdrav do sledećeg posta!


Obrtni potenciometri su grupa otpornika sa promenljivom otpornošću (o otpornicima možete
pročitati u OVOM tutorijalu).

Oni predstavljaju otpornike koji menjaju svoje otpornosti prilikom obrtanja kliznog kontakta
koji klizi između 2 kraja otporničke trake, što se može predstaviti i kao razdelnik napona. Oni
su mehanički sklop pa su zato podložni brzom habanju, ali za naše potrebe kvalitet nije od
presudne važnosti.

Povezivanje

Potenciometar se povezuje tako što ćemo njegov srednji izvod povezati sa analognim ulazom
na Arduinu, a ostala 2 izvoda povezati za GND i +5V. Arduino poseduje 10-bitni A/D konvertor
koji analogne vrednosti konvertuje u digitalne u rasponu od 0-1023 (2na10), a PWM izlaz ima
8-bitni opseg, tačnije od 0-255 (2na8). Razlike u rasponima ćemo regulisati softverski.

LED povezati kao i u dosadašnjim tutorijalima, s tim što ovaj put moramo obratiti pažnju na to
da li digitalni izlaz na koji povezujemo LED ima mogućnost generisanja PWM signala (kod
Uno modela to su pinovi 3, 5, 6, 9, 10, 11). Katodu preko 330R otpornika ćemo povezati na
GND

Pisanje koda

Sada ćemo se susreti sa novim funkcijama, a to su analogRead(), analogWrite() i map().

AnalogRead funkcija radi iščitavanje zadatog analognog ulaza, i to u rasponu vrednosti od 0


do 1023.

Sintaksa analogRead funkcije


analogRead(kojiPin);

Obično se koristi u 2 oblika:

Jedan od upotreba ove funkcije je u nekom uslovu gde se piše recimo:

If(analogRead(0) > 100){}

Gde se postavlja uslov „Ako je iščitavanje analognog ulaza 0 veće od 100…“

I drugi način je, kao i što ćemo mi koristiti:

Iščitavanje = analogRead(0);

Gde promenljivoj iščitavanje dodeljujemo vrednost sa analognog ulaza 0, tako da u nastavku


koda ovu promenljivu posmatramo kao promenljivu koja ima 1 vrednost koja se očitala u tom
trenutku.

Funkcija analogWrite se po upotrebi ne razlikuje mnogo od funkcije digitalWrite koju smo


koristili do sada, samo što u ovom slučaju umesto HIGH i LOW pišemo konkretnu vrednost u
rasponu od 0 do 255, jer je reč o imitiranju analognog izlaza, kada želimo da postignemo neko
postepeno aktiviranje pina, ili se koristi za upravljanje nekih drugih elektronskih sklopova, kao
i za pokretanje i upravljanje određenih motora i aktuatora.

Sintaksa analogWrite funkcije

analogWrite(kojiPin,vrednost);

Kada koristimo ovu funkciju, na mestu gde treba upisati vrednost možemo koristiti i određene
promenljive, a ne samo konkretne brojeve od 0 do 255. U našem slučaju pisaćemo:

analogWrite(ledPin,pwmVal);

Dok funkcija map služi za „mapiranje“, tačnije za usklađivanje, modifikovanje i kreiranje


različitih raspona. Mi ćemo je koristiti jer moramo da uskladimo ulazni raspon od 0-1023 sa
izlaznim PWM rasponom od 0-255.

Sintaksa map funkcije

map(promenljiva, odMin, odMax, doMin, doMax);

Kada bi pisalo recimo:

map(nekaProm, 0, 150, 10, 300);


Ulazne vrednosti su od 0-150 i one bi se izjednačile sa izlaznim rasponom od 10-300, tačnije
ulazna vrednost 0 na izlazu bi imala vrednost 10, ili ulazna vrednost 150 na izlazu bi imala
vrednost 300.

Sada možete videti celokupan kod, gde će vam implementacijom ovih funkcija njihova svrha
biti jasnija:

int potPin = A0; //definisanje pina na koji ce biti prikacen srednji izvod
potenciometra - pin A0
int potVal; //deklarisanje promenljive koja ce predstavljati iscitanu
vrednost potenciometra

int ledPin = 2; //definisanje pina na koji ce biti prikacena LED, mora


biti PWM - pin 2
int pwmVal; //deklarisanje promenljive koja ce predstavljati
upravljacku rednost osvetljenja LED - pwm

void setup(){
pinMode(potPin, INPUT);
pinMode(ledPin, OUTPUT);
}

void loop(){
potVal = analogRead(potPin); //definisanje promenljive potVal,
dodeljujemo joj iscitanu vrednost funkcijom analogRead(imePina)

pwmVal = map(potVal,0,1023,0,255); //definisemo vrednost promenljive


pwmVal, uz pomoc funkcije map(kojaPromenljiva, odMin, odMax, doMin, doMax),
sluzi za ujednacavanje raspona i opsega, tzv mapiranje

analogWrite(ledPin,pwmVal); //zadavanje vrednosti LED, kontrola


osvetljnja
}

Očekujem pitanja, sugestije, kritike ili predloge! Veliki pozdrav do sledećeg teksta

Anda mungkin juga menyukai