Arvutiteaduse instituut
  1. Esileht
  2. Noored Koodi
EN
Logi sisse

Noored Koodi

<- Kõik kursused

  • Arduino kursus
  • 1. Sissejuhatus: millist Arduinot valida, programmeerimiskeskkond Arduino IDE
  • 2. Töötamine Arduino IDE-ga, Arduino ühendamine arvutiga ja sisseehitatud LEDi vilgutamine
  • 3. Vooluahela koostamine (LED, takistid, maketeerimislaud, juhtmed) ja värvikood
  • 4. LED-ide vilgutamine FOR tsükliga, lokaalmuutuja kasutamine
  • 5. Lüliti ühendamine ja LEDi vilgutamine vastavalt lüliti asendile: IF/ELSE tingimuse kasutamine
  • 6. RGB ledi ühendamine ja RGB võimaluste katsetamine analogWrite() abil
  • 7. Valgustundliku takisti ja ADC abil valguse mõõtmine ja kuvamine arvuti ekraanil—Serial monitor
  • 8. UART liidese abil andmete vahetamine Arvuti ja Arduino vahel, ASCII tabel
  • 9. Potentsiomeeter: töö-põhimõte, ühendamine, juhtkang (joystick)
  • 10. Servomootori juhtimine—pulsilaiusmodulatsioon ja joystick
  • 11. Ekraani ühendamine ja teksti kuvamine 1602 LCD ekraanil
  • 12. USART ja 1602 LCD: Serial monitorist ekraanile!

  • 13. IDE-s programmeerimisest kokkuvõtvalt
  • 14. LED heleduse muutmine vastavalt keskkonna valgustugevusele
  • 15. Ohmi seadus, multimeetri kasutamine

  • 16. Kordamisküsimused
  • 17. Kontrolltöö

  • 18. LED juhtimine infrapuna-saatjaga ja -vastuvõtjaga
  • 19. HC-SR04 ultrahelisensori ühendamine ja näitude kuvamine LCD ekraanil
  • 20. Joonistame ise programmi Fritzing abil korrektse vooluringi skeemi
  • 21. Sissejuhatavalt sünkroonsest ühendusest (I2C ning SPI) õhurõhu anduri BMP280 näitel
  • 22. CSV—Comma Separated Values
  • 23. Kujundite kuvamine 1602 LCD ekraanil
  • 24. Ekraani ühendamine ja teksti kuvamine 1602 LCD ekraanil
  • 25. Arduino ühendamine bluetooth seadmega
  • 26. Relee juhtimine

  • 27. Digispark: netist tarkvara leidmine, installeerimine ja esimese lihtsa programmi töölepanek
  • 28. ESP32: tarkvara ja lihtsa esimese programmi töölepanek
  • 29. ESP32: jõuame sisse-ehitatud LED vilgutamiseni

  • 30. Kordamine
  • 31. Teooria esitlus
  • 32. Projektiesitlus

4. LED-ide vilgutamine FOR tsükliga, lokaalmuutuja kasutamine

<- eelmine peatükk järgmine peatükk ->

4.0. Seos eelnenud peatükkidega

Eelmises peatükis ehitasime oma esimese vooluahela maketeerimislauale, ühendasime selle Arduinoga, koostasime programmi, mis koosnes kolmest osast. Kui need osad ei meenu, vaadake veelkord eelmise tunni materjalist, mis järjestuses andsite muutujad ning void setup()ja void loop() osad—ning mis on iga osa otstarve.

Vajaduse korral vaadake ka järele, mis moodi ühendate LED-i vooluahelasse. Mõelge sellele, mis moodi oli kirjutatud programm ja kuidas vilkusid LED-id. Kas järjest? Mõelge, kuidas tuleks programmi muuta, selleks, et LED-idest üks vilguks näiteks kuus korda järjest ja teine LED kaks korda järjest. Kas programm peaks olema pikemalt kirjutatud?

4.1. Eesmärk ja selgitused

Selles peatükis kasutame taas eelmises peatükis juba kokku pandud vooluahelat. Oleme omandanud teatava vilumuse ja saame vooluahelat koostades kommenteerida oma tegevust. Käivitame sellel vooluahelal ka eelmisel tunnil tehtud programmi. Mis jääb justkui puudu?

Selle peatüki läbitöötamise järel on õpilane

a) üle korranud lihtsaima vooluahela koostamise,
b) on tuttav FOR-tsükliga.

4.2. Töövahendid on samad, mis eelmiseks tunniks

1) Arduino Uno;
2) USB ühenduskaabel (A-Male to B-Male USB cable);
3) arvuti;
4) internetiühendus ;
5) luup - et paremini Arduinol olevaid tähistusi näha;
6) maketeerimislaud (inglise keeles breadboard);
7) takistid (330 ohm);
8) LEDid (soovitav erinevat värvi);
9) juhtmed (male to male jumper wire).

4.3. Tegevused

4.3.1. Ehitame Arduino juurde vooluahela nii nagu see oli eelmises peatükis

Kommenteerime seejuures tegevust.

  • LED-ide „jalad“ peavad olema õigesti ühendatud.
  • Leidke Arduino peal digitaal-viigud—millisesse viigupesasse Arduino plaadil ühendate need juhtmed, mis juhivad LED-ide vilgutamist?
  • Milleks on vajalik takisti?

Toome igaks juhuks uuesti ära ka eelmises peatükis esitatud skeemi.

4.3.2. Programm, milles on for-tsükkel

Kuna meil on vaja kummagi LED-i kohta n-mitu korda sisse ja välja lülitatud olla, siis kas üks võimalus seda saavutada on nii mitu korda kõik vajalik programmis kirja panna? Kui tahame, et näiteks sinine LED vilguks kolm korda järjest, on see kergesti programmi kirjutatav, ent kui tahame, et süttiks-kustuks 30 korda järjest, siis milliseid raskusi näete programmi pikkuse osas?

Selleks, et vilgutamise osa oleks paremini programmeeritav ja programm paremini loetav, õpime tundma for-tsükliga kordade arvu määramist. Oletame, et meil on vaja, et sinine LED plingiks üheksa korda järjest ja kollane LED viis korda järjest.

Sellisel juhul lisame vastavad for tsüklid:

Void loop(){
for (int i = 1; i<= 9; i= i+1) {
digitalWrite (SININE, HIGH);
delay(SININE_in);
digitalWrite(SININE, LOW);
delay(SININE_out);
}

for (int j = 1; j<= 5; j= j+1) {
digitalWrite (KOLLANE, HIGH);
delay(KOLLANE _in);
digitalWrite(KOLLANE, LOW);
delay(KOLLANE _out);
}
}

NB!

For-tsükli süntaks:

For-tsükli puhul peab kordade arvu määrava osa panema tavaliste sulgude vahele.

Oluline on jälgida, et saaksid paika ka for-tsükli loogelised sulud—et oleks ära näidatud, mille kohta FOR-tsükkel kehtib.

Kui neid nõudeid eirata, siis Teie programm ei kompileeru.

Et lahti seletada for (int j = 1; j<= 5; j= j+1), siis toome välja selle kolm osa.

1. Alustuseks määrame lokaal-muutuja1—loenduri: int j = 1; --st alustame plinkimiskordade loendamist ühest.
  • Selle lõpus kontrollime, ega me ei unustanud lisada semikoolonit (;).
2. Teiseks määrame, kui mitu korda loendame—anname ette tingimuse—seni kuni j ei ole veel jõudnud saada võrdseks viiega või on saanud võrdseks viiega: j<= 5;.
  • Ning vaatame üle, kas lisasime semikooloni (;).
3. Ja lõpuks anname for-tsüklile ette sammu—kui kiiresti kasvab j —loendur—iga kord kui seda tsüklit täidetakse. Formuleering j= j+1 tähendab, et tsükli igakordsel läbimisel (st kordustel seni kuni ei olda veel jõutud vastuoluni tingimusega j<= 5;) kasvab j ühe võrra.
  • Ja sedakorda me ei lisa semikoolonit.
  • Küll aga vaatame, et kas ikka panime kõik kolm tavaliste sulgude ( ja ) vahele.

Loogeliste sulgude vahel aga paikneb kõik see, mida tehakse igakordse tsükli sees—hoitakse LED-i teatud aeg olekus HIGH ja seejärel hoitakse LED-i teatud aeg olekus LOW.

1Lokaal-muutujaks (ka lokaalseks muutujaks) nimetame muutujat, mis defineeritakse vaid teatud programmiosa ees ja mis kehtib vaid selle programmiosa piirides: nt for-tsükli loendur toimib vaid selle tsükli piires.

Harjutus A

Koostage õpitu põhjal programm, milles on vilgutatud LED-i for-tsükliga. Selleks tehke vajalikud muudatused eelmises peatükis kasutatud programmi. Vajadusel esitage küsimusi õpetajale.

Illustratsiooniks:

Veidi teistsuguse näite tarvis saame antud harjutust teha ka teises peatükis uuritud sisse ehitatud LED-iga.

Toon allpool programmi, mis on kirjutatud ühele LED-ile maketeerimislaual ning Arduinole sisse ehitatud LED-ile. Kopeerige see Arduino IDE-sse—ehitage valmis sellele vastav vooluahel ja katsetage erinevate viikudega, võite lisada veel ühe LED-i ja sellele anda muudest erineva vilkumismustri.

int ROHELINE_viik = 5;
int ArduinoLED_viik = 13;

int ArduinoLEDhigh = 100; 
int ArduinoLEDlow = 2000; 

int roheLEDhigh = 500; 
int roheLEDlow = 800;

void setup() {
pinMode(ArduinoLED_viik, OUTPUT); 
pinMode(ROHELINE_viik, OUTPUT); 
}

void loop() { 
for (int i=1; i<=3; i=i+1){
digitalWrite(ArduinoLED_viik, HIGH); 
delay(ArduinoLEDhigh); 
digitalWrite(ArduinoLED_viik, LOW); 
delay(ArduinoLEDlow); 
}

for (int j=1; j<=3; j=j+1){  
  digitalWrite(ROHELINE_viik, HIGH); 
  delay(roheLEDhigh);
  digitalWrite(ROHELINE_viik, LOW);
  delay(roheLEDlow);
}
}

4.4. Kodutöö

4.4.1. Kuidas näeks programm välja siis, kui annaksime ka korduste arvu kummagi LED puhul muutujana?

Kirjutage programm nii ümber, et korduste arv kummagi LED-i plinkimistel oleks toodud muutujana programmi esiosas asuvasse muutujate osasse ja selgitage, miks selline ümberkorraldus võiks programmile kasuks tulla. Esitage see programm järgmiseks tunniks õpetajale.

NB!

Jätame meelde, et Arduino „toite-pinge“ on 5V. LED töökorras püsimise tarvis on oluline lisada toitele ka takisti: et mitte läbi põletada LED-i, peab saama langetada pinget LED viikudel, seda aitabki saavutada takisti.

NB!

Takistite takistusnäitajaid on võimalik ja sageli ka vajalik enne ühendamist üle kontrollida, ent saame tugineda ka värvikoodile: x triibu-mustriga takisti takistuseks on x oomi (Ω). Takistit, erinevalt LED—ist, saab ühendada mõlemat pidi—st ei ole tähtis, millise takisti viigu külge on ühendatud miinus, millise külge pluss—takisti jääb takistiks.

NB!

Arduino IDE-s uue programmi kirjutamisega alustamiseks avame kõigepealt programmeerimiskeskkonna (IDE) ja alustame uue projektiga: File —> New: avaneb uues aknas ja selle sees näeme järgmist programmi-raamistikku, mida programmeerimiskeskkond meile „ette ütleb“:

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

4.4.2. Keelenurk:

Kasulik on siinkohal meelde jätta ka inglise keeles sõna loop (häälda ’luup’) tähendus: eesti keeles kasutame sama mõiste märkimiseks kreeka päritolu sõna ’tsükkel’—märkimaks midagi, mis on korduva iseloomuga, mida sellise korduvuse tõttu annab käsitleda „ringiratast“ liikuvana. Kreeka keeles κύκλος. Nii et sõna tsükkel sobib kenasti. Sõna loop eestikeelset hääldust esitav kirjapilt aga oleks eksitav: sõna luup on meie keeles juba kasutusel.

4.4.3. Koostage veel LED-idega vilkumismustreid

  • Improviseerige! Tehke oma tööst pilti ja esitage tehtust midagi huvitavamat järgmiseks tunniks õpetajale ja teistele õpilastele hinnata.

4.4.4. Kumb piltidest on õige, kumb väär?

Palun ka põhjendage.

Pilt A:

Pilt B:



<- eelmine peatükk järgmine peatükk ->

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Tartu Ülikooli arvutiteaduse instituudi kursuste läbiviimist toetavad järgmised programmid:
euroopa sotsiaalfondi logo