Arduino kontroler (4. deo)
Autor: Stefan Nožinić
U prethodnim brojevima smo opisali šta je Arduino, kako se koristi i dali smo neke njegove karakteristike. U ovom broju nastavljamo i daćemo uvid u to šta je PWM (engl. Pulse With Modulation) i kako se on koristi.
Uvod
Zamislimo da imamo neki period kroz koji se pošalje jedan signal na neku komponentu. Ako bismo za polovinu tog perioda poslali signal od 5 [V] a zatim signal od 0 [V], uređaj bi to smatrao kao signal od 2.5 [V]. Ovo i jeste princip rada PWM-a. Poenta je da se signal smanji time što se digitalna jedinica neće poslati tokom celog perioda već samo tokom jednog njegovog dela. Takođe, bitno je napomenuti da frekvencija predajnika mora biti veća od frekvencije prijemnika. PWM se, takođe, može smatrati kao emulacija analognog izlaza.
Arduino i PWM
Kao što smo već napomenuli u jednom od prethodnih brojeva, Arduino ima pinove prilagođene za rad sa PWM-om. Pin se softverski podesi kao izlazni korišćenjem funkcije pinMode(…) a onda se podešava nivo signala na određenu vrednost korišćenjem funkcije analogWrite(…). Funkcija analogWrite(…) kao parametre traži pin na koji treba da pošalje signal i vrednost 0 – 255 koja određuje nivo signala.
LED blur
Sada kad znamo šta je PWM i čemu služi, možemo da napravimo naš naredni projekat. Nećemo u ovom projektu dodati nešto novo na stari, samo ćemo ga poboljšati da se LED polako uključuje i isključuje i da to radi postepeno.
Od hardverskih komponenti nam treba Arduino i LED dioda.
Povezivanje:
- Povežite neki pin koji ima PWM izlaz (recimo pin 3) na otpornik.
- Drugi kraj otpornika vežite na + diode (anoda).
- Katodu vežite za GND pin na Arduino.
Algoritam:
- Napravimo 2 globalne promenljive, jednu boolean a drugu integer, prva promenljiva čuva stanje (da li treba da se spušta ili podiže nivo signala) dok druga čuva trenutni nivo signala.
- U setup() funkciji inicijalizujemo pin 3 (ili neki drugi koji ste izabrali) kao izlazni pin.
- U loop() funkciji na osnovu stanja povećavamo odnosno smanjujemo nivo i šaljemo ga na pin 3 putem funkcije analogWrite(…).
- Sačekamo određeni period (5[ms] u primeru).
Kôd:
bool inc = true;
int lvl = 0;
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
if (lvl>=255)
{
lvl = 255;
inc = false;
}
if (lvl <= 0) {
lvl = 0;
inc = true;
}
if (inc)lvl++;
else lvl--;
analogWrite(3, lvl);
delay(5);
}
Šta dalje?
U narednom broju ćemo opisati princip rada tastera i kombinovaćemo stečena znanja da napravimo još zanimljiviju stvar.