Language Switcher Fallback

Arduino programmeerimise alused Scratchis

Sisukord

Siin on mõned näited, kus skeemis on kasutatud ainult lihtsaid komponente: väljundiks LEDe, sisendiks nuppu ja potentsiomeetrit. Aga sellisele skeemile saab programmeerida ülesandeid, mis sarnanevad päriselu probleemidega ning tutvuda koodi põhiliste elementidega.

Ülesanne 2.1

Üks primitiivne ülesanne analoog sensori lugemise soojenduseks. Komponendid, mis rolli mängivad selles ülesandes on potentsimeeter ja üks LED.

Kui vihjet vajad, siis esimesel pidil on blokid, millega ülesande lahendada saab. Need pärinevad alajaotustest: juhtimine, liikumine ja tehted.

Koosta kood, mis juhul, kui potentsomeetrilt (analog5 ) loetakse suurem arv, kui 500, paneb LEDi põlema, kui väiksem-võrdne 500, siis kustutab.

Proovi võrdlusesse panna muid arve, näiteks 30, 1500, 0.

Lahendus pildina olemas.

Ülesanne 2.2

Toome sisse uue asja - PWMiga "analoog"* väljundi. LEDi heledust saab reguleerida Scratchis klotisga, millele kirjutatud "analog [nr] value [nr]". Esimene number on Arduino pin, mille väljundpinget reguleerime, teine on pinge "tugevus" skaalal 0-st 255-ni.  Pane tähele, et kuigi kasutusel on sõna "analog", ei ole pinid, kus seda kasutada saab mitte A0... A5 hulgast, vaid digitaalsete pinide numbritest käib jutt.

Ülesandeks on programmeerida midagi dimmerdatava lambi taolist. Paneme LEDi põlema heledusega, mis sõltub potentsiomeetri asendist.

Potentsiomeetrilt väärtuse lugemist eelmises ülesandes juba proovisime. Tuletame meelde, et analoog sisendilt loetakse väärtus vahemikus 0-1023. Aga PWM "analog value" kirjutamiseks saame kasutada ainult 0-255. Et asjad klappima saada jagame sisseloetud väärtuse 4-ga. Aga kuna PWMi oma peaks olema ka täisarv, ilma komakohtadeta, siis võtame appi ka ümardamise bloki tehete sektsioonist.

Niisiis, pane piniga 9 ühendatud LEDi heledus sõltuma potentsiomeetri asendist.

Vihje ja lahendus pildil.

 

-----

* PWM ehk pulsilaius modulatsioon ei ole tegelikult analoog signaal, aga kuna ta efekti poolest kohati sarnaneb analoog viisil pinge reguleerimisega, siis on Arduino C-keeles PWMi kasutamiseks kirjutatud funktsiooni nimi "analogWrite". Peame meeles, et see on kokkuleppeline ja ebatäpne. Täpsemalt selgitus edaspidi.

Ülesanne 2.3

Toome sisse veel ühe uue asja - muutujad (variables). Muutuja on nimega "koht" mingi väärtuse salvestamiseks. Muutujale saab omistada mingi väärtuse ja sobival hetkel omistada uue väärtuse. Muutuja kasutamisel saame sealt kätte viimasena omistatud väärtuse.

Näiteks teeme muutuja, anname sellele nime "minuMuutuja". Omistame väärtuse "minuMuutuja = 2". Nüüd kui kasutame kusagil nimetust "minuMuutuja", tuleb selle asemele 2. Nüüd omistame uue väärtuse "minuMuutuja = 5". Järgmisel "minuMuutuja" kasutamisel saame kätte 5.

Scratchis muutuja tegemiseks tuleb klõpsata nuppu "Tee muutuja" ning anda sellele nimi. Seejärel saame muutujaga seotud blokke kasutada.

Ülesanne on seekord keerulisem. Ütleme, et ehitame taimeriga lampi. Sel on lüliti, mis paneb tule mingiks ajaks tööle. Aga töötamise ajaline pikkus peab olema reguleeritav - selleks kasutame potentsiomeetrit.

Esiteks peame reageerima sellele, et nuppu vajutatakse. Siis võtame lugemis potentsiomeetrilt (Analog5) ja salvestame selle muutujasse. Aga et ajad oleks kergesti silmaga hinnatavad, siis tasub seda numbrit väiksemaks teha, näiteks 50-ga jagamise teel. Ning lisaks tahame järgmise sammu jaoks saada täisarvu, seepärast kasutame ka ümardamist (tehete alt).

Kui potentsiomeetrilt saadud ja ümardatud väärtus on salvestatud muutujasse, siis saame muutujat kasutada näiteks selleks, et korrata nii palju kordi  0.1 sekundi ootamist. LEDi võime sisse lülitada ka siinsamas korduse sees.

Kui kordused on ära tehtud, lülitame LEDi välja.

Sellise arutluse lahendus on pildina allpool. Aga programmeerimises on väga tihti võimalik asju teha mitmel erineval viisil. Allpool on ka teine lahendus võimalus, kus ei ole muutujat ega kordust. Võibolla mõtled ise veel mõne alternatiivi välja.

Ülesanne 2.4

Tunnis käinutele on see kodune ülesanne:
Kui nuppu ei vajutata, siis LED, mis on D10 küljes vilgub, D9 ei põle. Kui nuppu vajutatakse, siis D10 LED ei põle; loetakse A5 küljes olevalt sisendilt väärtus ja sellega proportsionaalselt lülitatakse D9 küljes olevale LEDile pinge (heledus sõltub potentsiomeetri asendist). 
D10 LEDi vilkumine tee küllaltki kiire (0.5sek pausidega), siis asi saab kiiremini reageerida nupu vajutusele.
Usun, et vihjeid on eelmistes ülesannetes sees piisavalt. Lahendust veel ei näita, et oleks päriselt väljakutse.
(Allpool on joonis skeemi kokkupaneku kohta, juhuks, kui breadboard aju-juhtmed pusasse ajab. Aga kasutage seda pigem enesekontrolliks, kui võimalik, üritage skeemijoonise järgi asjad kokku panna.)