This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:examples:sensor:humidity [2015/03/03 22:12] – raivo.sell | et:examples:sensor:humidity [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | < | ||
| + | ====== Kombineeritud niiskus-temperatuuriandur ====== | ||
| + | //Vajalikud teadmised: | ||
| + | [HW] [[et: | ||
| + | [LIB] [[et: | ||
| + | [LIB] [[et: | ||
| + | ===== Teooria ===== | ||
| + | [{{ : | ||
| + | Temperatuuri ja niiskuse mõõtmiseks on olemas väga lai valik andureid, millest osa on ka kombineeritud andurid, mis väljastavad nii temperatuuri, | ||
| + | |||
| + | Niiskus on sisuliselt vee osakaal õhus. Niiskuse erinev väärtus mõjutab seadmete tööd, korrosiooni ja elusorganismide talitlusvõimet ning elukeskkonda olulisel määral ja seetõttu on robottehnilistes seadmete oluline mõõta suhtelise niiskuse osakaalu õhus, et vastavalt sellele mingeid protsesse juhtida. Levinud niiskusanduri kasutusvaldkond on targa maja või targa kasvuhoone rakendused, kus vastavalt õhuniiskuse tasemele lülitatakse sisse konditsioneere, | ||
| + | |||
| + | [{{ : | ||
| + | 1-juhtme ühendus on peamiselt kasutusel erinevate andurite ja mäludega suhtlemiseks. Saavutatav maksimaalne kiirus jääb 16,3 kbit/s piirimaile. Juhtseade alustab suhtlust taaskäivituse (inglise keeles //reset//) pulsiga, mis tõmbab siini maha vähemalt 480 µs. Peale seda järgneb 8 bitine korraldus, mida kuulavad kõik seadmed. Seade, millele see adresseeritud on, vastab. Andmeid saadetakse ja võetakse vastu 8 bitilistes gruppides, kus igal seadmel on unikaalne 64 bitine seerianumber. | ||
| + | Bittide edastamine toimub pulsi pikkuse järgi. " | ||
| + | |||
| + | ===== Praktika ===== | ||
| + | |||
| + | Näiteks on toodud kaks erinevat temperatuuri/ | ||
| + | |||
| + | 1-juhtme standardset andmevahetusliidest kasutab digitaalne termomeeter DS18S20, mille mõõdetav temperatuurivahemik on -55...+100 °C. | ||
| + | DS18S20 temperatuurianduri saab ühendada tavalisse digitaalviiku, | ||
| + | |||
| + | Robootika Kodulaboris on standardse 1-juhtme andmeside liidese kasutamiseks loodud eraldi teek // | ||
| + | |||
| + | Lisaks standard 1-juhtme protokollile on sarnastel omadustel põhinevad, kuid veidi erinevat toimeloogikat kasutatavad 1-juhtme siini andmevahetusprotokollid. Ühte sellist rakendatakse ka odavate kombineeritud niiskuse temperatuuriandurite DHTxx seeria juures. DHTxx andmesidepakett jaguneb järgmiselt: | ||
| + | * Start bitt | ||
| + | * niiskuse kõrgem bait | ||
| + | * niiskuse madalam bait | ||
| + | * temperatuuri kõrgem bait | ||
| + | * temperatuuri madalam bait | ||
| + | * CRC kontrollbait (eelnevate baitide summa madalaim bait) | ||
| + | |||
| + | DHT11 anduril on temperatuuri ja niiskuse mõõtetulemus otseselt loetav kõrgemast baidist ning madalam bait on tühi. DHT22 anduril on temperatuuri ja niiskuse mõõtetulemus paketis 16 bitise arvuna ning ühe komakohaga, st tagastatud number 245 vastab temperatuurile 24,5 °C. | ||
| + | |||
| + | [{{ : | ||
| + | Andmesiinil käib suhtlus avatud kollektor režiimis. See tähendab, et kõrge nivoo tuleneb siinile ühendatud //pullup// takistist ning andur ning mikrokontroller tekitavad andmebitte | ||
| + | |||
| + | Anduri lugemine on realiseeritud Kodulabori andurite teegis // | ||
| + | |||
| + | Näitekoodis loetakse PORTE viiku 0 ühendatud andurit DHT11 ja PORTE viiku 1 ühendatud andurit DHT22. | ||
| + | |||
| + | [{{: | ||
| + | ~~CL~~ | ||
| + | <code c> | ||
| + | // Kodulabori DHT niiskus ja temperatuurianduri lugemise näidisprogramm | ||
| + | // LCD-le kuvatakse temperatuur ja niiskus ning temperatuuri muutuse graafik | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | // Andurite signaali ühendusviigu defineerimine | ||
| + | pin DHTpin = PIN(E,0); | ||
| + | |||
| + | // Põhiprogramm | ||
| + | int main(void) | ||
| + | { | ||
| + | char text[60]; | ||
| + | char i=0; | ||
| + | |||
| + | // LCD ekraani algseadistamine | ||
| + | lcd_gfx_init(); | ||
| + | |||
| + | // Lõputu tsükkel | ||
| + | while (1) | ||
| + | { | ||
| + | lcd_gfx_goto_char_xy(3, | ||
| + | lcd_gfx_write_string(" | ||
| + | | ||
| + | // DHTxx anduri näidu lugemine ja kuvamine LCD-l | ||
| + | // DHT_update esimene parameeter on anduri tüüp (DHT11 või DHT22) | ||
| + | DHT_update(DHT22, | ||
| + | lcd_gfx_goto_char_xy(0, | ||
| + | sprintf(text," | ||
| + | lcd_gfx_write_string(text); | ||
| + | |||
| + | // Temperatuuri graafiku joonistamine (toimib vaid kodulabor III generatsioonil) | ||
| + | lcd_gfx_drawPixel(i++, | ||
| + | sw_delay_ms(500); | ||
| + | |||
| + | // Graafiku otsast alustamine, kui joon on lõppu jõudnud | ||
| + | if (i>126) | ||
| + | { | ||
| + | i=0; | ||
| + | lcd_gfx_clear(); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||