- DHT11 - Specifikacija i rad
- Komunikacija s DHT11 senzorom
- Potrebne komponente
- Shematski
- DHT11 s objašnjenjem PIC MPLABX koda
Mjerenje temperature i vlažnosti često je korisno u mnogim aplikacijama poput automatizacije kuće, praćenja okoliša, meteorološke stanice itd. Najpopularniji senzor temperature pored LM35 je DHT11, već smo izgradili mnoge projekte DHT11 povezivanjem s Arduinom i Raspberryom Pi i mnoge druge razvojne ploče. U ovom ćemo članku naučiti kako povezati ovaj DHT11 s PIC16F87A koji je 8-bitni PIC mikrokontroler. Pomoću ovog mikrokontrolera očitat ćemo vrijednosti temperature i vlažnosti pomoću DHT11 i prikazati ih na LCD zaslonu. Ako ste potpuno novi u korištenju PIC mikrokontrolera, možete koristiti našu seriju vodiča za PIC kako biste naučili kako programirati i koristiti PIC mikrokontroler, što je rečeno, krenimo.
DHT11 - Specifikacija i rad
DHT11 senzor dostupan je u obliku modula ili u obliku senzora. U ovom uputstvu koristimo senzor, jedina razlika između oba je ta što u obliku modula senzor ima kondenzator za filtriranje i pull-up otpornik pričvršćen na izlazni pin senzora. Dakle, ako koristite modul, ne morate ih dodavati izvana. DHT11 u obliku senzora prikazan je dolje.

DHT11 senzor dolazi s plavim ili bijelim kućištem. Unutar ovog kućišta imamo dvije važne komponente koje nam pomažu osjetiti relativnu vlažnost i temperaturu. Prva komponenta je par elektroda; električni otpor između ove dvije elektrode određuje podloga koja zadržava vlagu. Tako je izmjereni otpor obrnuto proporcionalan relativnoj vlažnosti okoliša. Što je viša relativna vlažnost zraka, to će biti vrijednost otpora i obrnuto. Također imajte na umu da se relativna vlažnost razlikuje od stvarne vlažnosti. Relativna vlaga mjeri sadržaj vode u zraku u odnosu na temperaturu u zraku.
Druga komponenta je površinski montirani NTC termistor. Pojam NTC označava negativni temperaturni koeficijent, jer će porast temperature smanjiti vrijednost otpora. Izlaz senzora je tvornički kalibriran i stoga kao programer ne trebamo brinuti o kalibraciji senzora. Izlaz senzora koji daje 1-žična komunikacija, pogledajmo pin i shemu povezivanja ovog senzora.

Proizvod je u 4-rednom pakiranju s jednim redom. Prvi pin povezan je preko VDD-a, a četvrti pin spojen je preko GND-a. Drugi pin je podatkovni pin koji se koristi u komunikacijske svrhe. Za ovaj podatkovni pin potreban je pull-up otpor od 5 k. Međutim, mogu se koristiti i drugi povlačni otpornici poput 4,7k do 10k. Treća iglica nije povezana ni s čim. Dakle, ignorira se.
Liste podataka pruža tehničke specifikacije, kao i informacije o povezivanju koje se mogu vidjeti u donjoj tablici -

Gornja tablica prikazuje raspon i točnost mjerenja temperature i vlažnosti. Može mjeriti temperaturu od 0-50 Celzijevih stupnjeva s točnošću od +/- 2 Celzijeva stupnja i relativnu vlažnost zraka od 20-90% RH s točnošću od +/- 5% RH. Detaljne specifikacije mogu se vidjeti u donjoj tablici.

Komunikacija s DHT11 senzorom
Kao što je ranije spomenuto, za čitanje podataka s DHT11 s PIC-om moramo koristiti PIC jednožični komunikacijski protokol. Pojedinosti o tome kako to izvesti mogu se razumjeti iz dijagrama povezivanja DHT 11 koji se može naći u njegovom tehničkom listu, isti je dan u nastavku.

DHT11 treba startni signal od MCU-a da započne komunikaciju. Stoga svaki put kada MCU treba poslati signal za pokretanje senzoru DHT11 kako bi zatražio da pošalje vrijednosti temperature i vlažnosti. Nakon završetka signala za pokretanje, DHT11 šalje signal odziva koji uključuje podatke o temperaturi i vlažnosti. Komunikacija podataka vrši se jednim protokolom komunikacije podataka sabirnice. Ukupna duljina podataka je 40 bita, a senzor prvo šalje veći bit podataka.

Zbog otpora za izvlačenje, podatkovna linija uvijek ostaje na razini VCC-a tijekom mirovanja. MCU treba spustiti ovaj napon na visoki na najniži raspon od najmanje 18 ms. Za to vrijeme senzor DHT11 otkriva signal za pokretanje, a mikrokontroler čini podatkovnu liniju visokom za 20-40us. To vrijeme od 20-40us naziva se razdobljem čekanja kada DHT11 započinje s reagiranjem. Nakon ovog razdoblja čekanja, DHT11 šalje podatke jedinici mikrokontrolera.
DHT11 senzor DATA format
Podaci se sastoje od decimalnih i integralnih dijelova kombiniranih zajedno. Senzor slijedi donji format podataka -
8-bitni integrirani RH podaci + 8-bitni decimalni podaci RH + 8-bitni integralni T podaci + 8-bitni decimalni T podaci + 8-bitna kontrolna suma.
Podaci se mogu provjeriti provjerom vrijednosti kontrolne sume s primljenim podacima. To se može učiniti jer, ako je sve ispravno i ako je senzor poslao ispravne podatke, tada bi kontrolna suma trebala biti zbroj "8-bitnih integralnih podataka RH + 8-bitnih decimalnih podataka RH + 8-bitnih podataka T podataka + 8-bitnih podataka decimalnih T".
Potrebne komponente
Za ovaj projekt dolje su potrebne stvari -
- Postavljanje programiranja PIC mikrokontrolera (8 bita).
- Breadboard
- 5V 500mA jedinica za napajanje.
- Otpor 4,7k 2kom
- 1k otpornik
- PIC16F877A
- Kristal 20mHz
- 33pF kondenzator 2 kom
- LCD s 16x2 znaka
- DHT11 senzor
- Žice kratkospojnika
Shematski
Shema spoja za povezivanje DHT11 s PIC16F877A prikazana je u nastavku.

Koristili smo LCD 16x2 za prikaz vrijednosti temperature i vlažnosti koje mjerimo od DHT11. LCD je povezan u četverožičnom načinu rada, a senzor i LCD napajaju se od 5V vanjskog izvora napajanja. Upotrijebio sam ploču za međusobno povezivanje i upotrijebio vanjski 5V adapter. Ovu ploču za napajanje možete koristiti i za napajanje ploče s 5V.

Jednom kada je krug spreman, sve što moramo učiniti je prenijeti kod dat na dnu ove stranice i možemo početi čitati temperaturu i vlažnost kao što je prikazano dolje. Ako želite znati kako je kod napisan i kako to radi, pročitajte dalje. Kompletni rad ovog projekta također možete pronaći u videozapisu datom na dnu ove stranice.

DHT11 s objašnjenjem PIC MPLABX koda
Kôd je napisan pomoću MPLABX IDE-a, a sastavljen je pomoću XC8 kompajlera, koji pruža Microchip sam, a besplatan je za preuzimanje i upotrebu. Pogledajte osnovne upute kako biste razumjeli osnove programiranja, u nastavku se razmatraju samo tri važne funkcije koje su potrebne za komunikaciju sa senzorom DHT11. Funkcije su -
void dht11_init (); void find_response (); char read_dht11 ();
Prva funkcija koristi se za signal za start s dht11. Kao što je prethodno spomenuto, svaka komunikacija s DHT11 započinje signalom za pokretanje, ovdje se smjer pin-a prvo mijenja kako bi se podatkovni pin konfigurirao kao izlaz iz mikrokontrolera. Tada se podatkovna crta povuče nisko i nastavlja čekati 18 mS. Nakon toga mikrokontroler ponovno podiže liniju i čeka do 30us. Nakon tog vremena čekanja, podatkovni pin postavljen je kao ulaz u mikrokontroler za primanje podataka.
void dht11_init () { DHT11_Data_Pin_Direction = 0; // Konfigurirajte RD0 kao izlaz DHT11_Data_Pin = 0; // RD0 šalje 0 senzoru __delay_ms (18); DHT11_Pata_Pin = 1; // RD0 šalje 1 senzoru __delay_us (30); DHT11_Data_Pin_Direction = 1; // Konfiguriranje RD0 kao ulaza }
Sljedeća funkcija koristi se za postavljanje kontrolnog bita, ovisno o statusu podatkovne pribadače. Koristi se za otkrivanje odgovora DHT11 senzora.
void find_response () { Provjeri_bit = 0; __zakasni_us (40); ako (DHT11_Data_Pin == 0) { __delay_us (80); if (DHT11_Data_Pin == 1) { Provjeri_bit = 1; } __zakasni_us (50);} }
Napokon funkcija čitanja dht11; ovdje se podaci čitaju u 8-bitni format, gdje se podaci vraćaju pomoću pomaka bita, ovisno o statusu pin-a podataka.
char read_dht11 () { char podaci, za_broj; for (for_count = 0; for_count <8; for_count ++) { while (! DHT11_Data_Pin); __zakasni_us (30); if (DHT11_Data_Pin == 0) { data & = ~ (1 << (7 - za_broj)); // Očisti bit (7-b) } else { data- = (1 << (7 - za_broj)); // Postavi bit (7-b) while (DHT11_Data_Pin); } } vratiti podatke; }
U
Nakon toga sve se radi u glavnoj funkciji. Prvo se inicijalizacija sustava vrši tamo gdje se LCD inicijalizira i smjer priključka pinova LCD-a postavi na izlaz. Aplikacija se izvodi unutar glavne funkcije
void main () { system_init (); while (1) { __zakasniti_ms (800); dht11_init (); pronađi_odgovor (); if (Check_bit == 1) { RH_byte_1 = read_dht11 (); RH_byte_2 = read_dht11 (); Temp_byte_1 = read_dht11 (); Temp_byte_2 = read_dht11 (); Zbir = read_dht11 (); if (Zbir == ((RH_byte_1 + RH_byte_2 + Temp_byte_1 + Temp_byte_2) & 0XFF)) { Vlažnost = Temp_byte_1; RH = RH_byte_1; lcd_com (0x80); lcd_puts ("Temp:"); // lcd_puts (""); lcd_data (48 + ((Vlažnost / 10)% 10)); lcd_data (48 + (vlažnost% 10)); lcd_data (0xDF); lcd_puts ("C"); lcd_com (0xC0); lcd_puts ("Vlaga:"); // lcd_puts (""); lcd_data (48 + ((RH / 10)% 10)); lcd_data (48 + (RH% 10)); lcd_puts ("%"); } else { lcd_puts ("Pogreška kontrolne sume"); } } else { clear_screen (); lcd_com (0x80); lcd_puts ("Pogreška !!!"); lcd_com (0xC0); lcd_puts ("Nema odgovora."); } __zakasniti_ms (1000); } }
Komunikacija s DHT11 senzorom vrši se unutar while petlje gdje se signal za pokretanje predaje senzoru. Nakon toga se aktivira funkcija find_response . Ako je Check_bit 1, tada se provodi daljnja komunikacija, inače će se na LCD-u prikazati dijaloški okvir pogreške.
Ovisno o 40-bitnim podacima, read_dht11 se poziva 5 puta (5 puta x 8bit) i pohranjuje podatke prema formatu podataka navedenom u tablici. Također se provjerava status kontrolne sume i ako se pronađu pogreške, također će se obavijestiti na LCD-u. Konačno, podaci se pretvaraju i prenose na LCD sa 16x2 znaka.
Potpuni kod za ovo mjerenje temperature i vlažnosti PIC možete preuzeti ovdje. Također pogledajte dolje predstavljeni video prikaz.
Nadam se da ste razumjeli projekt i uživali u izgradnji nečeg korisnog. Ako imate bilo kakvih pitanja, ostavite ih u odjeljku za komentare u nastavku ili upotrijebite naše forume za druga tehnička pitanja.
