This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:arduino:buttons:project2 [2017/05/31 14:49] – kaupo.raid | et:arduino:buttons:project2 [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | < | ||
| + | ====== Projekt 2 LED-i juhtimine potentsiomeetriga | ||
| + | Ühendada Arduino plaadiga potentsiomeeter. Potentsiomeetri keskmine klemm ühendatakse analoogsisendisse ja äärmistest üks maa ning teine toitega.\\ | ||
| + | |||
| + | |||
| + | {{: | ||
| + | |||
| + | Korrektsel ühendamisel tekib mikrokontrolleri sisendviigu ja maa vahele potentsiomeetri asendist sõltuv pinge. Kui potentsiomeetrit pöörata ühest äärmusest teise, siis sisendpinge muutub vahemikus 0 kuni 5 V. Tekkinud ahelat nimetatakse pingejaguriks, | ||
| + | |||
| + | ===== Näide #2.1 Potentsiomeetri pööramisel üle nivoo süttib LED ===== | ||
| + | Mikrokontrolleril on sisendi digitaalsel kujul lugemisel kindel pingenivoo, millest alates väärtustatakse sisend kõrgeks. Keerates aeglaselt potentsiomeetrit on võimalik see lülitumise punkt üles leida. Muutusest annab märku LED viigul D13. | ||
| + | |||
| + | <code c> | ||
| + | /* | ||
| + | Nimetus: Näide #2.1 | ||
| + | Kirjeldus: Potentsiomeetri pööramisel üle nivoo süttib LED | ||
| + | */ | ||
| + | |||
| + | // Viik kuhu on ühendatud potentsiomeeter | ||
| + | const int pote = A1; | ||
| + | |||
| + | // Viik kuhu on ühendatud LED | ||
| + | const int led = 13; | ||
| + | |||
| + | // Potentsiomeetri muutuja väärtuse salvestamine ja selle algväärtustamine | ||
| + | int poteOlek = 0; | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | /* Mikrokontrolleri viigud on tavaolekus sisendid ja seega ei pea | ||
| + | potentsiomeetri sisendit eraldi seadistama */ | ||
| + | pinMode(led, | ||
| + | } | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | // Viigu muutuja hetkeväärtuse salvestamine | ||
| + | poteOlek = digitalRead(pote); | ||
| + | | ||
| + | // Kui sisendviik on kõrge, siis seame LED viigu kõrgeks | ||
| + | if(poteOlek > 0) | ||
| + | { | ||
| + | digitalWrite(led, | ||
| + | } | ||
| + | // Muul juhul seame led viigu madalaks | ||
| + | else | ||
| + | { | ||
| + | digitalWrite(led, | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Näide #2.2 LED-i vilkumise sagedus sõltub potentsiomeetri asendist ===== | ||
| + | Antud näide käsitleb LED-i vilgutamist analoogsisendi järgi. Sisendiks on eelmisest näitest tuttav potentsiomeeter. Sõltuvalt potentsiomeetri asendist muutuvad programmis viidete pikkused, mida on visuaalselt näha LED-i vilkumisest. Lühemate viidete korral vilkumise sagedus suureneb ja pikemate korral väheneb. | ||
| + | |||
| + | <code c> | ||
| + | /* Nimetus: Näide #2.2 | ||
| + | | ||
| + | */ | ||
| + | // Algus identne näitega #2.1 (kommenteeritud koodi vaata sealt) | ||
| + | const int pote = A1; | ||
| + | const int led = 13; | ||
| + | |||
| + | int poteOlek = 0; | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | pinMode(led, | ||
| + | } | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | // Potentsiomeetri muutuja hetkeväärtuse salvestamine | ||
| + | poteOlek = analogRead(pote); | ||
| + | | ||
| + | // LED viigu oleku kõrgeks seadmine | ||
| + | digitalWrite(led, | ||
| + | | ||
| + | // Viite tekitamine, mille pikkus on võrdne potentsiomeetri sisendi väärtusega | ||
| + | delay(poteOlek); | ||
| + | | ||
| + | // LED viigu oleku madalaks seadmine | ||
| + | digitalWrite(led, | ||
| + | | ||
| + | // Viite tekitamine, mille pikkus on võrdne potentsiomeetri sisendi väärtusega | ||
| + | delay(poteOlek); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Näide #2.3 LED-i ereduse juhtimine potentsiomeetri asendi järgi ===== | ||
| + | Arduino Unol puudub digitaal-analoogmuundur (DAC), mistõttu tuleb LED-i ereduse juhtimiseks seda kiirelt sisse ja välja lülitada. Teostades lülitusi piisaval kiirusel ei ole inimese silmaga LED-i vilkumine märgatav ning tekib tunne, et LED põleb ühtlaselt. Viigu oleku muutmine ise võtab mikrokontrolleril aega vaid mõni mikrosekund. Seega LED-i ereduse juhtimiseks tuleb kasutada viiteid lülituste vahel. Vajalike lühiajaliste viidete teostamiseks saab kasutada käsku // | ||
| + | |||
| + | <code c> | ||
| + | /* Nimetus: Näide #2.3 | ||
| + | | ||
| + | // Algus identne näitega #2.1 (kommenteeritud koodi vaata sealt) | ||
| + | |||
| + | const int pote = A1; | ||
| + | const int led = 13; | ||
| + | int poteOlek = 0; | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | pinMode(led, | ||
| + | } | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | // Potentsiomeetri muutuja hetkeväärtuse salvestamine | ||
| + | poteOlek = analogRead(pote); | ||
| + | | ||
| + | /* Kui potentsiomeetri väärtus on suurem kui 0, siis seame LED viigu kõrgeks, | ||
| + | | ||
| + | if (poteOlek > 0) | ||
| + | { | ||
| + | digitalWrite(led, | ||
| + | delayMicroseconds(poteOlek); | ||
| + | } | ||
| + | | ||
| + | // Seame LED viigu madalasse olekusse | ||
| + | digitalWrite(led, | ||
| + | | ||
| + | // Programm ootab ülejäänud arvu mikrosekundeid perioodist | ||
| + | delayMicroseconds(1023 - poteOlek); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Harjutused ===== | ||
| + | === Harjutus #2.1 === | ||
| + | Modifitseerida näitekoodi nii, et LED läheb põlema viigu kõrgest olekust madalasse olekusse minekul. Potentsiomeetri kogu pöördenurk vastab pingevahemikule 0-5 V. Leida ligilähedane pinge väärtus, mille juures Arduino sisend muutub madalast olekust kõrgesse olekusse ja vastupidi. Kas esineb hüsterees lülitumiste vahel? Tulemuse saamiseks võib kasutada potentsiomeetri nurka või jadapordi monitori. | ||
| + | |||
| + | === Harjutus #2.2 === | ||
| + | Modifitseerida näiteprogrammi nii, et potentsiomeetri keskpunktist (väärtus ~512) ühele poole reguleeritakse LED-i põlemas oleku viidet ja teisele poole kustus oleku viidet. Viite pikkuse reguleerimisel peab maksimaalne viite väärtus olema keskpunkti lähedal ja minimaalne lõpp-punktides. Fikseeritud viite pikkus peab olema 512 millisekundit. Seejuures reguleeritav viite pikkus peab jääma vahemikku 0 kuni 511. Tulemusena peaks ühes potentsiomeetri äärmuses LED olema püsivalt põlemas ja teises püsivalt kustus ning keskel võrdselt põlemas ja kustus. | ||
| + | |||
| + | === Harjutus #2.3 === | ||
| + | Modifitseerida näiteprogrammi nii, et LED põleb ainult potentsiomeetri pööramise ajal. LED-i põlemise eredus sõltub potentsiomeetri pööramise kiirusest. | ||