PROGRAMIRAMO MIKROUPRAVLJAČ ARDUINO NANO |
Vježba:
Daljinskim upravljačem uključujemo četiri strujna kruga _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. 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-
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.int RECV_PIN = A4; int kod=0; IRrecv irrecv(RECV_PIN); decode_results results; Zatim redci kojim se pokreće biblioteka, sve to PRIJE voida setup. U voidu "setup":
pinMode(ledPinz, OUTPUT);
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.
pinMode(ledPinc, OUTPUT); irrecv.enableIRIn(); // pokreće IR prijemnik 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:
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:crvena++; if (crvena>1) { crvena=0; } vocrv(crvena); break;
void vocrv(int crvena){
Na identičan se način može nadograditi program za bilo koju tipku na bilo kom daljinskom upravljaču.
if (crvena==0){ digitalWrite(ledPinc,HIGH); } else { digitalWrite(ledPinc,LOW); } } Solidno i praktično. Ima dalje .. ![]() Modul sa relejem i optocouplerom I - to je sve narode ! |