- DHT11 - Specifikacija ir darbas
- Bendravimas su DHT11 jutikliu
- Reikalingi komponentai
- Schema
- DHT11 su PIC MPLABX kodo paaiškinimu
Temperatūros ir drėgmės matavimas dažnai yra naudingas daugelyje programų, tokių kaip namų automatika, aplinkos stebėjimas, meteorologinė stotis ir tt Pi ir daugelis kitų kūrimo lentų. Šiame straipsnyje mes sužinosime, kaip susieti šį DHT11 su PIC16F87A, kuris yra 8 bitų PIC mikrovaldiklis. Mes naudosime šį mikrovaldiklį temperatūros ir drėgmės vertėms nuskaityti naudodami DHT11 ir parodyti ją LCD ekrane. Jei dar visiškai nesinaudojate PIC mikrovaldikliais, galite pasinaudoti mūsų PIC mokomųjų programų serija, kad sužinotumėte, kaip programuoti ir naudoti PIC mikrovaldiklį, sakykime, pradėkime.
DHT11 - Specifikacija ir darbas
DHT11 jutiklis yra modulio arba jutiklio formos. Šioje pamokoje mes naudojame jutiklį, vienintelis skirtumas tarp abiejų yra tas, kad modulio formos jutiklyje yra filtravimo kondensatorius ir prisitraukimo rezistorius, pritvirtintas prie jutiklio išvesties kaiščio. Taigi, jei naudojate modulį, jo nereikia pridėti iš išorės. DHT11 jutiklio pavidalu parodyta žemiau.
DHT11 jutiklis yra su mėlynos arba baltos spalvos korpusu. Šio apvalkalo viduje turime du svarbius komponentus, kurie padeda suvokti santykinę drėgmę ir temperatūrą. Pirmasis komponentas yra pora elektrodų; elektrinę varžą tarp šių dviejų elektrodų lemia drėgmę sulaikantis pagrindas. Taigi išmatuotas atsparumas yra atvirkščiai proporcingas santykinei aplinkos drėgmei. Aukštesnė santykinė drėgmė, mažesnė bus atsparumo vertė ir atvirkščiai. Taip pat atkreipkite dėmesį, kad santykinė drėgmė skiriasi nuo faktinės drėgmės. Santykinė drėgmė matuoja vandens kiekį ore, palyginti su oro temperatūra.
Kitas komponentas yra ant paviršiaus sumontuotas NTC termistorius. Terminas NTC reiškia neigiamą temperatūros koeficientą, padidėjus temperatūrai atsparumo vertė sumažės. Jutiklio išvestis yra kalibruota gamykloje, todėl mums, kaip programuotojui, nereikia nerimauti dėl jutiklio kalibravimo. Jutiklio išvestis, kurią suteikia „ 1-Wire“ ryšys, pažiūrėkime šio jutiklio kaištį ir prijungimo schemą.
Produktas yra 4 pinų vienos eilės pakuotėje. 1-as kaištis yra prijungtas per VDD, o 4-asis - per GND. Antrasis kaištis yra duomenų kaištis, naudojamas ryšių tikslais. Šiam duomenų kaiščiui reikia 5 k varžos. Tačiau gali būti naudojami ir kiti rezistoriai, tokie kaip 4,7 k iki 10 k. 3-as kaištis nėra su niekuo susijęs. Taigi jis ignoruojamas.
Duomenų lape pateikiamos techninės specifikacijos, taip pat sąsajos informacija, kurią galima pamatyti žemiau esančioje lentelėje.
Aukščiau pateiktoje lentelėje parodytas temperatūros ir drėgmės matavimo diapazonas ir tikslumas. Jis gali matuoti temperatūrą nuo 0-50 laipsnių Celsijaus +/- 2 laipsnių Celsijaus tikslumu ir santykinę drėgmę nuo 20-90% RH tikslumu +/- 5% RH. Išsamią specifikaciją galima pamatyti žemiau esančioje lentelėje.
Bendravimas su DHT11 jutikliu
Kaip minėta anksčiau, norėdami perskaityti duomenis iš DHT11 su PIC, turime naudoti PIC vieno laido ryšio protokolą. Išsamią informaciją, kaip tai padaryti, galima suprasti iš DHT 11 sąsajos schemos, kurią galite rasti jos duomenų lape, tas pats pateikiama toliau.
Norint pradėti ryšį, DHT11 reikia MCU paleidimo signalo. Todėl kiekvieną kartą, kai MCU reikia siųsti pradinį signalą į DHT11 jutiklį, kad jis paprašytų išsiųsti temperatūros ir drėgmės vertes. Baigęs paleidimo signalą, DHT11 siunčia atsako signalą, kuriame pateikiama informacija apie temperatūrą ir drėgmę. Duomenų perdavimas atliekamas vienos magistralės duomenų perdavimo protokolu. Visas duomenų ilgis yra 40 bitų, o jutiklis pirmiausia siunčia didesnį duomenų bitą.
Dėl ištraukimo rezistoriaus tuščiosios eigos režimu duomenų linija visada išlieka VCC lygyje. MCU turi nuleisti šią įtampą žemai iki mažiausios 18ms trukmės. Per šį laiką DHT11 jutiklis aptinka paleidimo signalą, o mikrovaldiklis padidina duomenų liniją 20-40 us. Šis 20–40 metų laikas vadinamas laukimo periodu, kai DHT11 pradeda reaguoti. Praėjus šiam laukimo laikotarpiui, DHT11 siunčia duomenis į mikrovaldiklio bloką.
DHT11 jutiklio DUOMENŲ formatas
Duomenis sudaro dešimtainė ir integralinė dalys, sujungtos kartu. Jutiklis atitinka toliau nurodytą duomenų formatą -
8 bitų integraliniai RH duomenys + 8 bitų dešimtainiai RH duomenys + 8 bitų integraliniai T duomenys + 8 bitų dešimtainiai T duomenys + 8 bitų kontrolinė suma.
Duomenis galima patikrinti patikrinus kontrolinę sumą pagal gautus duomenis. Tai galima padaryti, nes, jei viskas yra tinkama ir jei jutiklis perdavė tinkamus duomenis, kontrolinė suma turėtų būti „8 bitų integraliųjų RH duomenų + 8 bitų dešimtainių RH duomenų + 8 bitų integralinių T duomenų + 8 bitų dešimtainių T duomenų suma“.
Reikalingi komponentai
Šiam projektui reikalingi šie dalykai:
- PIC mikrovaldiklio (8 bitų) programavimo sąranka.
- Bandomoji Lenta
- 5V 500mA maitinimo blokas.
- 4.7k rezistorius 2vnt
- 1k rezistorius
- PIC16F877A
- 20mHz kristalas
- 33pF kondensatorius 2 vnt
- 16x2 simbolių LCD ekranas
- DHT11 jutiklis
- Džemperių laidai
Schema
DHT11 sąsajos su PIC16F877A schema parodyta žemiau.
Temperatūros ir drėgmės vertėms, kurias matuojame iš DHT11, rodyti naudojome 16x2 skystųjų kristalų ekraną. Skystųjų kristalų ekranas yra sujungtas 4 laidų režimu, o jutiklis ir skystųjų kristalų ekranas maitinamas iš 5 V išorinio maitinimo šaltinio. Aš naudoju duonos lentą, kad galėčiau atlikti visas reikiamas jungtis, ir naudoju išorinį 5 V adapterį. Taip pat galite naudoti šią duonos plokštės maitinimo plokštę, kad galėtumėte maitinti savo lentą naudodami 5 V įtampą.
Kai grandinė bus paruošta, mums tereikia įkelti kodą, pateiktą šio puslapio apačioje, ir mes galime pradėti skaityti temperatūrą ir drėgmę, kaip parodyta žemiau. Jei norite sužinoti, kaip kodas buvo parašytas ir kaip jis veikia, skaitykite toliau. Be to, visą šio projekto darbą galite rasti vaizdo įraše, pateiktame šio puslapio apačioje.
DHT11 su PIC MPLABX kodo paaiškinimu
Kodas buvo parašytas naudojant MPLABX IDE ir sudarytas naudojant XC8 kompiliatorių, kurį abu pateikė pati „Microchip“ ir kurį galima nemokamai atsisiųsti ir naudoti. Peržiūrėkite pagrindines pamokas, kad suprastumėte programavimo pagrindus. Toliau aptariamos tik trys svarbios funkcijos, reikalingos bendraujant su DHT11 jutikliu. Funkcijos yra:
negaliojantis dht11_init (); negaliojantis radimo_atsakas (); char skaityti_dht11 ();
Pirmoji funkcija naudojama paleidimo signalui su dht11. Kaip jau buvo aptarta anksčiau, kiekvienas ryšys su DHT11 prasideda paleidimo signalu, čia iš pradžių keičiama kaiščio kryptis, kad duomenų kaištis būtų sukonfigūruotas kaip išvestis iš mikrovaldiklio. Tada duomenų linija ištraukiama žemai ir laukiama 18 mS. Po to mikrokontroleris vėl pakelia aukštą liniją ir laukia iki 30 us. Praėjus šiam laukimo laikui, duomenų kaištis nustatytas kaip įvestis į mikrovaldiklį duomenims gauti.
negaliojantis dht11_init () { DHT11_Data_Pin_Direction = 0; // Konfigūruokite RD0 kaip išvestį DHT11_Data_Pin = 0; // RD0 siunčia 0 jutikliui __delay_ms (18); DHT11_Data_Pin = 1; // RD0 siunčia 1 jutikliui __delay_us (30); DHT11_Data_Pin_Direction = 1; // Konfigūruokite RD0 kaip įvestį }
Kita funkcija naudojama nustatant tikrinimo bitą, atsižvelgiant į duomenų kaiščio būseną. Jis naudojamas DHT11 jutiklio atsakui aptikti.
void find_response () { Check_bit = 0; __delay_us (40); jei (DHT11_Data_Pin == 0) { __delay_us (80); jei (DHT11_Data_Pin == 1) { Check_bit = 1; } __delay_us (50);} }
Galiausiai „dht11“ skaitymo funkcija; čia duomenys nuskaitomi 8 bitų formatu, kur duomenys grąžinami naudojant bitų perkėlimo operaciją, atsižvelgiant į duomenų kaiščio būseną.
char read_dht11 () { char duomenys, for_count; for (for_count = 0; for_count <8; for_count ++) { while (! DHT11_Data_Pin); __delay_us (30); if (DHT11_Data_Pin == 0) { duomenys & = ~ (1 << (7 - for_count)); // Išvalyti bitą (7-b) } else { data- = (1 << (7 - for_count)); // Nustatyti bitą (7-b) while (DHT11_Data_Pin); } } grąžinimo duomenys; }
A
Po to viskas atliekama į pagrindinę funkciją. Pirma, sistemos inicializavimas atliekamas ten, kur inicializuojamas skystųjų kristalų ekranas, o skystųjų kristalų kaiščių prievado kryptis nustatoma pagal išvestį. Programa veikia pagrindinės funkcijos viduje
void main () { system_init (); o (1) { __delay_ms (800); dht11_init (); rasti_atsakas (); jei (Check_bit == 1) { RH_byte_1 = skaityti_dht11 (); RH_byte_2 = skaityti_dht11 (); Temp_byte_1 = skaityti_dht11 (); Temp_byte_2 = skaityti_dht11 (); Apibendrinimas = read_dht11 (); if (Sumuojimas == ((RH_byte_1 + RH_byte_2 + Temp_byte_1 + Temp_byte_2) ir 0XFF)) { Drėgmė = Temp_byte_1; RH = RH_baitas_1; lcd_com (0x80); lcd_puts ("Temp:"); // lcd_puts (""); lcd_data (48 + ((Drėgmė / 10)% 10)); lcd_data (48 + (drėgmė% 10)); lcd_data (0xDF); lcd_puts ("C"); lcd_com (0xC0); lcd_puts ("Drėgmė:"); // lcd_puts (""); lcd_data (48 + ((RH / 10)% 10)); lcd_data (48 + (RH% 10)); lcd_puts ("%"); } else { lcd_puts ("Kontrolinės sumos klaida"); } } else { clear_screen (); lcd_com (0x80); lcd_puts ("Klaida !!!"); lcd_com (0xC0); lcd_puts ("Nėra atsakymo"); } __delay_ms (1000); } }
Ryšys su DHT11 jutikliu atliekamas „ while“ ciklo viduje , kur jutikliui pateikiamas pradinis signalas. Po to suveikia funkcija find_response . Jei „ Check_bit“ yra 1, tolesnis ryšys vykdomas, kitaip LCD ekrane rodomas klaidos dialogo langas.
Priklausomai nuo 40 bitų duomenų, read_dht11 iškviečiamas 5 kartus (5 kartus x 8 bitų) ir saugo duomenis pagal duomenų formatą, pateiktą duomenų lape. Taip pat tikrinama kontrolinės sumos būsena ir, jei bus rasta klaidų, ji taip pat praneš LCD ekrane. Galiausiai duomenys konvertuojami ir perduodami į 16x2 simbolių skystųjų kristalų ekraną.
Išsamų šio PIC temperatūros ir drėgmės matavimo kodą galite atsisiųsti iš čia. Taip pat patikrinkite toliau pateiktą demonstracinį vaizdo įrašą.
Tikiuosi, kad supratote projektą ir patiko kurti ką nors naudingo. Jei turite klausimų, palikite juos komentarų skiltyje žemiau arba naudokite mūsų forumus kitiems techniniams klausimams.