- DHT11 - Špecifikácia a práca
- Komunikácia so snímačom DHT11
- Požadované komponenty
- Schematické
- DHT11 s vysvetlením kódu PIC MPLABX
Meranie teploty a vlhkosti je často užitočné v mnohých aplikáciách, ako je domáca automatizácia, monitorovanie prostredia, meteorologická stanica atď. Najčastejšie používaným snímačom teploty vedľa LM35 je DHT11, predtým sme vytvorili mnoho projektov DHT11 jeho prepojením s Arduino, s Raspberry Pi a mnoho ďalších vývojových dosiek. V tomto článku sa dozvieme, ako prepojiť tento DHT11 s PIC16F87A, čo je 8-bitový PIC mikrokontrolér. Tento mikrokontrolér použijeme na načítanie hodnôt teploty a vlhkosti pomocou DHT11 a ich zobrazenie na LCD displeji. Ak ste s používaním mikrokontrolérov PIC úplne nový, môžete využiť našu sériu návodov PIC a naučiť sa programovať a používať mikrokontrolér PIC. Poďme teda na to.
DHT11 - Špecifikácia a práca
Snímač DHT11 je k dispozícii buď vo forme modulu alebo vo forme snímača. V tomto tutoriáli používame senzor, jediný rozdiel medzi nimi je ten, že v modulovej forme má senzor filtračný kondenzátor a pull-up rezistor pripojený k výstupnému kolíku senzora. Ak teda modul používate, nemusíte ich externe pridávať. DHT11 vo forme snímača je zobrazený nižšie.
Snímač DHT11 je dodávaný s modrou alebo bielou farbou krytu. Vo vnútri tohto krytu máme dve dôležité súčasti, ktoré nám pomáhajú snímať relatívnu vlhkosť a teplotu. Prvou zložkou je pár elektród; o elektrickom odpore medzi týmito dvoma elektródami rozhoduje substrát zadržiavajúci vlhkosť. Takže nameraný odpor je nepriamo úmerný relatívnej vlhkosti prostredia. Čím vyššia je relatívna vlhkosť, tým nižšia bude hodnota odporu a naopak. Upozorňujeme tiež, že relatívna vlhkosť sa líši od skutočnej vlhkosti. Relatívna vlhkosť meria obsah vody vo vzduchu v pomere k teplote vo vzduchu.
Ďalším komponentom je povrchovo namontovaný NTC termistor. Pojem NTC znamená záporný teplotný koeficient, pri zvýšení teploty sa hodnota odporu zníži. Výstup snímača je kalibrovaný z výroby, a preto sa ako programátor nemusíme starať o kalibráciu snímača. Výstup snímača daný 1-vodičovou komunikáciou, pozrime sa na pin a schému zapojenia tohto snímača.
Produkt je v 4pinovom jednoradovom balení. 1. pin je pripojený cez VDD a 4. pin je pripojený cez GND. Druhý pin je dátový pin, ktorý sa používa na komunikačné účely. Tento dátový pin vyžaduje pull-up odpor 5k. Môžu sa však použiť aj iné odpory, napríklad 4,7k až 10k. 3. pin nie je s ničím spojený. Takže sa to ignoruje.
Údajový list poskytuje technické špecifikácie a informácie o prepojení, ktoré sú uvedené v nasledujúcej tabuľke.
Vyššie uvedená tabuľka ukazuje rozsah a presnosť merania teploty a vlhkosti. Môže merať teplotu od 0 do 50 stupňov Celzia s presnosťou +/- 2 stupne Celzia a relatívnu vlhkosť od 20 do 90% relatívnej vlhkosti s presnosťou +/- 5% relatívnej vlhkosti. Podrobnú špecifikáciu nájdete v nasledujúcej tabuľke.
Komunikácia so snímačom DHT11
Ako už bolo spomenuté skôr, aby sme mohli načítať údaje z DHT11 pomocou PIC, musíme použiť jednodrátový komunikačný protokol PIC. Podrobnosti o tom, ako to vykonať, možno pochopiť z diagramu prepojenia DHT 11, ktorý je uvedený v jeho údajovom liste. To isté je uvedené nižšie.
DHT11 potrebuje na zahájenie komunikácie štartovací signál z MCU. Preto vždy, keď MCU potrebuje poslať štartovací signál do senzora DHT11 a požiadať ho o zaslanie hodnôt teploty a vlhkosti. Po dokončení štartovacieho signálu DHT11 vyšle reakčný signál, ktorý obsahuje informácie o teplote a vlhkosti. Dátová komunikácia sa vykonáva protokolom dátovej komunikácie s jednou zbernicou. Celá dĺžka dát je 40 bitov a snímač najskôr pošle vyšší dátový bit.
Vďaka pull-up rezistoru zostáva dátová linka v pohotovostnom režime vždy na úrovni VCC. MCU musí strhnúť toto napätie z vysokého na nízke po dobu minimálneho rozpätia 18 ms. Počas tejto doby snímač DHT11 deteguje štartovací signál a mikrokontrolér zvýši dátovú linku na 20 - 40 ° C. Tento čas 20 - 40 ° C sa nazýva čakacia doba, kedy DHT11 začne odpovedať. Po uplynutí tejto čakacej doby DHT11 odošle údaje do jednotky mikrokontroléra.
Formát údajov snímača DHT11
Údaje sa skladajú z desatinných a celých častí. Senzor dodržiava nasledujúci dátový formát -
8-bitové integrálne RH dáta + 8-bitové desatinné RH dáta + 8-bitové integrálne T dáta + 8-bitové desatinné dáta T + 8-bitový kontrolný súčet.
Údaje je možné overiť kontrolou hodnoty kontrolného súčtu s prijatými údajmi. To je možné urobiť, pretože ak je všetko v poriadku a ak snímač preniesol správne údaje, potom by kontrolný súčet mal byť súčtom „8-bitových integrálnych pravých dát + 8-bitových desatinných RHdata + 8-bitových integrálnych T dát + 8-bitových desatinných T dát“.
Požadované komponenty
Pre tento projekt sú potrebné nasledujúce veci -
- Nastavenie programovania mikrokontroléra PIC (8 bitov).
- Nepál
- Napájacia jednotka 5V 500mA.
- 4,7k rezistor 2ks
- 1k rezistor
- PIC16F877A
- 20mHz kryštál
- Kondenzátor 33pF 2 ks
- 16 x 2 znakový LCD
- Senzor DHT11
- Prepojovacie vodiče
Schematické
Schéma zapojenia rozhrania DHT11 s PIC16F877A je uvedená nižšie.
Na zobrazenie hodnôt teploty a vlhkosti, ktoré merame z DHT11, sme použili 16x2 LCD. Displej LCD je prepojený v 4-vodičovom režime a snímač aj LCD sú napájané z externého zdroja napájania 5 V. Použil som nepájivú dosku na vykonanie všetkých požadovaných pripojení a použil som externý 5V adaptér. Môžete tiež použiť túto dosku napájacieho zdroja na napájanie vašej dosky s napätím 5 V.
Keď je okruh pripravený, stačí nahrať kód uvedený v dolnej časti tejto stránky a môžeme začať čítať teplotu a vlhkosť, ako je to znázornené nižšie. Ak chcete vedieť, ako bol kód napísaný a ako funguje, prečítajte si ďalej. Tiež si môžete nájsť kompletnú fungovanie tohto projektu vo videu danej na konci tejto stránky.
DHT11 s vysvetlením kódu PIC MPLABX
Kód bol napísaný pomocou MPLABX IDE a kompilovaný pomocou kompilátora XC8, ktorý poskytuje samotný Microchip a je zadarmo na stiahnutie a použitie. V základných príručkách nájdete základné informácie o programovaní, ďalej sú diskutované iba tri dôležité funkcie potrebné na komunikáciu so snímačom DHT11. Tieto funkcie sú -
void dht11_init (); void find_response (); char read_dht11 ();
Prvá funkcia sa používa pre štartovací signál s dht11. Ako už bolo uvedené, každá komunikácia s DHT11 sa začína štartovacím signálom, tu sa najskôr zmení smer kolíka, aby sa konfiguroval dátový kolík ako výstup z mikrokontroléra. Potom je dátová linka stiahnutá nízko a stále čaká na 18mS. Potom je mikrokontrolér opäť vysoko posadený a čaká až 30us. Po uplynutí tejto čakacej doby sa dátový kolík nastavil ako vstup do mikrokontroléra na príjem údajov.
void dht11_init () { DHT11_Data_Pin_Direction = 0; // Nakonfigurujte RD0 ako výstup DHT11_Data_Pin = 0; // RD0 posiela 0 na senzor __delay_ms (18); DHT11_Data_Pin = 1; // RD0 pošle 1 na senzor __delay_us (30); DHT11_Data_Pin_Direction = 1; // Konfigurácia RD0 ako vstupu }
Ďalšia funkcia sa používa na nastavenie kontrolného bitu v závislosti od stavu dátového kolíka. Používa sa na detekciu odozvy zo snímača DHT11.
void find_response () { Check_bit = 0; __delay_us (40); if (DHT11_Data_Pin == 0) { __delay_us (80); if (DHT11_Data_Pin == 1) { Check_bit = 1; } __delay_us (50);} }
Nakoniec funkcia čítania dht11; tu sa dáta načítajú do 8-bitového formátu, kde sa dáta vrátia pomocou operácie bitového posunu v závislosti od stavu kolíka údajov.
char read_dht11 () { char data, for_count; for (for_count = 0; for_count <8; for_count ++) { while (! DHT11_Data_Pin); __delay_us (30); if (DHT11_Data_Pin == 0) { data & = ~ (1 << (7 - pre_počet)); // Vymazať bit (7-b) } else { data- = (1 << (7 - pre_počet)); // Nastav bit (7-b) while (DHT11_Data_Pin); } } vrátiť údaje; }
Zloženie: 100% bavlna.
Potom sa všetko vykoná do hlavnej funkcie. Najskôr sa vykoná inicializácia systému tam, kde sa inicializuje LCD a smer portu pinov LCD sa nastaví na výstup. Aplikácia je spustená vo vnútri hlavnej funkcie
void main () { system_init (); while (1) { __delay_ms (800); dht11_init (); find_response (); if (Check_bit == 1) { RH_byte_1 = read_dht11 (); RH_byte_2 = read_dht11 (); Temp_byte_1 = read_dht11 (); Temp_byte_2 = read_dht11 (); Súčet = read_dht11 (); if (Summation == (((RH_byte_1 + RH_byte_2 + Temp_byte_1 + Temp_byte_2) & 0XFF)) { Vlhkosť = Temp_byte_1; RH = RH_byte_1; lcd_com (0x80); lcd_puts ("Teplota:"); // lcd_puts (""); lcd_data (48 + ((vlhkosť / 10)% 10)); lcd_data (48 + (vlhkosť% 10)); lcd_data (0xDF); lcd_puts ("C"); lcd_com (0xC0); lcd_puts ("Vlhkosť:"); // lcd_puts (""); lcd_data (48 + ((RH / 10)% 10)); lcd_data (48 + (RH% 10)); lcd_puts ("%"); } else { lcd_puts ("chyba kontrolného súčtu"); } } else { clear_screen (); lcd_com (0x80); lcd_puts ("Chyba !!!"); lcd_com (0xC0); lcd_puts ("Žiadna odpoveď."); } __delay_ms (1 000); } }
Komunikácia so snímačom DHT11 sa vykonáva vnútri , zatiaľ čo slučky, kde je spúšťací signál predložený senzora. Potom sa spustí funkcia find_response . Ak je Check_bit 1, potom sa uskutoční ďalšia komunikácia, inak sa na LCD displeji zobrazí chybové hlásenie.
V závislosti na 40-bitových dátach sa read_dht11 zavolá 5-krát (5-krát x 8bitov) a údaje sa uloží podľa dátového formátu uvedeného v údajovom liste. Status súčet je tiež kontrolovaná a ak sú nájdené chyby, bude tiež informovať na LCD displeji. Nakoniec sa dáta prevedú a prenesú na 16x2 znakový LCD.
Kompletný kód pre toto meranie teploty a vlhkosti PIC si môžete stiahnuť tu. Skontrolujte tiež demonštračné video uvedené nižšie.
Dúfam, že ste pochopili projekt a bavilo vás stavať niečo užitočné. Ak máte akékoľvek otázky, nechajte ich v sekcii komentárov nižšie alebo použite naše fóra pre ďalšie technické otázky.