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.

Kui skeemi järgi komponentide kokku panek ületamatu tundub, siis päris lõpus on värvilisem pilt ka. Kooli komplektides potentsiomeeter on sinine, kolme jalaga asi, millel peal keeratav nupp või kruvi. Kahjuks kruviga varianti on väga ebamugav kasutada, seda tuleb mitukümmend ringi keerata, et muutus terve skaala ulatuses toimuks ja ilma krvuvikeerajata on see põhimõtteliselt võimatu, tüütu on ka kruvikeerajaga.

Ü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

"Star Treki" tulukesed.

  • Kui nuppu ei vajutata, 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).
  • Kui nuppu vajutatakse, siis D9 LED kustub, D10 LED hakkab vilkuma.

D10 LEDi vilkumine tee küllaltki kiire (0.5sek pausidega), siis asi saab kiiremini reageerida nupu vajutusele.
Analoog sisendi ("sensor ... value") väärtused on skaalal 0-1023 ja "analoog" väljundile saab kirjutada 0-255 - nende erinevus kirvemeetodil on 4-kordne.
 

Ülesanne 2.4

Taimeriga lamp (tagapool tuleb sellest ka kirjeldatud variant, kus kasutame muutujaid, aga seda saab ka ilma teostada).
Lamp peab süttima nupuvajutuse peale. Põlemise ajavahemik on potentsiomeetriga reguleeritav. Mingi aja möödudes kustub.

  • Kui nuppu ei vajutata, on LEDid kustutatud.
  • Kui nuppu vajutatakse, siis loetakse potentsiomeetrilt väärtus, lülitatakse sisse D10 LED ja oodatakse ajavahemik, mis sõltub pote väärtusest. Seejärel D10 LED kustub.

Vihje: potentsiomeetrilt loetud väärtus jaga näiteks 50-ga ning ümarda täisarvuks. Pane see "korda ()" bloki korduste arvu auku.

Ülesanne 2.5

"Star Treki" tulukesed keerukam variant.

  • Kui nuppu ei vajutata, siis D9 küljes olev LED põleb poole heledusega.
  • Kui nuppu vajutatakse, siis D9 LED läheb põlema täis heledusega 3-ks sekundiks.
    • Kui selle 3 sekundi jooksul uuesti vajutatakse nuppu, siis hakkavad mõlemad LEDid kordamööda vilkuma ja teevad seda näiteks 0.3 sekundilisevahetumise kiirusega umbes 6 sekundi vältel. (Peale seda võib D9 veidi veel põleda täis heledusega, kuid siis läheb tagasi poole heleduse peale.)
    • Kui 3 sek jooksul ei vajutata uuesti nuppu, siis läheb D9 lihtsalt tagasi poole heleduse peale.

Vihje: Jaga 3 sekundit näiteks 0.5 sekundilisteks osadeks. Pead kasutama blokke "kui()" või "kui muidu()" ja "korda()" võibolla mitmes kohas ja mingil viisil üksteise sees.

Ülesanne 2.6

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: taimerga lamp teine katse.

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.

Skeemi kokkupaneku vihje

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.