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

2. Arduino tarkvara tutvustus, ühendamine ja LEDi vilgutamine

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

2.0. Seos eelmise peatükiga

Eelmise peatüki läbimise järel pidi meil olema alla laetud viimane versioon Arduino IDE programmeerimiskeskkonnast. (IDE = Integrated Programming Environment) Järgmisena asume seda installeerima.

2.1. Eesmärk ja selgitused

Selles peatükis kirjeldame eesti keeles Arduino IDE installeerimist. Peale installeerimist on eesmärgiks käivitada esimene programm Seda programmi muutes saame katsetada erinevaid LED vilgutamise mustreid.

Selle peatüki järel õpilane teab, kuidas töötada Arduino IDE-s.

2.2. Töövahendid:

1. arvuti;
2. Arduino—soovitavalt Arduino UNO;
3. USB kaabel Arduino ja arvuti ühendamiseks.

2.3. Alustame tööd Arduino IDE-ga

1. Kõigepealt ühendame Arduino USB kaablit kasutades arvutiga. See on vajalik nii Arduino programmeerimiseks kui ka ühtlasi varustame Arduinot elektriga.
2. Seejärel tuleb installeerida Arduino draiverid.
2.1. Kui kasutate näiteks Windows XP-d või Windows 10, siis installeeritakse draiverid automaatselt niipea kui olete ühendanud Arduino arvutiga—arvuti „tunneb ära“ enda külge USB porti kaudu ühendatud protsessori.
2.2. Kui aga laadisite alla tarkvara Zip-paketina ja mingil põhjusel tarkvara ei tundnud ära Arduinot, palun kasutage järgnevat protseduuri:
a) Start menüüst avada Control Panel.
b) Control Panel osas liikuge System and Security peale, klõpsake System peal—kui System aken on lahti, klõpsake Device Manager peal.
c) Vaadake Ports (COM & LPT): peaks olema näha port Arduino UNO (COMxx). Kui ei ole COM & LPT leida, vaadake Other Devices või Unknown Device alla...
d) Paremklõps hiirega Arduino UNO (COMxx) pordi peal ja valige Update Driver Software.
e) Seejärel valige Browse my computer for Driver software.
f) Leidke draiver arduino.inf, mis asub Drivers kataloogis Arduino tarkvaras... ja Windows peaks installeerimise siit juba lõpuni tegema ise.

Vajaduse korral õpetaja aitab. Esitage küsimusi.

2.3.1. Näidis-programmi kasutamine

Alustamiseks esimese ülesandega tuleb selgitada Arduinole, et tahate vilgutada Arduinole sisse ehitatud LED-i.

a) avada LED blink järgmiselt: File > Examples > 01.Basics > Blink
b) Seejärel Blink peal klikkimise järel avaneb programm.
c) Vajalik öelda Tools > Board all, et kasutate Arduino UNO-t: klõpsake aktiivseks valik Arduino UNO.
d) Seejärel samuti Tools menüüst, klõpsake Ports peal ja avaneb Serial ports menüü—sellelt valige üldjuhul kas COM tähistus, millele järgneb sulgudes Arduino UNO—näiteks antud juhul COM5 port.

Kui eelnenud valik sai tehtud, siis klõpsates programmeerimiskeskkonnas (IDE) Upload peal ja oodates hetke, peaks ilmnema, et Arduino UNO keskel RX ning TX markeeringuga nelinurksed LED-id arvutiga ühendatud Arduino peal annavad aktiveerimisest märku valgusega. Vt allolev pilt, millel näed kahte kõrvuti säravat kollakas-oranži LED-i säramas.

Kui kõik kenasti tehtud, siis peaks Status bar peal olema näha info Done uploading. Vt tähistatud punase joonega alloleval ekraani-pildistusel.
Kui üleslaadimine õnnestus, näeme ka, et viigul number 13 (L) juures LED plingib oranžikas-kollaselt. Töötab!

Alloleval pildil roheline LED tähistab seda, et Arduino on sisse lülitatud, kollakat valgust emiteeriv L-tähega ning 13 viigu juures asuv LED aga vilgub vastavalt meie näidisprogrammis toodud infole. TX ning RX LED-id peale programmi käivitumist enam ei sära—TX ja RX LED-id korraga helendades annavad märku programmi Arduinole laadimise edukusest.

Muutke programmis delay järel sulgudes olevat väärtust. Mida märkate?

Eeldusel, et läbisime etapi 4 edukalt, peaks leidma ekraanilt kirjad:

void setup() {

}

void loop () {

}

Tegemist on igas Arduino programmis sisalduma pidava kahe programmiosaga.

Alustuseks tasub meelde jätta, et void setup () peab sisaldama asju, mida teeme ühekordselt, void loop () aga asju, mida programm peab tegema mitmeid kordi.

NB!

Jätame meelde, et Arduino programm peab sisaldama kahte osa, millest:

  • esimene osa (void setup())—sisaldab ühekordselt tehtavat ning
  • teine osa (void loop())—sisaldab korduma jäävaid tegevusi.

Vaatame korra ka Arduinot. Näeme, et ühel pool on kolmteist viiku, millega saame juhtmete abil ühendada prototüüpimisplaadil asuvaid LEDisid.

Jätame need esialgu meelde kui digitaal-viigud. Vt ka kirjasid Arduino plaadil.

2.4. Programmi kirjutamine

Kuna me aga sellel tunnil veel prototüüpimisplaati ei kasuta, siis vaatame, kuidas saame ilma midagi Arduino UNO külge ühendamata vilgutada Arduino UNO- viigul number 13 asuvat sisseehitatud LED-i: viik 13 sobib Arduino UNO-l just sisseehitatud LED tõttu selliseks esimeseks katsetuseks.

Näiteks kirjutame praktika huvides ümber meie ees lahtiolevasse Arduino programmeerimiskeskkonda järgmise programmi:

void setup() {
  pinMode(13,OUTPUT);
}

void loop() { // kuna see on loop (tsükkel), siis jääb 
  //alljärgnev programmilõik ennast kordama

digitalWrite(13,HIGH); // HIGH tähendab Arduinol 
//asuva 13 viigu LED sisselülitamist
delay(1000); //laseme 13 pin LED-il põleda 
//1000 millisekundit = 1 sekund
digitalWrite(13,LOW); // HIGH tähendab väljalülitamist
delay(2000); //viivitus 2 sekundit--hoiab LED kustunult
}
a) Kui nüüd järgmisena vajutame Verify linnukesega tähistatud märgile, siis programm kompileeritakse.
b) Kui vajutame noolemärgile, siis programm kompileeritakse ja laetakse Arduinole—käivitatakse. Kui programmis vigu ei esine, siis see käivitubki, vastasel korral aga saame veateate.
c) Näeme, et oranž LED on sekundi põlemas ja siis ootab kaks sekundit enne kui uuesti sekundiks süttib—void loop () osas kirjeldatud tsükkel jääb korduma.

Harjutus A

Muutke delay () funktsioonis toodud millisekundeid ja käivitage uuesti programm. Kirjeldage, mida märkate. Korrake tegevust erinevate väärtustega.

2.4.1. Muutujatest

Antud programm on lühike ja kenasti silmaga haaratav.

Kujutame aga ette, et täiendades seda programmi uute käsklustega saame programmi, mis on oluliselt pikem ja et meil ühel hetkel võiks programmi edasiarendamiseks vaja minna selles sisalduvate millisekundite või ka viigunumbrite kiiret muutmist korraga kogu programmi ulatuses.

Kas iga muutujat tuleks kontrollida ükshaaval ja muuta eraldi?
Ükshaaval muutmine on küll võimalik, ent nii tehes me suurendame riski, et kui näiteks jätsime ühes kohas muutused sisse viimata, siis peame asuma korrigeerima pikemat programmi—otsime muutmisel tekkinud vigu ja kaotame aega. Seega ei ole tark ükshaaval ühte ja sama igal pool muutma asuda?

Proovime seega juba oma esimesest programmist alates arvestada, et ka alguses kergesti silmaga haaratav lühike programm võib arenduse käigus hakata kasvama: kui arenduse käigus tuleb edaspidi teha muudatusi, siis on targem neid teha organiseeritult.

Seega lisame antud programmile void setup() osast ettepoole ka muutujate osa. Saame:

  • Muutujad
  • void setup()
  • void loop()

Võime siit kopeerida või ka ümber kirjutada järgmise programmilõigu:

//Selles osas enne void setup-i deklareerime muutujad:

int LED_viik = 13; // muutuja LED_viik väärtuseks on 13. Kuna 
//meid huvitavaks viiguks on viik nr 13.
//int tähendab täisarvu--peame deklareerima ka muutuja tüübi.
//iga rida peab lõppema märgiga ";"--vastasel korral 
//annab programm kompileerimisel veateadet!
int LEDin = 1000; 
// LEDin muutuja annab väärtuseks 1000 millisekundit
int LEDout = 2000; 
// LEDin muutuja annab väärtuseks 2000 millisekundit

//Asendame eelmises programmis kasutatud arvud muutujatega:
void setup() {
  // setup osas antakse oluline üks kord programmile ette
  pinMode(LED_viik,OUTPUT); 
// näiteks et LED_viik on väljundiks. 
//(st ei ole sisend-viiguks)
}

void loop() { // kuna see on loop (tsükkel), siis jääb 
  //alljärgnev programmilõik ennast kordama

digitalWrite(LED_viik,HIGH); // HIGH tähendab Arduinol 
//asuva 13 viigu LED sisselülitamist
delay(LEDin); //laseme viigu number 13 LED-il põleda 
//1000 millisekundit = 1 sekund
digitalWrite(LED_viik,LOW); // HIGH tähendab väljalülitamist
delay(LEDout); //viivitus 2 sekundit--hoiab LED kustunult
}

Harjutus B

Mängime läbi muutujate teemat:

  • Oletame, et meil on vaja muuta LED vilkumise sagedust. Peale programmi tekstis arvude asendamist muutujatega saame proovida muutujate osas (see on ülalpool void setup () funktsiooni asuv osa) asendada näiteks praegu kehtivaid millisekundeid meile huvipakkuvate muudetud väärtustega—teistega kui seda on 1000 ja 2000 millisekundit.
  • Teeme mõned asendused: näiteks kustutame mõlemalt muutujalt ühe nulli—saame 1000 ja 2000 millisekundi asemel 100 ja 200 millisekundit.
  • Seejärel vajutame uuesti kompileerimisenupule, siis aga aktiviseerime programmi.
    a) Kas Arduino viigule 13 sisse ehitatud LED hakkas kiiremini vilkuma?
    b) Mängige programmiga: andke ise veel mõni väärtus ja klõpsake programm uuesti käima.
    c) Mida ei maksa vahetada hetkel, on viik 13—see on Arduino UNO-le sisseehitatud LED-ile vastav viik ja selle muutmise korral, kui me ei lisa vooluringi midagi, mis muutmist õigustaks, siis me ei saa enam töötavat programmi.

NB!

Programm peab vastama reaalsele vooluringile, ilma riistvarata tarkvara paraku ei tööta. Kui asendasite näiteks viigu 13 asemele 10—ja kuna sellele viigule ei vasta oma sisse ehitatud LED-i—ja kuna me ei ole veel midagi ehitanud ka—siis midagi ei juhtugi… (Ehitama asume järgmises peatükis.)

// tähendus on inimesele mõeldud märkus, mida Arduino ei arvesta. Antud juhul alustame iga rida, mis ei ole mõeldud arvutile, ent mille siiski enda või kellegi kaasõpilase tarbeks kirja paneme, märgiga „//“.

Saame märki „//“ kasutada ka selleks, et mõnda programmirida mitteaktiivseks muuta: kõike seda, mille ees on „//“, arvuti ei täida. Mitteaktiivseks muutmist programmiridade korral on mugav kasutada siis, kui on soov kiirelt testida erinevaid programmi-versioone. Sel ajal kui ühega töötame, ei pea teist versiooni tingimata ära kustutama—piisab, kui muudame selle teise versiooni, mida hiljem veel vajada võime, mitteaktiivseks märgi „//“ lisamisega igale reale,mille kohta me ei taha, et arvuti seda loeks.

Kui aga soovime lisada terve lõigu kommentaare, siis alustame lõiku märgiga „/*“ ning lõpetame vastandmärgiga „*/“. Näeme, et selliselt tähistatud osad värvuvad IDE-s helehalliks. Arvuti seda lõiku ignoreerib—see on kommentaar inimesele.

Harjutus C

Kirjutage programmitekstidesse iga rea kohta inimesele mõeldud kommentaar, milleks see rida vajalik on. Võite näiteks võtta eespool toodud programmi ja selles need read, mis moodustavad pikema teksti, vastavalt ka pikemate märkmete teksti jaoks mõeldud märkide abil programmi tööd mitte-häirivaks muuta. Mis on tähistuste „/*“ ja „*/“ eelised „//“ ees?

2.5. Kokkuvõte

Saime tööle esimese programmi—antud juhul Arduinole sisse ehitatud LED kas helendab või ei helenda. Määrame ka LED helendamise kestuse ning samuti LED kustunud oleku kestuse: see on tähtis saavutus—kujutleme hetkeks, mida kõike on võimalik niiviisi sisse või välja lülitada!

Võime näiteks käivitada elektrimootorit. Oleme saavutanud küll hästi lihtsa, ent siiski meie esimese töötava roboti. Järgmisel tunnil katsume teha selle skeemi keerukamaks.

2.5.1. Koduseks harjutamiseks

a) Mängida erinevate väärtustega delay() muutujatega.
b) Luua void loop () osas erinevaid järjestusi sisse-välja lülitamisest, harjutada programmi käima saamist, ka salvestada mõned erinevad versioonid.
c) Harjutada kommentaaride lisamist programmi teksti.

Programmi lugeva inimese suhtes on viisakas iga olulise rea juurde anda ka kommentaar—et kiirelt vajaduse korral selguks, mida selle rea kirjutamisega taotlesite. Iga üherealine kommentaar algab „//“ märgiga. Pange ka mõne programmirea ette märk „//“. Mis juhtub? Kui programm ei komplieeru—lugege veateadet ja kõrvaldage viga—võtke ära „//“.

Millistel juhtudel programm siiski töötab ka mõnda olulist rida välja „selekteerides“? Mida märkate? Iga kommenteeriv pikem lõik algab „/*“ ning lõpeb „*/“.

2.6. Kodutöö

Esitamiseks enne järgmist tundi:

Teile huvitavaim versioon kodustest harjutustest salvestage ja pange lühidalt tähelepanuväärne progammitekstis kommentaarina kirja—miks töötab, mida veel täheldate.
Võib esitada ka mittetöötava versiooni programmist—ent ka sellel juhul tuleb panna juurde kommentaarid—sellel juhul tuleb kommenteerida seda, mida näete veateatest.

2.6.1. Kordamisküsimused

1)Kumb on õige?

A) void loop () osasse panen need asjad mis peavad korduma.
B) void setup () osasse panen need asjad, mis peavad korduma.

2) Kogu programmile oluliste muutujate osa panen

A) void setup () ette,
B) kõige ette,
C) void loop ()ette.
Milline on õige?

3) Leia kõik õiged:

A) muutujad on vajalikud vaid pikkades programmides,
B) muutujad on tark panna igas programmis kasutatud numbrite lihtsamaks muutmiseks, sest see kergendab programmist arusaamist,
C) muutujad on kasutud asjad, mis teevad programmi raskemini loetavaks,
D) muutujate kasutamine kergendab edaspidist tööd programmiga.

4)Esimene praktiline töö tundus

A) raske,
B) kerge,
C) tüütu.
Põhjenda.

5)Muutujateta programmi on lihtne viivitussekundite osas korrigeerida. Kas see väide on vale või õige? Miks?

6)Kui kirjutan programmi, mis ei kajasta vooluahelat, siis programm:

A) annab veateadet,
B) ei pruugi anda veateadet,
C) ei hakka reaalsuses tööle.

(Muutke kodus programmi nii, et see ei kajastaks enam reaalset vooluringi—muutke Arduinole sisseehitatud LED vilgutamise ülesandes õige viigu (13) number valeks—mis käivitamisel juhtub?



<- 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