PROGRAMIRAMO MIKROUPRAVLJAČ ARDUINO NANO  

Vježba:

Daljinskim upravljačem uključujemo četiri strujna kruga _

Potrebno za test sklopa:

mikroupravljačka pločica Arduino Nano
eksperimentalna pločica
IR senzor
LED - 4 kom / crvena, zelena, žuta i plava, ako može - nije obvezno poštivati boje, ali je lakše pri određivanju priključaka
otpornik 330 - 470 Ohm - 4 kom
spojni vodiči m - m, 10 kom
daljinski upravljač / meni je pri ruci bio "Heier" iz napuštenog DVB-T boxa

Dodatno za kompletan sklop:
pločica s relejnim ili tiristorskim modulom
izvor električne struje 5V ili 12V / ako se koristi 12V treba i adapter na 5V

Raspored dijelova na proto-pločici.

Sklapanje:
Za privremeni spoj koristimo pločicu za eksperimantalno sklapanje spojeva. IR senzor priključujemo na "5V", "GND" i A4 pinove na Ardu-pločici.
LED njihovim pozitivnim pinom spojimo s "+" vodom a njihov negativni pin na otpornik i na pinove 9 - 12 na Arduinu.
I to je to !
Umjesto četiriju LED je moguće upotrijebiti RGB LED što će omogučiti odabir boje kojom će LED svijetliti.
Programski dio:
Najprije je trebalo proučiti kako se koristi IR senzor u sklopu s Anrdionom. Ideju sam pronašao na stranici navedenoj u literaturi pod brojem 1.
Na početku programa stoji:
#include -IRremote.h-
int RECV_PIN = A4;
int kod=0;
IRrecv irrecv(RECV_PIN);
decode_results results;
obvezan dio kojim se deklariraju biblioteka uz IR senzor, polazne vrijednosti kao što je pin na koji je priključen IR senzor, tip i polazna vrijednost promjenjive vrijednosti kojom ćemo čuvati kod koji Arduini primi od daljinskog.
Zatim redci kojim se pokreće biblioteka, sve to PRIJE voida setup.
U voidu "setup":
pinMode(ledPinz, OUTPUT);
pinMode(ledPinc, OUTPUT);
irrecv.enableIRIn(); // pokreće IR prijemnik
Ovdje se definira, prilagođava i pokreće rad IR senzora i slanje njegovih podataka putem serijskog priključka ma računalo. Sve ove retke se izvršava samo jednom, prilikom pokretanja Arduina u rad priključivanjem na izvor energije ili resetiranjem pritiskom na tipku "reset" na pločici ili pokretanjem srialMonitor-a na računalu.
Naredbe u voidu "loop" se neprekidno ponavljaju. U ovom programu bi se trebalo ponavljati čekanje i čitanje podataka sa IR senzora, čitanje koda i odlučivanje što učiniti kad u Arduino dođe kod od određene tipke. Upravo je taj podatak i pohranjen u promjenjivoj veličini imenom "kod". Posebnom naredbom je u samom startu programa zadano da će "kod" biti "int", integer, odnosno cjelobrojna vrijednost. U prvoj verziji programa sam ovaj dio načinio koristeći "pionirski" naredbe "IF" i program je uspješno čekao da se pojavi određeni kod i da tada uključi ili isključi određenu LED. Prisjećajući se nekih davnih vježbi iz programiranja isto to sam načinio koristeći naredbe "switch - case" i dobio program koji može pritiskom na jednu tipu određenu LED uključiti, a pritiskom na drugu tipku LED-icu isključiti. Zadovoljavajuće, ali: trebao sam po dvije tipke za svaku LED. Za to su dobro došle tipke koje su na mom daljinskom upravljaču u paru, a to su tipke MUTE i PAUSE, solidno, praktično i upotrebljivo - za samo dvije LED.
"Načini brojač !", doviknuo mi je moj "programerski potomak" dok je ujutro u 5.50h odmicao u tamu ka školskom autobusu. I tim mi je zadao novi korak u rješavanju problema "kako jednom tipkom uključivati - ON i isključivati - OFF - jednom tipkom - jednu LED. Načinio sam novi "case" koji će reagirati na crvenu tipku i brojiti "0 - 1 - 0 - 1..". Ne znam što bih prije: viknuti za potomkom da sam uspio - ili dodati samo još dva uvjeta koji će u slučaju "0" uključiti LED, a u slučaju "1" isključiti ju.. , ALI: tri segmenta sa "IF" to nisu mogla izvršiti. Čak niti "IF - else" ne prolazi. Tu je ključni problem. "PP"-ov bus je već odavno u gradu, a ja - "od jada" gledam još jednu epizodu "Brutalne Fizike" čekajući da mi "padne" na um kakvo rješenje.
Tako i bi. Rješenje je kreirati novi "void". Tamo ću prenijeti sve viškove, a u "case" će ostati samo brojač-prekidač.
Konačno, ovako sad izgleda "case":
case 25500:
crvena++;
if (crvena>1) {
crvena=0;
}
vocrv(crvena);
break;
u komu su brojač čija promjenjiva vrijednost varira od "0" do "1" i ima originalno ime, hi! Na završetku "case" dijela vidi se poziv voida koji isto ima originalno ime, a unutra izgleda ovako:
void vocrv(int crvena){
if (crvena==0){
digitalWrite(ledPinc,HIGH);
}
else {
digitalWrite(ledPinc,LOW);
} }
Na identičan se način može nadograditi program za bilo koju tipku na bilo kom daljinskom upravljaču.
Solidno i praktično.
Ima dalje ..

Modul sa relejem i optocouplerom
Uz dodatak ovakvog modula je moguće uključivati i isključivati i trošila koja za rad koriste i napone više od 12V, 240V/ max10A. Modul koristi napajanje 5V ili 12V, moguće je birati, a optocoupleri se svojim ulazima priključuju na mjesta gdje su u opisanom sklopu bile LED.
I - to je sve narode !