Kako da napraviš svoj prvi praktični Arduino projekat?

Ovaj nastavak serijala o robotici sadrži dva praktična primera u okviru kojih je prikazana razlika između digitalnog i analognog upravljanja mikrokontrolerom.

Danimir Ljepava - 30. April, 2018.

Pred vama je peti u serijalu članaka za juniore (kategorija osnovnih i srednjih škola uzrasta do 18 godina) koji će vam pomoći da naučite nešto više o robotici, elektronici i programiranju kako bi napravili svog prvog robota.

Ovaj serijal je inspirisan Eurobot nacionalnim takmičenjem iz robotike koji je ove godine održano 21. aprila u Novom Sadu, a njegovi pobednici dobili su mogućnost da se takmiče dalje na evropskom takmičenju u Francuskoj.

U prvom članku ovog serijala smo naučili šta je robotika i kakvi sve roboti postoje. U drugom članku smo napravili uvod u osnove elektronike, materijale i alate za pravljenje robota. U trećem smo naučili šta je to mikrokontroler, razlike između digitalnih i analognih ulaza i izlaza kojima on upravlja, a u onom za njim predstavili smo Arduino mikrokontroler i kako ga pokrenuti sa virtuelnim simulatorom onlajn, ali i fizički.

U ovom članku ćemo na dva praktična primera prikazati razliku između digitalnog i analognog upravljanja mikrokontrolerom uz pomoć Arduino mikrokontrolera. U prvom primeru ćemo uz pomoć tastera digitalno upaliti i ugasiti LED diodu, a u drugom primeru ćemo napraviti trčeće svetlo sa osam LED dioda čiju brzinu ćemo kontrolisati analogno putem ručice potenciometra (promenjivi otpornik).

Ono što ćete naučiti u ovom članku je:

Članak se završava predlozima materijala za dodatno čitanje, kao i spiskom škola gde možete da naučite više o elektronici i robotici.

Praktični projekat

Kao prvi praktični projekat, napravićemo konstrukciju u kojoj ćemo imati jedan taster (prekidač) i digitalno ćemo paliti i gasiti LED diodu (svetlo) uz pomoć softvera. U drugom primeru ćemo analogno očitavati vrednosti priključenog potenciometra i podešavati brzinu trčećeg LED svetla.

Na ova dva praktična projekta pokazaćemo razliku između digitalnog i analognog upravljanja i učiti osnove programiranja.

Primer 1 – Digitalno paljenje i gašenje LED diode sa mikrokontrolerom

Ovaj primer možete odmah da probate u Tinkercard Circuits na linku Digitalno upravljanje Arduinom (napravite svoj korisnički nalog, kopirajte primer i pokrenite simulaciju sa Start Simulation) ili da ga fizički sklopite od delova. Spisak delova koji će vam biti potrebni za ovu konstrukciju su:

Prvi eksperiment je jednostavan i uz pomoć njega ćemo digitalno da palimo i gasimo LED diodu (svetlo). Potrebno je da sve delove (virtuelno ili fizički) spojite kao što je prikazano na slici dole:

Za fizičko izvođenje ovog eksperimenta Arduino pločicu spojite USB kablom na računar. To će upostaviti vezu između računara i mikrokontrolera i omogućiti vam da na računaru pišete program koji će upravljati robotom i da taj program prebacite na Arduino pločicu putem kabla.

U Arduino IDE okruženju ili virtuelnom simulatoru, prekopirajte ovaj dole program za digitalno upravljanje LED diodom.

/*

Ovaj program na pritisak tastera digitalno uključuje i isključuje LED diodu (svetlo).

Elektronski slop:

– LED dioda je priključena sa otpornikom između pina 13 i GND (masa, 0V)

– Taster je priključen između pina 2 i GND (masa, 0V)

*/

// promenjiva u koju se smešta vrednost kojom se određuje da li je taster pritisnut

int buttonState = LOW;

void setup()

{

// pin 2 na mikrokontroleru se definiše kao ulazni (INPUT) i služi za očitavanje da li je taster pritisnut

// PULLUP služi da aktivira interni otpornik izmedju pina 2 i +5v tako da ne moramo da ga instaliramo

pinMode (2, INPUT_PULLUP);

// pin 13 na mikrokontroleru se definiše kao izlazni (OUTPUT) i služi za paljenje LED diode (svetla)

pinMode (13, OUTPUT);

}

void loop()

{

// pročitaj sa pina 2 da li je taster pritisnut

buttonState = digitalRead (2);

// ako je taster pritisnut (LOW znači da je došlo do spoja sa masom, tj. 0v na pinu 2)

if (buttonState == LOW) {

// uključi LED diodu (HIGH znači da mikrokontroler pušta napon na pin 13)

digitalWrite (13, HIGH);

} else {

// u suprotnom isključi LED diodu (LOW znači da mikrokontroler isključuje napon sa pina 13)

digitalWrite (13, LOW);

}

// sačekaj 10 milisekundi

delay(10);

}

Primetite da je u ovom primeru programskog koda u komentarima (to su komande koje se ne izvršavaju i počinju sa “//” ili sa “*/”) pojašnjeno šta radi svaka linija koda.

Kao što se vidi, prvo je definisano da je nožica (pin) broj 2 mikrokontrolera na koju priključujemo taster ulazna (INPUT), a potom da je nožica (pin) broj 13 mikrokontrolera na koju priključujemo LED diodu izlazna (OUTPUT). Primetite da je korišćena LOW vrednost da se ispita da li je taster pritisnut, odnosno da li je došlo do spajanja pina 2 sa masom (GND, 0v). Takođe, obratite pažnju na to da su korišćene HIGH i LOW vrednosti (digitalno “1” i “0”) da se upali i ugasi LED dioda na pinu broj 13.

Putem IDE okruženja prebacite program sa računara na Arduino kontroler (pločicu). Pošto se program uspešno prebacio na Arduino kontroler, on će se samostalno izvršavati na samom Arduino mikrokontroleru.

Pod pretpostavkom da je sve uspešno spojeno i program ubačen u Arduino, kada pritisnete i držite pritisnut taster, LED dioda će da svetli. Kada otpustite taster, ona će da se ugasi.

Ovom vežbom ste naučili kako da napravite svoj prvi Arduino projekat, kao i da digitalno (tasterom) palite i gasite LED diodu. Sličan koncept kao ovaj se koristi za očitavanje tastera sa džojstika koji onda programski može da pokreće ili zaustavlja vašeg robota.

Samostalna vežba:

Mala pomoć: možete da probate da dodate još jedan pin programski (na koji je fizički spojena druga LED dioda), da ga programirate kao izlazni, i potom pored komandi za digitalWrite paljenje i gašenje postojeće LED diode, dodate dve dodatne komande za paljenje i gašenje druge LED diode.

Praktični primer 2 – Analogno kontrolisanje treperenja LED dioda sa mikrokontrolerom

Drugi primer je primer „trčećeg svetla” koji pali osam led dioda u nizu, jednu po jednu sa desna na levo. Koristeći ručicu potenciomentra (varijablni otpornik) napravićemo da analogno očitavamo njegovu vrednost i da softverski ubrzavamo ili usporavamo brzinu trčećeg svetla.

Ovaj primer takođe možete odmah da isprobate u Tinkercard Circuits na linku Analogno upravljanje Arduinom ili da ga fizički sklopite od potrebnih delova. Spisak delova koji će vam biti potrebni za ovu konstrukciju su:

Potrebno je da sve delove (virtuelno ili fizički) spojite kao što je prikazano na slici dole. Primetite da je otpornik od 1K zajednički za sve LED diode i spojen na njihovu katodu (minus nožicu). Katode LED dioda (plus nožice) su spojene na digitalne pinove Arduina od broja 2 do broja 9. Potenciometar je svojim krajevima spojen između +5v i mase (GND, 0v), a njegov srednji pin na analogni ulaz A0 mikrokontrolera.

I u slučaju fizičkog izvođenja ovog eksperimenta je potrebno da Arduino pločicu spojite USB kablom na računar kako bi se upostavila veza između računara i mikrokontrolera — tako da na računaru možete da pišete program koji će upravljati robotom, kao i da taj program prebacite na Arduino pločicu putem kabla.

Takođe, i ovde važi da u Arduino IDE okruženje ili virtuelni simulator, prekopirate dole prikazan program za upravljanje LED diodom.

/*

Ovaj program na okretanje ručice potenciometra ubrzava ili usporava brzinu trčećih LED svetala

Elektronski slop:

– LED diode su spojene na pinove od 2 do 9 sa anodom (+ deo LED-a)

– otpornik od 1K je zajednički za sve LED diode i spaja se na katodu (- deo LED-a)

– potenciometar je spojen srednjim priključkom na analogni ulaz A0, a sa levim i desnim priključkom na +5v i GND (- napajanja)

*/

void setup()

{

// dajemo komandu da su pinovi 2-9 izlazni (OUTPUT) jer će na njima biti priključene LED diode

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(5, OUTPUT);

pinMode(6, OUTPUT);

pinMode(7, OUTPUT);

pinMode(8, OUTPUT);

pinMode(9, OUTPUT);

}

// petlja (loop) koja se stalno ponavlja

void loop()

{

// promenjiva “Led” je brojač od 2 do 9, a to su pinovi na koje su spojene LED diode koje vrtimo u krug 2, 3, 4, 5, 6, 7, 8, 9, pa iznova, da bi dobili efekat trčećeg svetla

for (int Led = 2; Led <= 9; Led++)

{

// čitamo analogni ulaz pina A0 (koliko je ručica potenciometra okrenuta) i tu vrednost pretvaramo u milisekunde matematičkom formulom

int VremeUkljuceno = (analogRead(A0)+100)/2;

// redom palimo LED diode

delay(1);

// program čeka jednu milisekundu

digitalWrite(Led, HIGH);

// uključi LED diodu (HIGH pusti napon na pin)

delay(VremeUkljuceno);

// čekaj vreme koje je izračunato sa analognog ulaza, ono označava vreme koliko će LED biti upaljen

digitalWrite(Led, LOW);

// isključi LED diodu

delay(1);

// program čeka jednu milisekundu

}

}

Primetite da je i u ovom primeru programskog koda u komentarima (to su komande koje se ne izvršavaju i počinju sa “//” ili sa “*/”) pojašnjeno šta radi svaka linija koda.

U ovom primeru je važno obratiti pažnju na to da je prvo definisano da su nožice od broja 2 do 9 na koje se priključuju LED diode izlazne (OUTPUT). Analogno, za ulazni pin A0 nije potrebno da se posebno definiše u programu, jer Arduino koristi pinove A0 do A5 samo kao analogne ulaze.

U programu se koristi brojač, takozvana “for” petlja da vrednost promenjive „Led” broji od 2 do 9, jednu po jednu, što omogućava da se redom pali jedna po jedna LED diodu komandom „digitalWrite(Led, HIGH)” i gasi komandom „digitalWrite(Led, LOW)”.

Uz pomoć komande „analogRead(A0)” sa analogno-ulaznog pina A0 mikrokontrolera očitava se napon koji pušta potenciometar. U zavisnosti na koju stranu je ručica potenciometra okrenuta, mikrokontroler će da očita brojčanu vrednost od 0 do 1.024. Ako mikrokontroler sa pina A0 očita vrednost 0, to znači da je ručica potenciometra okrenuta skroz prema strani gde je spojena masa, tj. GND 0v, dok 1.024 znači da je ručica potenciometra okrenuta prema strani gde je spojeno +5v. Očitana srednja vrednost od 512 znači da je ručica potenciometra negde na sredini.

Ovako očitana anlogna vrednost (koliko je okrenuta ručica potenciometra) omogućava da definišemo promenjivu „VremeUkljuceno” u programu, koja će sadržati vreme čekanja između paljenja naredne LED diode, odnosno brzinu paljenja trčećeg svetla.

Putem IDE okruženja prebacite program sa računara na Arduino kontroler (pločicu). Pošto se program uspešno prebacio na Arduino kontroler, on će se samostalno izvršavati na samom Arduino mikrokontroleru.

Pod pretpostavkom da je sve uspešno spojeno i program ubačen u Arduino, kada okrećete ručicu potencimentra na jednu ili drugu stranu, brzina trčećeg LED svetla će da se ubrzava ili usporava.

Ovom vežbom ste naučili kako da analogno (potenciometrom) upravljate brzinu paljenja LED trčećeg svetla. Sličan koncept kao ovaj se koristi za očitavanje analogne vrednosti sa džojstika koji onda programski može brže ili sporije da pokreće vašeg robota.

Samostalna vežba

Mala pomoć: promenite u „for” petlji (ona je brojač) da se brojevi smanjuju od 9 do 2 (umesto da rastu od 2 do 9), promenite znak manje jednako (<=) na veće jednako (>=) i promenite „Led++” u „Led–” kako bi se brojač umanjivao umesto povećavao.

Naredni koraci

U zavisnosti od toga da li želite više da čitate, da čujete od drugih ili iskusite kroz samostan rad, preporučujemo neke od sledećih aktivnosti kao naredni korak za ulazak u svet elektronike, robotike i programiranja: