- DHT11 - specifikācija un darbība
- Saziņa ar DHT11 sensoru
- Nepieciešamās sastāvdaļas
- Shematisks
- DHT11 ar PIC MPLABX koda skaidrojumu
Temperatūras un mitruma mērīšana bieži ir noderīga daudzās lietojumprogrammās, piemēram, Mājas automatizācija, Vides pārraudzība, Meteoroloģiskā stacija uc Pi un daudzi citi izstrādes dēļi. Šajā rakstā mēs uzzināsim, kā šo DHT11 saskarni savienot ar PIC16F87A, kas ir 8 bitu PIC mikrokontrolleris. Mēs izmantosim šo mikrokontrolleru, lai nolasītu temperatūras un mitruma vērtības, izmantojot DHT11, un parādītu to LCD displejā. Ja PIC mikrokontrolleru izmantošana jums ir pavisam jauna, varat izmantot mūsu PIC apmācību sēriju, lai uzzinātu, kā programmēt un izmantot PIC mikrokontrolleru, sakot, sāksim.
DHT11 - specifikācija un darbība
DHT11 sensors ir pieejams vai nu moduļa, vai sensora formā. Šajā apmācībā mēs izmantojam sensoru, vienīgā atšķirība starp abiem ir tā, ka moduļa formā sensoram ir sensora izejas tapai piestiprināts filtrēšanas kondensators un pievilkšanas rezistors. Tātad, ja izmantojat moduli, tie nav jāpievieno ārēji. DHT11 sensora formā ir parādīts zemāk.
DHT11 sensoram ir zila vai balta krāsa. Šī apvalka iekšpusē mums ir divi svarīgi komponenti, kas palīdz nojaust relatīvo mitrumu un temperatūru. Pirmais komponents ir elektrodu pāris; elektrisko pretestību starp šiem diviem elektrodiem nosaka mitrumu noturošs pamatne. Tātad izmērītā pretestība ir apgriezti proporcionāla vides relatīvajam mitrumam. Augstāks relatīvais mitrums, zemāka būs pretestības vērtība un otrādi. Ņemiet vērā arī to, ka relatīvais mitrums atšķiras no faktiskā mitruma. Relatīvais mitrums mēra ūdens saturu gaisā attiecībā pret gaisa temperatūru.
Otra sastāvdaļa ir uz virsmas uzstādīts NTC termistors. Termins NTC apzīmē negatīvo temperatūras koeficientu, temperatūras pieaugumam pretestības vērtība samazināsies. Sensora izeja ir kalibrēta rūpnīcā, tāpēc mums kā programmētājam nav jāuztraucas par sensora kalibrēšanu. Sensora izeja, ko nodrošina 1 vadu sakari, redzēsim šī sensora tapu un savienojuma shēmu.
Produkts ir 4pin vienrindas iepakojumā. 1. tapa ir savienota pāri VDD, un 4. tapa ir savienota visā GND. 2. tapa ir datu tapa, ko izmanto saziņas nolūkos. Šai datu tapai ir nepieciešams 5k pretestības pretestība. Tomēr var izmantot arī citus rezistorus, piemēram, 4,7k līdz 10k. 3. tapa nav savienota ar neko. Tāpēc tas tiek ignorēts.
Datu lapa sniedz tehniskās specifikācijas, kā arī saskarnes informāciju, kas redzama zemāk esošajā tabulā
Iepriekš tabulā parādīts temperatūras un mitruma mērījumu diapazons un precizitāte. Tas var izmērīt temperatūru no 0-50 grādiem pēc Celsija ar precizitāti +/- 2 grādi pēc Celsija un relatīvo mitrumu no 20-90% RH ar precizitāti +/- 5% RH. Detalizētu specifikāciju var redzēt zemāk esošajā tabulā.
Saziņa ar DHT11 sensoru
Kā jau minēts iepriekš, lai nolasītu datus no DHT11 ar PIC, mums jāizmanto PIC viena vada sakaru protokols. Sīkāku informāciju par to, kā to izdarīt, var saprast no DHT 11 saskarnes diagrammas, kas atrodama tās datu lapā, tas pats ir norādīts zemāk.
DHT11 ir nepieciešams MCU sākuma signāls, lai sāktu komunikāciju. Tāpēc katru reizi, kad MCU nepieciešams nosūtīt sākuma signālu DHT11 sensoram, lai tas pieprasītu nosūtīt temperatūras un mitruma vērtības. Pēc starta signāla pabeigšanas DHT11 nosūta atbildes signālu, kas ietver informāciju par temperatūru un mitrumu. Datu sakari tiek veikti ar vienas kopnes datu sakaru protokolu. Pilns datu garums ir 40 bitu, un sensors vispirms nosūta lielāku datu bitu.
Sakarā ar pievilkšanas rezistoru dīkstāves režīmā datu līnija vienmēr paliek VCC līmenī. MCU ir nepieciešams, lai šis spriegums būtu augsts līdz zems, vismaz 18ms. Šajā laikā DHT11 sensors uztver starta signālu, un mikrokontrolleris padara datu līniju augstu 20-40us. Šo 20-40us laiku sauc par gaidīšanas periodu, kad DHT11 sāk atbildi. Pēc šī gaidīšanas perioda DHT11 nosūta datus mikrokontrolleru blokam.
DHT11 sensora DATU formāts
Dati sastāv no decimāldaļas un neatņemamām daļām, kas apvienotas kopā. Sensors izmanto šādu datu formātu:
8bit integrālā RH dati + 8bit decimālie RH dati + 8bit integrālie T dati + 8bit decimālie T dati + 8bit kontrolsumma.
Datus var pārbaudīt, pārbaudot kontrolsummas vērtību ar saņemtajiem datiem. To var izdarīt, jo, ja viss ir pareizi un ja sensors ir nosūtījis pareizus datus, tad kontrolsummai jābūt “8bit integrālo RH datu + 8bit decimālo RHdata + 8bit integrālo T datu + 8bit decimālo T datu summai.
Nepieciešamās sastāvdaļas
Šim projektam ir nepieciešamas zemāk minētās lietas -
- PIC mikrokontrolleru (8 bitu) programmēšanas iestatīšana.
- Maizes dēlis
- 5V 500mA barošanas bloks.
- 4.7k rezistors 2gab
- 1k rezistors
- PIC16F877A
- 20mHz kristāls
- 33pF kondensators 2 gab
- 16x2 rakstzīmju LCD
- DHT11 sensors
- Džemperu vadi
Shematisks
Ķēdes shēma DHT11 saskarnei ar PIC16F877A ir parādīta zemāk.
Mēs izmantojām 16x2 LCD, lai parādītu temperatūras un mitruma vērtības, kuras mēs mērām no DHT11. LCD ir saskarnē 4 vadu režīmā, un gan sensoru, gan LCD baro ar 5 V ārēju barošanas avotu. Esmu izmantojis maizes dēli, lai izveidotu visus nepieciešamos savienojumus, un esmu izmantojis ārēju 5V adapteri. Jūs varat arī izmantot šo maizes paneļa barošanas plāksni, lai darbinātu savu dēli ar 5 V.
Kad ķēde ir gatava, viss, kas mums jādara, ir augšupielādēt šīs lapas apakšā norādīto kodu, un mēs varam sākt lasīt temperatūru un mitrumu, kā parādīts zemāk. Ja vēlaties uzzināt, kā kods tika uzrakstīts un kā tas darbojas, lasiet tālāk. Pilnīgu šī projekta darbību varat atrast arī video, kas sniegts šīs lapas apakšdaļā.
DHT11 ar PIC MPLABX koda skaidrojumu
Kods tika rakstīts, izmantojot MPLABX IDE, un sastādīts, izmantojot XC8 kompilatoru, kuru abus nodrošina pati Microchip, un to var bez maksas lejupielādēt un izmantot. Lūdzu, skatiet pamatmācības, lai izprastu programmēšanas pamatus. Tālāk ir aplūkotas tikai trīs svarīgās funkcijas, kas nepieciešamas saziņai ar DHT11 sensoru. Funkcijas ir:
void dht11_init (); void find_response (); char lasīt_dht11 ();
Pirmo funkciju izmanto starta signālam ar dht11. Kā jau tika apspriests iepriekš, katra saziņa ar DHT11 sākas ar sākuma signālu, šeit vispirms tiek mainīts tapas virziens, lai datu tapu konfigurētu kā izvadi no mikrokontrollera. Tad datu līnija tiek novilkta zemu un turpina gaidīt 18mS. Pēc tam mikrokontrolleris atkal padara līniju augstu un turpina gaidīt līdz 30 us. Pēc šī gaidīšanas laika datu tapa tika iestatīta kā ievads mikrokontrollerā, lai saņemtu datus.
void dht11_init () { DHT11_Data_Pin_Direction = 0; // Konfigurēt RD0 kā izvadi DHT11_Data_Pin = 0; // RD0 nosūta 0 sensoram __delay_ms (18); DHT11_Data_Pin = 1; // RD0 nosūta 1 sensoram __delay_us (30); DHT11_Data_Pin_Direction = 1; // Konfigurēt RD0 kā ievadi }
Nākamo funkciju izmanto pārbaudes bita iestatīšanai atkarībā no datu tapas statusa. To izmanto, lai noteiktu DHT11 sensora reakciju.
void find_response () { Pārbaudes_bit = 0; __kavēšanās_us (40); ja (DHT11_Data_Pin == 0) { __delay_us (80); ja (DHT11_Data_Pin == 1) { Check_bit = 1; } __delay_us (50);} }
Visbeidzot dht11 lasīšanas funkcija; šeit dati tiek nolasīti 8 bitu formātā, kur dati tiek atgriezti, izmantojot bitu maiņas darbību atkarībā no datu tapas statusa.
char read_dht11 () { char data, for_count; par (for_count = 0; for_count <8; for_count ++) { while (! DHT11_Data_Pin); __kavēšanās_us (30); ja (DHT11_Data_Pin == 0) { dati & = ~ (1 << (7 - par_skaitli)); // Notīrīt bitu (7-b) } else { data- = (1 << (7 - for_count)); // Iestatīt bitu (7-b) while (DHT11_Data_Pin); } } atgriešanas dati; }
A
Pēc tam viss tiek izdarīts galvenajā funkcijā. Pirmkārt, sistēmas inicializēšana tiek veikta, ja LCD tiek inicializēts un LCD tapu porta virziens ir iestatīts uz izvadi. Lietojumprogramma darbojas galvenās funkcijas iekšpusē
void main () { system_init (); kamēr (1) { __delay_ms (800); dht11_init (); atrast_atbilde (); ja (Pārbaudīt_bit == 1) { RH_byte_1 = lasīt_dht11 (); RH_byte_2 = lasīt_dht11 (); Temp_byte_1 = read_dht11 (); Temp_byte_2 = read_dht11 (); Apkopojums = read_dht11 (); ja (Apkopojums == ((RH_byte_1 + RH_byte_2 + Temp_byte_1 + Temp_byte_2) & 0XFF)) { Mitrums = Temp_byte_1; RH = RH_byte_1; lcd_com (0x80); lcd_puts ("Temp:"); // lcd_puts (""); lcd_data (48 + ((mitrums / 10)% 10)); lcd_data (48 + (mitrums% 10)); lcd_data (0xDF); lcd_puts ("C"); lcd_com (0xC0); lcd_puts ("Mitrums:"); // lcd_puts (""); lcd_data (48 + ((RH / 10)% 10)); lcd_data (48 + (RH% 10)); lcd_puts ("%"); } else { lcd_puts ("Kontrolsummas kļūda"); } } else { clear_screen (); lcd_com (0x80); lcd_puts ("Kļūda !!!"); lcd_com (0xC0); lcd_puts ("Nav atbildes."); } __kavēšanās_ms (1000); } }
Saziņa ar sensoru DHT11 tiek veikta iekšējā cilpa iekšpusē , kur starta signāls tiek nodots sensoram. Pēc tam tiek aktivizēta funkcija find_response . Ja Check_bit ir 1, tiek veikta turpmākā saziņa, pretējā gadījumā LCD displejā tiks parādīts kļūdas dialoglodziņš.
Atkarībā no 40 bitu datiem, read_dht11 tiek izsaukts 5 reizes (5 reizes x 8 bitu ), un dati tiek glabāti atbilstoši datu lapā norādītajam datu formātam. Tiek pārbaudīts arī kontrolsummas statuss, un, ja tiek konstatētas kļūdas, tā par to paziņos arī LCD. Visbeidzot, dati tiek pārveidoti un pārsūtīti uz 16x2 rakstzīmju LCD.
Pilnu kodu šim PIC temperatūras un mitruma mērījumam var lejupielādēt šeit. Pārbaudiet arī zemāk sniegto demonstrācijas video.
Ceru, ka sapratāt projektu un izbaudījāt kaut ko noderīgu. Ja jums ir kādi jautājumi, atstājiet tos komentāru sadaļā zemāk vai izmantojiet mūsu forumus citiem tehniskiem jautājumiem.