- DHT11 - Pagtutukoy at Paggawa
- Nakikipag-usap sa DHT11 Sensor
- Mga kinakailangang sangkap
- Skematika
- Ang DHT11 na may paliwanag sa PIC MPLABX Code
Ang pagsukat ng Temperatura at Humidity ay madalas na kapaki-pakinabang sa maraming mga application tulad ng Home Automation, Monitoring sa Kapaligiran, istasyon ng Panahon, atbp. Ang pinakapopular na ginamit na Temperatura sensor sa tabi ng LM35 ay ang DHT11, dati naming binuo ang maraming Mga Proyekto ng DHT11 sa pamamagitan ng pag-interlok nito sa Arduino, sa Raspberry Pi at maraming iba pang mga development board. Sa artikulong ito, matututunan natin kung paano i-interface ang DHT11 na ito sa PIC16F87A na isang 8-bit PIC Microcontroller. Gagamitin namin ang microcontroller na ito upang basahin ang mga halaga ng Temperatura at Humidity gamit ang DHT11 at ipakita ito sa isang LCD display. Kung ganap kang bago sa paggamit ng mga microcontroll ng PIC maaari mong magamit ang aming serye ng tutorial na PIC upang malaman kung paano mag-program at gumamit ng PIC microcontroller, na sinasabi, magsimula na tayo.
DHT11 - Pagtutukoy at Paggawa
Ang sensor ng DHT11 ay magagamit alinman sa form na module o sa form ng sensor. Sa tutorial na ito ginagamit namin ang sensor, ang nag-iisa lamang na pagkakaiba sa pareho ay sa form na module ang sensor ay may capacitor ng pagsala at isang resistor na pull-up na nakakabit sa output pin ng sensor. Kaya't kung gumagamit ka ng module hindi mo kailangang idagdag ang mga ito sa labas. Ang DHT11 sa form ng sensor ay ipinapakita sa ibaba.
Ang sensor ng DHT11 ay may kasamang asul o puting kulay na pambalot. Sa loob ng pambalot na ito, mayroon kaming dalawang mahahalagang bahagi na makakatulong sa amin na maunawaan ang kamag-anak na kahalumigmigan at temperatura. Ang unang sangkap ay isang pares ng mga electrode; ang paglaban ng elektrisidad sa pagitan ng dalawang electrode na ito ay napagpasyahan ng isang substrate na may hawak na kahalumigmigan. Kaya't ang sinusukat na paglaban ay baligtad na proporsyonal sa kamag-anak na kahalumigmigan ng kapaligiran. Mas mataas ang kamag-anak na kahalumigmigan na mas mababa ang magiging halaga ng paglaban at kabaliktaran. Gayundin, tandaan na ang Kamag-anak na kahalumigmigan ay naiiba mula sa aktwal na kahalumigmigan. Sinusukat ng kamag-anak na kahalumigmigan ang nilalaman ng tubig sa hangin na may kaugnayan sa temperatura sa hangin.
Ang iba pang mga sangkap ay isang naka-mount sa NTC Thermistor. Ang term na NTC ay nangangahulugang Negatibong temperatura coefficient, para sa pagtaas ng temperatura ang halaga ng paglaban ay bababa. Ang output ng sensor ay naka-calibrate ng pabrika at samakatuwid ay bilang isang programmer hindi namin kailangang mag-alala tungkol sa pag-calibrate ng sensor. Ang output ng sensor na ibinigay ng komunikasyon na 1-Wire, tingnan natin ang pin at diagram ng koneksyon ng sensor na ito.
Ang produkto ay nasa isang 4pin solong row package. Ang 1st pin ay konektado sa buong VDD at ang ika-4 na pin ay konektado sa buong GND. Ang ika-2 pin ay ang data pin, na ginagamit para sa mga layunin ng komunikasyon. Ang pin ng data na ito ay nangangailangan ng isang pull-up risistor na 5k. Gayunpaman, ang iba ay kumukuha ng mga resistor tulad ng 4.7k hanggang 10k ay maaari ding magamit. Ang ika-3 na pin ay hindi konektado sa anumang bagay. Kaya't hindi ito pinapansin.
Nagbibigay ang datasheet ng mga panteknikal na pagtutukoy pati na rin ang pag-interfaces ng impormasyon na makikita sa talahanayan sa ibaba-
Ipinapakita ng talahanayan sa itaas ang saklaw at kawastuhan ng pagsukat ng Temperatura at Humidity. Masusukat nito ang temperatura mula 0-50 degrees Celsius na may katumpakan na +/- 2-degree Celsius at kamag-anak na halumigmig mula 20-90% RH na may kawastuhan na +/- 5% RH. Ang detalye ng detalye ay makikita sa talahanayan sa ibaba.
Nakikipag-usap sa DHT11 Sensor
Tulad ng nabanggit nang mas maaga, upang mabasa ang data mula sa DHT11 na may PIC kailangan naming gumamit ng PIC isang wire na protocol ng Komunikasyon. Ang mga detalye sa kung paano ito maisasagawa ay maaaring maunawaan mula sa interfacing diagram ng DHT 11 na maaaring matagpuan sa datasheet nito, pareho ang ibinibigay sa ibaba.
Ang DHT11 ay nangangailangan ng isang simulang signal mula sa MCU upang simulan ang komunikasyon. Samakatuwid, sa tuwing ang MCU ay kailangang magpadala ng isang signal ng pagsisimula sa DHT11 Sensor upang hilingin itong magpadala ng mga halaga ng temperatura at halumigmig. Matapos makumpleto ang pagsisimula ng senyas, ang DHT11 ay nagpapadala ng isang senyas ng pagtugon na kasama ang impormasyon sa temperatura at halumigmig. Ang komunikasyon sa data ay ginagawa ng nag- iisang protocol ng komunikasyon sa data ng bus. Ang buong haba ng data ay 40bit at ang sensor ay nagpapadala muna ng mas mataas na data bit.
Dahil sa pull-up risistor, ang linya ng data ay laging nananatili sa antas ng VCC habang idle mode. Ang MCU ay kailangang hilahin pababa ang boltahe na ito hanggang sa mababa para sa isang minimum na span ng 18ms. Sa oras na ito, nakita ng sensor ng DHT11 ang signal ng pagsisimula at ginagawang mataas ng microcontroller ang linya ng data para sa 20-40us. Ang oras na 20-40us na ito ay tinatawag na isang panahon ng paghihintay kung saan nagsisimula ang DHT11 sa tugon. Matapos ang paghihintay na ito, ipinapadala ng DHT11 ang data sa yunit ng microcontroller.
DHT11 Sensor Format ng DATA
Ang data ay binubuo ng decimal at integral na mga bahagi na pinagsama sama-sama. Sinusundan ng sensor ang format ng data sa ibaba -
8bit integral data RH + 8bit decimal RH data + 8bit integral T data + 8bit decimal T data + 8bit checkum.
Maaaring i-verify ng isang tao ang data sa pamamagitan ng pagsuri sa halaga ng tsekum sa natanggap na data. Maaari itong magawa sapagkat, kung ang lahat ay maayos at kung ang sensor ay nagpadala ng wastong data, ang tsekum ay dapat na kabuuan ng "8bit integral RH data + 8bit decimal RHdata + 8bit integral T data + 8bit decimal T data".
Mga kinakailangang sangkap
Para sa proyektong ito, kinakailangan sa ibaba ang mga bagay -
- Pag-setup ng programa ng PIC microcontroller (8bit).
- Breadboard
- 5V 500mA power supply unit.
- 4.7k risistor 2pcs
- 1k risistor
- PIC16F877A
- 20mHz na kristal
- 33pF capacitor 2 pcs
- 16x2 character na LCD
- Sensor ng DHT11
- Jumper wires
Skematika
Ang circuit diagram para sa interfacing DHT11 sa PIC16F877A ay ipinapakita sa ibaba.
Gumamit kami ng isang 16x2 LCD upang maipakita ang mga halagang temperatura at halumigmig na sinusukat namin mula sa DHT11. Ang LCD ay naka-interface sa 4-wire mode at kapwa ang sensor at LCD ay pinalakas ng isang 5V panlabas na suplay ng kuryente. Gumamit ako ng isang breadboard upang gawin ang lahat ng mga kinakailangang koneksyon at gumamit ng isang panlabas na 5V adapter. Maaari mo ring gamitin ang board ng suplay ng kuryente ng breadboard na ito upang mapagana ang iyong board na may 5V.
Kapag handa na ang circuit, ang kailangan lang nating gawin ay i-upload ang code na ibinigay sa ilalim ng pahinang ito at maaari naming simulang basahin ang Temperatura at Humidity tulad ng ipinakita sa ibaba. Kung nais mong malaman kung paano nakasulat ang code at kung paano ito gumagana basahin pa. Maaari mo ring makita ang kumpletong pagtatrabaho ng proyektong ito sa video na ibinigay sa ilalim ng pahinang ito.
Ang DHT11 na may paliwanag sa PIC MPLABX Code
Ang code ay nakasulat gamit ang MPLABX IDE at naipon gamit ang XC8 compiler na parehong ibinigay ng Microchip mismo at malayang mag-download at magamit. Mangyaring mag-refer sa mga pangunahing tutorial upang maunawaan ang mga pangunahing kaalaman sa pagprograma, ang tatlong mahahalagang pagpapaandar lamang na kinakailangan para sa pakikipag-usap sa sensor ng DHT11 ang tinalakay sa ibaba. Ang mga pagpapaandar ay -
walang bisa dht11_init (); void find_response (); char read_dht11 ();
Ang unang pagpapaandar ay ginagamit para sa pagsisimula ng signal na may dht11. Tulad ng tinalakay dati, ang bawat komunikasyon sa DHT11 ay nagsisimula sa isang pagsisimula ng signal, dito ang direksyon ng pin ay binago sa una upang mai-configure ang data pin bilang output mula sa microcontroller. Pagkatapos ang linya ng data ay hinila pababa at patuloy na naghihintay para sa 18mS. Pagkatapos nito muli ang linya ay ginawang mataas ng microcontroller at patuloy na naghihintay ng hanggang sa 30us. Matapos ang oras ng paghihintay na iyon, itinakda ang data pin bilang input sa microcontroller upang matanggap ang data.
void dht11_init () { DHT11_Data_Pin_Direction = 0; // Configure RD0 as output DHT11_Data_Pin = 0; // RD0 nagpapadala ng 0 sa sensor __delay_ms (18); DHT11_Data_Pin = 1; // RD0 nagpapadala ng 1 sa sensor __delay_us (30); DHT11_Data_Pin_Direction = 1; // Configure RD0 as input }
Ang susunod na pagpapaandar ay ginagamit para sa pagse-set up ng isang check bit depende sa katayuan ng pin ng data. Ginagamit ito upang makita ang tugon mula sa DHT11 sensor.
void find_response () { Check_bit = 0; __delay_us (40); kung (DHT11_Data_Pin == 0) { __delay_us (80); kung (DHT11_Data_Pin == 1) { Check_bit = 1; } __delay_us (50);} }
Sa wakas ang dht11 basahin ang pagpapaandar; dito ang data ay nabasa sa isang 8-bit na format kung saan ang data ay naibalik gamit ang operasyon ng bit shift depende sa katayuan ng pin ng data.
char read_dht11 () { char data, for_count; para sa (for_count = 0; for_count <8; for_count ++) { habang (! DHT11_Data_Pin); __delay_us (30); kung (DHT11_Data_Pin == 0) { data & = ~ (1 << (7 - for_count)); // Clear bit (7-b) } iba pa { data- = (1 << (7 - for_count)); // Itakda ang bit (7-b) habang (DHT11_Data_Pin); } } ibalik ang data; }
Nyawang
Pagkatapos nito, ang lahat ay tapos na sa pangunahing pagpapaandar. Una, tapos na ang pagpapasimula ng system kung saan naisasagawa ang LCD at ang direksyon ng port ng mga pin ng LCD ay nakatakda sa output. Ang application ay tumatakbo sa loob ng pangunahing pagpapaandar
void main () { system_init (); habang (1) { __delay_ms (800); dht11_init (); find_response (); kung (Check_bit == 1) { RH_byte_1 = read_dht11 (); RH_byte_2 = read_dht11 (); Temp_byte_1 = read_dht11 (); Temp_byte_2 = read_dht11 (); Paglalagom = read_dht11 (); kung (Kabuuan == ((RH_byte_1 + RH_byte_2 + Temp_byte_1 + Temp_byte_2) & 0XFF)) { Humidity = Temp_byte_1; RH = RH_byte_1; lcd_com (0x80); lcd_puts ("Temp:"); // lcd_puts (""); lcd_data (48 + ((Humidity / 10)% 10)); lcd_data (48 + (Humidity% 10)); lcd_data (0xDF); lcd_puts ("C"); lcd_com (0xC0); lcd_puts ("Humidity:"); // lcd_puts (""); lcd_data (48 + ((RH / 10)% 10)); lcd_data (48 + (RH% 10)); lcd_puts ("%"); } iba pa { lcd_puts ("Checksum error"); } } iba pa { clear_screen (); lcd_com (0x80); lcd_puts ("Error !!!"); lcd_com (0xC0); lcd_puts ("Walang Tugon."); } __delay_ms (1000); } }
Ang komunikasyon sa sensor ng DHT11 ay ginagawa sa loob ng habang loop kung saan ang pagsisimula ng signal ay isinumite sa sensor. Pagkatapos nito, na- trigger ang pagpapaandar na find_response . Kung ang Check_bit ay 1 pagkatapos ang karagdagang komunikasyon ay dinala kung hindi man ang LCD ay magpapakita ng error sa dialog.
Nakasalalay sa data ng 40bit, ang read_dht11 ay tinatawag na 5 beses (5 beses x 8bit) at naimbak ang data ayon sa format ng data na ibinigay sa datasheet. Ang checksum status ay din naka-check at kung mga error ay natagpuan, ito ring i-notify sa LCD. Panghuli, ang data ay na-convert at nailipat sa 16x2 character LCD.
Ang kumpletong code para sa pagsukat ng Temperatura at Humidity ng PIC na ito ay maaaring ma-download mula dito. Suriin din ang video ng demonstrasyon na ibinigay sa ibaba.
Inaasahan kong naintindihan mo ang proyekto at nasiyahan sa pagbuo ng isang bagay na kapaki-pakinabang. Kung mayroon kang anumang mga katanungan iwanan ang mga ito sa seksyon ng komento sa ibaba o gamitin ang aming mga forum para sa iba pang mga teknikal na katanungan.