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

14. LED heleduse muutmine vastavalt keskkonna valgustugevusele.

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

14.0. Seosed eelmiste peatükkidega

Meenutame kolme peatükki eelnenust: teises peatükis LED vilgutamist, viiendas peatükis LED juhtimist lülitiga ning seitsmendas peatükis fototakistiga korjatud andmete kuvamist arvuti ekraanile—Serial monitori aknasse. Võrdlesime fototakistit seitsmendas peatükis ka lülitiga—nüüd paneme ta ka „lülitina“ tööle—ta on endiselt INPUT rollis; meenutame, milleks kasutasime Analog-in viiku. Kas meenub, kus asuvad Analog-In viigud Arduinol.

14.1. Eesmärk ja selgitused

Peatüki eesmärgiks on tuua välja seoseid peatükkide vahel ning neid seoseid rakendada. Näitena on valitud LED heleduse juhtimine fototakistilt tuleva signaaliga.

Peatüki läbimise järel on õpilasel

a) paranenud ettekujutus sellest, kuidas on võimalik protsessi (nt LED valgustugevuse muutumine) juhtida takistilt (fototakisti) tuleva signaaliga

ning

b) tekkinud enesekindlus ehitada vooluahelat vaid programmitekstile tuginedes.
c) Ühtlasi hakikab ilmnema, et peatükkides proovitut saab omavahel juba kombineerima asuda—fantaasia on piiriks.

14.2. Töövahendid:

1) Arduino Uno;
2) USB ühenduskaabel;
3) arvuti;
4) internetiühendus;
5) maketeerimislaud;
6) fototakisti;
7) LED;
8) kaks takistit;
9) juhtmed.

14.3. Tegevused

Kuna selle peatüki üks eesmärke on suuta vooluahelat koostada vaid programmi põhjal, siis sedakorda ühendamise kohta skeemi juurde ei pane. Skeemi kohta leiab näiteid varasematest peatükkidest—tasub vaadata viiendat ja seitsmendat peatükki. (Kuidas ühendasime lülitit? Kuidas ühendasime valgustundlikku takistit?)

NB!

Kui takisti valesti ühendada, siis me ei saa korralikult töötavat vooluahelat. Takisti enda ühendamisest midagi ei sõltu (erinevalt LED-ist), ent kui see ühendada lüliti või valgustundliku takisti suhtes vale viigu peale, siis meie süsteem ei hakka tööle. Vajadusel vaadake ühendamise kohta varasemate peatükkide materjalist järele.

14.3.1. Programmi tekst

Kommentaarid viikude kohta on kirjutatud programmi. Koosta Arduino-vooluahel, ühenda sellega arvuti, kopeeri siit see programm ning seejärel käivita.

Oleme eespool juba kasutanud ka map() funktsiooni. Vastendusfunktsioon1 map() aitab meil aga Analog-in viigu kaudu loetud analoog-signaali (anduri või potentsiomeetri näidud) muuta meie skeemis vajalikuks LED-i heleduse muutumist juhtivaks vooluks. Tuletame siinkohal meelde servo juhtimist potentsiomeetriga ning kahe servo juhtimist juhtkangi abil.

Kuna LED-i külge ühendatud PWM võimekusega digitaal-viigu pinge on stabiilselt ikka 5V, siis tuleb fototakistilt saadava signaali põhjal LED valgustugevuse juhtimiseks teha vastavas mahus sisse-välja-lülitusi—nii, et mõju LED helendumisele kas väheneks või suureneks vastavuses analoogsignaali muutustega.

Pulsilaiusmodulatsiooniga (PWM = Pulse Width Modulation) tutvusime ka näiteks potentsiomeetri ja juhtkangi abil servomootorite juhtimist käsitlenud 10. peatükis.

1 Vt mapping – tee otsing eestikeelse termini leidmiseks siit: https://stats.cyber.ee/term/238-mapping

14.3.1.2. Programmi tekst

int fotoresistoriViik = A0;
int LED = 3; /* digitaal-real 3 viik on 
PWM tähistusega! NB! Mitte valida selle 
harjutuse jaoks neid digitaal-viikusid, 
mis ei oma PWM võimakust.*/

int fotoresistoriLugemine; /*sellesse 
muutujasse loeme analoogsinaali, mis 
tuleb fotoresistori pealt (A0).*/
int fotoresistoriPWMiksTegemine;
/*sellesse muutujasse loeme peale 
map() funktsiooniga A0-signaali 
enne LED-ile edastamist PWM tarvis töötlemist.*/
void setup()
{
pinMode(LED, OUTPUT);
  /* Et aru saada, kas töötab setup osa,
  siis vilgutame üheksa korda kiirelt LED-i.*/
  for (int i = 1; i<= 9; i= i+1) 
{
  digitalWrite (LED, HIGH);
  delay (200);
  digitalWrite (LED, LOW);
  delay (400);
}
}

void loop()
{ 
int fotoresistoriLugemine = analogRead(fotoresistoriViik);
/*loetakse analogRead abiga A0 pealt tulev fotoresisotri näit*/
int fotoresistoriPWMiksTegemine = map (fotoresistoriLugemine, 0, 1023, 0 , 255);
/*map-funktsiooniga tehakse analoogist digitaalsignaal*/

analogWrite(LED, fotoresistoriPWMiksTegemine);

delay(5);
}  

Harjutus A

Kommenteerimiseks:

  • Miks ühendasime LED-i näiteks digitaal-viik 3 peale, ent ei pannud seda digitaal-viik 12 peale?
  • Kui tegime map() funktsiooni kasutades analoog-signaalist (vahemikus 0-1023) digitaalsignaali (vahemikus 0-255), siis miks on meil valitud analoogile digitaal-vaste leidmiseks just sellised arvud? Mis numbrist alustab arvuti loendamist?
  • Miks kasutame ka teist muutujat (fotoresistoriPWMiksTegemine)? Kas saaksime ka hakkama ühe muutujaga?
  • Miks ühendasime fototakistilt loetava signaali Analog-in viigu peale?

Harjutus B

Muuda viikusid ja kirjuta programm vastavalt ümber—ent nii, et töötaks.

Muuda programmi algusesse pandud programmi tööle hakkamisest ühekordselt märku andvat for-tsüklit. Mis juhtuks, kui paneksime selle void loop() osasse?

Harjutus C

Pane programm tööle nii, et teatud valgustugevusest tugevama valguse korral oleks LED välja lülitatud ning teatud valgustugevusest nõrgema korral oleks LED sisse lülitatud.



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