Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:examples:sensor:humidity [2015/02/26 13:15] raivo.sellet:examples:sensor:humidity [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-~~PB~~+<pagebreak>
 ====== Kombineeritud niiskus-temperatuuriandur ====== ====== Kombineeritud niiskus-temperatuuriandur ======
 //Vajalikud teadmised:  //Vajalikud teadmised: 
Line 8: Line 8:
 ===== Teooria ===== ===== Teooria =====
 [{{ :et:examples:sensor:am2302_pinout.jpg?180|DHT11}}] [{{ :et:examples:sensor:am2302_pinout.jpg?180|DHT11}}]
-Temperatuuri ja niiskuse mõõtmiseks on olemas väga lai valik andureid, millest osa on ka kombineeritud andurid, mis väljastavad nii temperatuuri, kui ka niiskuse. Hinna poolest väga soodsad andurid on DHTxx seeria andurid, mille täpsus pole küll väga suur, kuid täiesti piisav tavakasutajale. Temperatuuriandureid toodetakse erineval tehnoloogial, millest termistoridest oli juttu ka eelmises peatükis. Lisaks termistor tüüpi temperatuurianduritele on olemas veel termopaarid, kiirguse kaudu temperatuuri mõõtvad andurid, metalltakistuse kaudu temperatuuri mõõtvad andurid, jne. Sõltumata anduri füüsikaliset mõõteprintsiibist on mitmetele anduritele ühte korpusesse koostatud ka juhtelektroonika, mis väljastab anduri lugemi digitaalse signaalina. Nagu eelpool mainitud on  olemas kombineeritud andurid, mis lisaks temperatuurile mõõdavad veel mingit muud keskkonna parameetrit, millest kõige tüüpilisem on suhtelise niiskuse mõõtmine. +Temperatuuri ja niiskuse mõõtmiseks on olemas väga lai valik andureid, millest osa on ka kombineeritud andurid, mis väljastavad nii temperatuuri, kui ka niiskuse. Hinna poolest väga soodsad andurid on DHTxx seeria andurid, mille täpsus pole küll väga suur, kuid täiesti piisav tavakasutajale. Temperatuuriandureid toodetakse erineval tehnoloogial, millest termistoridest oli juttu ka eelmises peatükis. Lisaks termistor tüüpi temperatuurianduritele on olemas veel termopaarid, kiirguse kaudu temperatuuri mõõtvad andurid, metalltakistuse kaudu temperatuuri mõõtvad andurid, jne. Sõltumata anduri füüsikalisest mõõteprintsiibist on mitmetele anduritele ühte korpusesse koostatud ka juhtelektroonika, mis väljastab anduri lugemi digitaalse signaalina. Nagu eelpool mainitud on  olemas kombineeritud andurid, mis lisaks temperatuurile mõõdavad veel mingit muud keskkonna parameetrit, millest kõige tüüpilisem on suhtelise niiskuse mõõtmine. 
  
-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, ventilaatoreid või niisutussüsteeme. Niiskusandurid toimivad jämedalt võttes kahel printsiibil, kus mõõtesuuruse elektriline teisendus toimub vastavalt mahtuvuse või takistuse kaudu. Mõlemal juhul teisendatakse õhu suhteline niiskus elektriliseks signaaliks, mis on sõltuvalt andurist, kas lihtne analoogsignaal (mingi pingevahemik) või mõne andmevahtusprotokolli digitaalsignaal. Levinud digitaalsignaali tüübid niiskuse ja temperatuuri anduritel on nn 1-juhtme (inglise keeles //1-wire//) signaal, kus andmevahetus toimub 1 füüsilise viigu kaudu. 1-juhtme andmevahetusprotokolli töötas välja Dallas Semiconductor lihtsamate seadmete ja anduritega suhtlemiseks. Lisaks mõlemasuunalisele andmevahetusele on võimalik ka seadme toide sama juhtme külge ühendada. Liides võimaldab ühele siinile ühendada üle 75 seadme, moodustades mikrokohtvõrke (inglise keeles //MicroLan//). MicroLan võrgus on üks juhtseade, mis juhib võrgus liiklust ja tagab, et siinil olevad seadmed ei üritaks korraga rääkida.+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, ventilaatoreid või niisutussüsteeme. Niiskusandurid toimivad jämedalt võttes kahel printsiibil, kus mõõtesuuruse elektriline teisendus toimub vastavalt mahtuvuse või takistuse kaudu. Mõlemal juhul teisendatakse õhu suhteline niiskus elektriliseks signaaliks, mis on sõltuvalt andurist, kas lihtne analoogsignaal (mingi pingevahemik) või mõne andmevahetusprotokolli digitaalsignaal. Levinud digitaalsignaali tüübid niiskuse ja temperatuuri anduritel on nn 1-juhtme (inglise keeles //1-wire//) signaal, kus andmevahetus toimub 1 füüsilise viigu kaudu. 1-juhtme andmevahetusprotokolli töötas välja Dallas Semiconductor lihtsamate seadmete ja anduritega suhtlemiseks. Lisaks mõlemasuunalisele andmevahetusele on võimalik ka seadme toide sama juhtme külge ühendada. Liides võimaldab ühele siinile ühendada üle 75 seadme, moodustades mikrokohtvõrke (inglise keeles //MicroLan//). MicroLan võrgus on üks juhtseade, mis juhib võrgus liiklust ja tagab, et siinil olevad seadmed ei üritaks korraga rääkida.
  
 [{{  :et:examples:sensor:1-wire_yhendus.png?380|1-juhtme tüüpi andurite võrguühendused}}] [{{  :et:examples:sensor:1-wire_yhendus.png?380|1-juhtme tüüpi andurite võrguühendused}}]
 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. 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. "1" saatmiseks tekitatakse pulss pikkusega 1 - 15 µs ja "0" saatmiseks 60 µs.  Bittide edastamine toimub pulsi pikkuse järgi. "1" saatmiseks tekitatakse pulss pikkusega 1 - 15 µs ja "0" saatmiseks 60 µs. 
  
Line 22: Line 21:
  
 1-juhtme standardset andmevahetusliidest kasutab digitaalne termomeeter DS18S20, mille mõõdetav temperatuurivahemik on -55...+100 °C. 1-juhtme standardset andmevahetusliidest kasutab digitaalne termomeeter DS18S20, mille mõõdetav temperatuurivahemik on -55...+100 °C.
-DS18S20 temperatuurianduri saab ühendada tavalisse digitaalviiku, kus ühte viiku võib ühendada mitu andurit. Samuti tuleb valida anduri toiteviis, mis võib olla eraldi toiteviik või kasutatakse sama viiku, kuhu on ühendatud andmesidekanal. Andmesidekanaliga kokkuühendatud ühendusviisi kutsutakse parasiittoiteks ja sellisel juhul on kasutuses ainult kaks juhet.+DS18S20 temperatuurianduri saab ühendada tavalisse digitaalviiku, kus ühele siinile võib ühendada mitu andurit. Samuti tuleb valida anduri toiteviis, mis võib olla eraldi toiteviik või kasutatakse sama viiku, kuhu on ühendatud andmesidekanal. Andmesidekanaliga kokkuühendatud ühendusviisi kutsutakse parasiittoiteks ja sellisel juhul on kasutuses ainult kaks juhet.
  
-Robootika Kodulaboris on standardse 1-juhtme andmeside liidese kasutamiseks loodud eraldi teek //onewire.h//, mis sisaldab 1-juhtme siini juhtkäskusid. Andurispetsiifiline teek on //ds18x20.h//. DHTxx seeria andurite funktsionaalsus on integreeritud ülisesse andurite teeki //sensors.h//.+Robootika Kodulaboris on standardse 1-juhtme andmeside liidese kasutamiseks loodud eraldi teek //onewire.h//, mis sisaldab 1-juhtme siini juhtkäskusid. Andurispetsiifiline teek on //ds18x20.h//. DHTxx seeria andurite funktsionaalsus on integreeritud üldisesse andurite teeki //sensors.h//.
  
 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: 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 bit +  * Start bitt 
-  * 8-bit niiskuse kõrgem bait +  * niiskuse kõrgem bait 
-  * 8-bit niiskuse madalam bait +  * niiskuse madalam bait 
-  * 8-bit temperatuuri kõrgem bait +  * temperatuuri kõrgem bait 
-  * 8-bit temperatuuri madalam bait +  * temperatuuri madalam bait 
-  * 8-bit CRC kontrollbait (eelnevate baitide summa madalaim 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. 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.
  
 [{{ :et:examples:sensor:dht_anduri_yhendus.png?250|DHTxx ühendamise skeem}}] [{{ :et:examples:sensor:dht_anduri_yhendus.png?250|DHTxx ühendamise skeem}}]
-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  siini kordamööda madalale tõmmates. Start bitiks loetakse olukorda, kus kontroller tõmbab siini madalaks vähemalt 18 ms, ning pärast seda laseb kõrgeks tagasi. Pärast start biti saadab andur siinile vastuse biti ning mõõdetud tulemused. Andmete 0 ja 1 bit on defineeritud biti kõrge osa laiusega. Bit 0 on defineeritud kui 50 µs madal pulss, millele järgneb 26-28 µs kõrge pulss. Bit 1 on defineeritud kui 50 µs madal pulss, millele järgneb 70 µs kõrge pulss. Andmepakett lõppeb 50 µs pikkuse madala pulsiga ning lõpuks laseb andur siini tagasi kõrgeks. Tarkvaraline realisatsioon on leitav teegi failist //sensors.c// funktsiooni //DHT_update// alt.+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  siini kordamööda madalale tõmmates. Start bitiks loetakse olukorda, kus kontroller tõmbab siini madalaks vähemalt 18 ms, ning pärast seda laseb kõrgeks tagasi. Pärast start biti saadab andur siinile vastuse biti ning mõõdetud tulemused. Andmete 0 ja 1 bitt on defineeritud biti kõrge osa laiusega. Bitt 0 on defineeritud kui 50 µs madal pulss, millele järgneb 26-28 µs kõrge pulss. Bitt 1 on defineeritud kui 50 µs madal pulss, millele järgneb 70 µs kõrge pulss. Andmepakett lõppeb 50 µs pikkuse madala pulsiga ning lõpuks laseb andur siini tagasi kõrgeks. Tarkvaraline realisatsioon on leitav teegi failist //sensors.c// funktsiooni //DHT_update// alt.
  
 Anduri lugemine on realiseeritud Kodulabori andurite teegis //sensors.h//. Käsuga //DHT_update()// uuendatakse kaht globaalset muutujat //dht_temp// (temperatuur) ja //dht_hum// (niiskus). Anduri lugemine on realiseeritud Kodulabori andurite teegis //sensors.h//. Käsuga //DHT_update()// uuendatakse kaht globaalset muutujat //dht_temp// (temperatuur) ja //dht_hum// (niiskus).
Line 67: Line 66:
  
     // Lõputu tsükkel     // Lõputu tsükkel
-    while (true)+    while (1)
     {     {
         lcd_gfx_goto_char_xy(3, 0);         lcd_gfx_goto_char_xy(3, 0);
         lcd_gfx_write_string("DHTxx andur");         lcd_gfx_write_string("DHTxx andur");
 +        
         // DHTxx anduri näidu lugemine ja kuvamine LCD-l         // DHTxx anduri näidu lugemine ja kuvamine LCD-l
         // DHT_update esimene parameeter on anduri tüüp (DHT11 või DHT22)         // DHT_update esimene parameeter on anduri tüüp (DHT11 või DHT22)
Line 78: Line 78:
         lcd_gfx_write_string(text);         lcd_gfx_write_string(text);
  
-        // Temperatuuri graafiku joonistamine+        // Temperatuuri graafiku joonistamine (toimib vaid kodulabor III generatsioonil)
         lcd_gfx_drawPixel(i++,100-(dht_temp/10));         lcd_gfx_drawPixel(i++,100-(dht_temp/10));
         sw_delay_ms(500);         sw_delay_ms(500);
et/examples/sensor/humidity.1424956554.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0