This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:arduino:sensorss:project2 [2017/06/01 13:14] – kaupo.raid | et:arduino:sensorss:project2 [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | < | ||
| + | ====== Projekt 4 Andurite lugemine ja väärtuse kuvamine | ||
| + | |||
| + | Arduino LCD laiendusplaadi peal on andurite ühendamiseks olemas 5 sisend/ | ||
| + | Ühendada Arduino LCD laiendusplaadiga vajalikud andurid: | ||
| + | * Temperatuuriandur: | ||
| + | * Ultraheli kaugusandur: | ||
| + | * Infrapunalähedusandur: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ===== Näide #4.1 Temperatuuriandur koos matemaatika teegiga ===== | ||
| + | Takistuslikud analoogandurid ühendatakse mikrokontrolleriga selliselt, et see moodustab pingejaguri. Sama käib ka NTC temperatuurianduri kohta. Antud juhul tuleb lisaks andurile ühendada väline takisti 10 kΩ sisendviigu ja maapotentsiaali vahele. AK06 robotiehitamise komplekt puhul kasutada juba komplektis kaasa tulnud pingejaguri kaablit, millel on takisti juba küljes. | ||
| + | \\ | ||
| + | Temperatuurianduri analoogväärtuse lugemine tehakse peatsüklis, | ||
| + | |||
| + | <code c> | ||
| + | /* Nimetus: Näide #4.1 | ||
| + | Kirjeldus: Temperatuuriandur koos matemaatika teegiga | ||
| + | | ||
| + | | ||
| + | kus A = 0.001129148, | ||
| + | */ | ||
| + | |||
| + | // Vajalike teekide kaasamine | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | // LCD objekti tekitamine ja ühendusviikude määramine. | ||
| + | LiquidCrystal lcd(8, 9, 4, 5, 6, 7); | ||
| + | const int andur = A1; // Viik kuhu on ühendatud temperatuuriandur (termistor) | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | lcd.begin(16, | ||
| + | lcd.print(" | ||
| + | delay (1000); // 1 sekundiline viide enne põhitsüklit | ||
| + | } | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | /* Funktsiooni Termistor väljakutsumine, | ||
| + | parameetrina temperatuurianduri hetkväärtust */ | ||
| + | Termistor(analogRead(andur)); | ||
| + | delay(1000); | ||
| + | lcd.clear(); | ||
| + | } | ||
| + | |||
| + | /* Funktsioon konverteerib saadud anduri väärtuse | ||
| + | | ||
| + | void Termistor(int RawADC) | ||
| + | { | ||
| + | // Lokaalsete muutujate defineerimine | ||
| + | double Temp; | ||
| + | long Takistus; | ||
| + | |||
| + | // Valem: Takistus = (1024 * JaguriTakisti/ | ||
| + | Takistus = ((10240000/ | ||
| + | |||
| + | // Esimese rea ekraanil kuvamine | ||
| + | lcd.setCursor(0, | ||
| + | lcd.print(" | ||
| + | lcd.print(RawADC); | ||
| + | lcd.setCursor(8, | ||
| + | lcd.print(" | ||
| + | lcd.print(((RawADC*5.0)/ | ||
| + | |||
| + | // Teise rea ekraanil kuvamine | ||
| + | lcd.setCursor(0, | ||
| + | lcd.print(" | ||
| + | lcd.print(Takistus); | ||
| + | Temp = log(Takistus); | ||
| + | // Steinhart-Hart termistori valemi kaudu temperatuur kelvinites | ||
| + | Temp = 1/ | ||
| + | Temp = Temp - 273.15; // Konverteerime Kelvini skaalast Celsiuse skaalasse | ||
| + | lcd.setCursor(8, | ||
| + | lcd.print(" | ||
| + | lcd.print(Temp); | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | < | ||
| + | ===== Näide #4.2 Kaugus- ja lähedusandurid ===== | ||
| + | Kaugust hindavaid andureid on mõõtmismeetodi järgi üldjuhul kahte tüüpi: | ||
| + | * Lähedust tuvastavad andurid - objekt on või ei ole näha. | ||
| + | * Kaugust mõõtvad andurid - tagastab objekt kauguse. | ||
| + | Antud projektis kasutame mõlemast tüübist ühte andurit. Esimesse kategooriasse kuulub infrapunalähedusandur, | ||
| + | Näiteprogrammi eesmärk on teha anduritega mõõtmisi ja mõõtetulemused kuvada ekraanile. Anduritelt info saamiseks on vaja need kõigepealt seadistada. Infrapunaanduri puhul on vaja ainult ühte digitaalset sisendviiku, | ||
| + | //NewPing// teegi saab alla laadida siit: [[http:// | ||
| + | Abi teegi lisamisel leiab tarkvara peatükist ja veebilehelt siit: [[https:// | ||
| + | |||
| + | <code c> | ||
| + | /* | ||
| + | Nimetus: Näide #4.2 | ||
| + | Kirjeldus: LCD laiendusplaadi kasutamine kaugus- ja lähedusanduritega | ||
| + | */ | ||
| + | |||
| + | // Vajalike teekide kaasamine | ||
| + | // LCD ekraani funktsioone sisaldav teek | ||
| + | #include < | ||
| + | // Ultrahelianduri funktsioone sisaldav teek | ||
| + | #include < | ||
| + | |||
| + | // Andurite ühendusviikude määramine | ||
| + | const int ultraheliKaugusandur_TRIGGER = A2; | ||
| + | const int ultraheliKaugusandur_ECHO = A3; | ||
| + | const int infrapunaLahedusandur = A4; | ||
| + | |||
| + | /* Globaalsed muutujad ja konstandid */ | ||
| + | const int ultraheliKaugusandur_maksimumKaugus = 200; | ||
| + | int ultraheliKaugus, | ||
| + | |||
| + | // LCD objekti tekitamine ja ühendusviikude määramine | ||
| + | LiquidCrystal lcd(8, 9, 4, 5, 6, 7); | ||
| + | |||
| + | // Ultraheli kaugusanduri objekti tekitamine koos viikude ühendamisega | ||
| + | NewPing sonar(ultraheliKaugusandur_TRIGGER, | ||
| + | ultraheliKaugusandur_maksimumKaugus); | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | // LCD ridade ja veergude määramine vastavalt riistvarale | ||
| + | lcd.begin(16, | ||
| + | |||
| + | // Selgitavate tekstide kuvamine ekraanil | ||
| + | lcd.print(" | ||
| + | lcd.setCursor(0, | ||
| + | lcd.print(" | ||
| + | } | ||
| + | void loop() | ||
| + | { | ||
| + | // Ultrahelianduriga kaguse mõõtmine sentimeetrites ja muutujasse salvestamine | ||
| + | ultraheliKaugus = sonar.ping_cm(); | ||
| + | |||
| + | // Lähedusanduri väärtuse lugemine ja muutujasse salvestamine | ||
| + | infrapunaNaebObjekti = digitalRead(infrapunaLahedusandur); | ||
| + | |||
| + | // Kursori esimesele reale ja tähemärgile 9 nihutamine | ||
| + | lcd.setCursor(9, | ||
| + | |||
| + | // Ekraani kaugusanduri mõõdetud kauguse kuvamine | ||
| + | lcd.print(ultraheliKaugus); | ||
| + | |||
| + | /* Trükime üle järgnevad kolm tähemärki tühikutega, | ||
| + | et vana lugemi väärtus ei jääks ekraanil näha */ | ||
| + | lcd.print(" | ||
| + | |||
| + | // Kursori teisele reale ja tähemärgile 9 nihutamine | ||
| + | lcd.setCursor(9, | ||
| + | |||
| + | // Kui infrapunalähedusanduri väljund on kõrge, siis kirjuta ekraanile " | ||
| + | if(infrapunaNaebObjekti == 1) lcd.print(" | ||
| + | |||
| + | // Kui infrapunalähedusanduri väljund on madal, siis kirjuta ekraanile " | ||
| + | else lcd.print(" | ||
| + | |||
| + | // Väike viide, et tekst ekraanil oleks loetavam | ||
| + | delay(500); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Harjutused ===== | ||
| + | === Harjutus #4.1 === | ||
| + | Modifitseerida näiteprogrammi nii, et potentsiomeetriga määratakse temperatuuri nivoo, mis salvestatakse nupuga programmi mällu ja selle nivoo ületamisel käivitatakse täiturmehhanism (milleks on LED).\\ | ||
| + | Lisaülesanne: | ||
| + | |||
| + | === Harjutus #4.2 === | ||
| + | Modifitseerida näiteprogrammi vastavalt vajadusele, et selgitada välja kumb anduritest reageerib kauguse muutusele kiiremini. Võimalusel kontrollida tulemust veebist. | ||