- DHT11 - määrittely ja toiminta
- Kommunikointi DHT11-anturin kanssa
- Vaaditut komponentit
- Kaavamainen
- DHT11 PIC MPLABX -koodiselityksellä
Lämpötilan ja kosteuden mittaamisesta on usein hyötyä monissa sovelluksissa, kuten kotiautomaatio, ympäristön seuranta, sääasema jne. Suosituin lämpötila-anturi LM35: n vieressä on DHT11, olemme aiemmin rakentaneet monia DHT11-projekteja liittämällä sen Arduinoon ja Vadelmaan Pi ja monet muut kehityskortit. Tässä artikkelissa opitaan, kuinka tämä DHT11 voidaan liittää PIC16F87A: n kanssa, joka on 8-bittinen PIC-mikrokontrolleri. Käytämme tätä mikro-ohjainta lukemaan lämpötilan ja kosteuden arvot DHT11: n avulla ja näyttämään sen LCD-näytöllä. Jos olet täysin uusi PIC-mikrokontrollerien käyttämisessä, voit käyttää PIC-opetusohjelmasarjaamme oppiaksesi ohjelmoimaan ja käyttämään PIC-mikrokontrolleria, sanotaan nyt, aloitetaan.
DHT11 - määrittely ja toiminta
DHT11-anturi on saatavana joko moduulimuodossa tai anturimuodossa. Tässä opetusohjelmassa käytämme anturia, ainoa ero molempien välillä on se, että moduulimuodossa anturissa on suodatuskondensaattori ja ylösvetovastus, jotka on kiinnitetty anturin ulostulotappiin. Joten jos käytät moduulia, sinun ei tarvitse lisätä niitä ulkoisesti. DHT11 anturimuodossa on esitetty alla.
DHT11-anturin mukana tulee sininen tai valkoinen väri. Tämän kotelon sisällä meillä on kaksi tärkeää komponenttia, jotka auttavat meitä tuntemaan suhteellisen kosteuden ja lämpötilan. Ensimmäinen komponentti on elektrodipari; näiden kahden elektrodin välinen sähkövastus päätetään kosteutta pitävällä alustalla. Joten mitattu vastus on kääntäen verrannollinen ympäristön suhteelliseen kosteuteen. Korkeampi suhteellinen kosteus pienempi on vastuksen arvo ja päinvastoin. Huomaa myös, että suhteellinen kosteus eroaa todellisesta kosteudesta. Suhteellinen kosteus mittaa ilman vesipitoisuutta suhteessa ilman lämpötilaan.
Toinen komponentti on pinta-asennettava NTC-termistori. Termi NTC tarkoittaa negatiivista lämpötilakerrointa, lämpötilan nousun takia resistanssin arvo pienenee. Anturin lähtö on kalibroitu tehtaalla, joten ohjelmoijana meidän ei tarvitse huolehtia anturin kalibroinnista. Anturin lähtö 1-johtimisen tiedonsiirron avulla, katsotaanpa tämän anturin tappi ja kytkentäkaavio.
Tuote on 4-napaisessa yksirivipakkauksessa. 1. tappi on kytketty VDD: n poikki ja 4. tappi on kytketty GND: n yli. 2. nasta on tietotappi, jota käytetään viestintätarkoituksiin. Tämä tietotappi tarvitsee 5 k: n vetovastuksen. Toisia voidaan kuitenkin käyttää myös vetämällä vastuksia, kuten 4,7 k - 10 k. 3. tappi ei ole yhteydessä mihinkään. Joten se jätetään huomiotta.
Datalehti sisältää tekniset eritelmät sekä rajapintatiedot, jotka näkyvät alla olevassa taulukossa -
Yllä olevassa taulukossa on esitetty lämpötilan ja kosteuden mittausalue ja tarkkuus. Se voi mitata lämpötilan välillä 0-50 astetta tarkkuudella +/- 2 astetta ja suhteellisen kosteuden välillä 20-90% RH tarkkuudella +/- 5% RH. Yksityiskohtaiset tiedot näkyvät alla olevassa taulukossa.
Kommunikointi DHT11-anturin kanssa
Kuten aiemmin mainittiin, DHT11: n tietojen lukemiseksi PIC: n kanssa on käytettävä PIC one wire Communication -protokollaa. Yksityiskohdat tämän suorittamiseksi voidaan ymmärtää DHT 11: n liitäntäkaaviosta, joka löytyy sen tietolomakkeesta, sama on annettu alla.
DHT11 tarvitsee käynnistyssignaalin MCU: lta aloittaa viestinnän. Siksi aina, kun MCU: n on lähetettävä käynnistyssignaali DHT11-anturille pyytääkseen sitä lähettämään lämpötila- ja kosteusarvot. Lähtösignaalin suorittamisen jälkeen DHT11 lähettää vastesignaalin, joka sisältää lämpötila- ja kosteustiedot. Tietoliikenne tapahtuu yhden väylän tiedonsiirtoprotokollalla. Koko datan pituus on 40 bittiä ja anturi lähettää ensin korkeamman databitin.
Vetovastuksen takia datalinja pysyy aina VCC-tasolla joutokäynnin aikana. MCU: n on vedettävä tämä jännite korkealta matalalle vähintään 18 ms: n jaksolle. Tänä aikana DHT11-anturi havaitsee käynnistyssignaalin ja mikrokontrolleri tekee datalinjan korkeaksi 20-40us. Tätä 20-40us-aikaa kutsutaan odotusjaksoksi, jolloin DHT11 alkaa vastaukseen. Tämän odotusajan jälkeen DHT11 lähettää tiedot mikro-ohjainyksikölle.
DHT11-anturin DATA-muoto
Tiedot koostuvat desimaaliosista ja kiinteistä osista yhdistettynä. Anturi noudattaa seuraavaa tietomuotoa -
8-bittinen integraali RH-data + 8-bittinen desimaali-kosteus + 8-bittinen integraali T-data + 8-bittinen desimaali T-data + 8-bittinen tarkistussumma.
Tiedot voidaan tarkistaa tarkistamalla tarkistussumman arvo vastaanotetuilla tiedoilla. Tämä voidaan tehdä, koska jos kaikki on oikein ja jos anturi on lähettänyt oikeaa dataa, tarkistussumman tulisi olla "8-bittisen integroidun RH-datan + 8-bittisen desimaalin RH-datan + 8-bittisen integraalin T-datan + 8-bittisen desimaalin T-datan" summa .
Vaaditut komponentit
Tähän projektiin tarvitaan seuraavia asioita -
- PIC-mikrokontrollerin (8-bittinen) ohjelmointi.
- Leipälauta
- 5V 500mA virtalähde.
- 4,7 kt vastus 2kpl
- 1k vastus
- PIC16F877A
- 20mHz kristalli
- 33pF kondensaattori 2 kpl
- 16x2 merkin LCD
- DHT11-anturi
- Hyppääjän johdot
Kaavamainen
Piirikaavion vuorovaikutuksessa DHT11 kanssa PIC16F877A on esitetty alla.
Olemme käyttäneet 16x2 LCD: tä näyttämään lämpötila- ja kosteusarvot, jotka mitataan DHT11: stä. Nestekidenäyttö on kytketty 4-johdin-tilassa, ja sekä anturi että LCD saavat virran 5 V: n ulkoisesta virtalähteestä. Olen käyttänyt leipälautaa kaikkien tarvittavien liitäntöjen tekoon ja käyttänyt ulkoista 5 V: n sovitinta. Voit myös käyttää tätä leipälevyn virtalähdettä levyn virtalähteeseen 5 V: lla.
Kun piiri on valmis, meidän on vain ladattava tämän sivun alaosassa annettu koodi ja voimme aloittaa lämpötilan ja kosteuden lukemisen kuten alla on esitetty. Jos haluat tietää, kuinka koodi kirjoitettiin ja miten se toimii, lue lisää. Löydät myös tämän projektin täydellisen toiminnan tämän sivun alaosassa olevasta videosta.
DHT11 PIC MPLABX -koodiselityksellä
Koodi kirjoitettiin MPLABX IDE: n avulla ja koottiin käyttäen XC8-kääntäjää, jonka molemmat tarjoaa Microchip itse, ja se on ilmainen ladata ja käyttää. Katso perusoppaat ymmärtääksesi ohjelmoinnin perusteet, alla käsitellään vain kolmea tärkeää toimintoa, joita tarvitaan yhteydenpitoon DHT11-anturin kanssa. Toiminnot ovat -
void dht11_init (); void find_response (); char read_dht11 ();
Ensimmäistä toimintoa käytetään aloitussignaaliin dht11: llä. Kuten aiemmin keskusteltiin, jokainen tiedonsiirto DHT11: n kanssa alkaa aloitussignaalilla, tässä tapin suunta muutetaan aluksi datanastan konfiguroimiseksi mikrokontrollerin ulostulona. Sitten datalinja vedetään matalaksi ja se odottaa 18 ms: ta. Sen jälkeen mikrokontrolleri nostaa linjan jälleen korkeaksi ja odottaa jopa 30 us. Tämän odotusajan jälkeen datanasta asetettiin mikrokontrollerin tuloksi vastaanottamaan dataa.
void dht11_init () { DHT11_Data_Pin_Direction = 0; // Määritä RD0 lähdöksi DHT11_Data_Pin = 0; // RD0 lähettää 0 anturille __viive_ms (18); DHT11_Data_Pin = 1; // RD0 lähettää 1 anturille __delay_us (30); DHT11_Data_Pin_Direction = 1; // Määritä RD0 tuloksi }
Seuraavaa toimintoa käytetään tarkistusbitin määrittämiseen datanastan tilasta riippuen. Sitä käytetään havaitsemaan DHT11-anturin vaste.
void find_response () { Tarkista_bit = 0; __viive_us (40); jos (DHT11_Data_Pin == 0) { __viivästys_us (80); jos (DHT11_Data_Pin == 1) { Check_bit = 1; } __viivästys_ (50);} }
Lopuksi dht11-lukutoiminto; tässä data luetaan 8-bittiseen muotoon, jossa data palautetaan bittisiirtotoiminnolla datanastan tilasta riippuen.
char read_dht11 () { char data, for_count; for (for_count = 0; for_count <8; for_count ++) { while (! DHT11_Data_Pin); __viive_us (30); if (DHT11_Data_Pin == 0) { data & = ~ (1 << (7 - for_count)); // Tyhjennä bitti (7-b) } else { data- = (1 << (7 - for_count)); // Aseta bitti (7-b) while (DHT11_Data_Pin); } } palautustiedot; }
A
Sen jälkeen kaikki tehdään päätoiminnoksi. Ensinnäkin järjestelmän alustus tehdään, kun nestekidenäyttö alustetaan ja LCD-nastojen portin suunta asetetaan lähtöön. Sovellus toimii päätoiminnon sisällä
void main () { system_init (); kun (1) { __viive_ms (800); dht11_init (); etsi_vastaus (); jos (Tarkista_bitti == 1) { RH_byte_1 = luettu_dht11 (); RH_byte_2 = read_dht11 (); Temp_byte_1 = read_dht11 (); Temp_byte_2 = read_dht11 (); Yhteenveto = read_dht11 (); jos (Summa == ((RH_byte_1 + RH_byte_2 + Temp_byte_1 + Temp_byte_2) & 0XFF)) { Kosteus = Temp_byte_1; RH = RH_byte_1; lcd_com (0x80); lcd_puts ("Lämpötila:"); // lcd_puts (""); lcd_data (48 + ((Kosteus / 10)% 10)); lcd_data (48 + (kosteus% 10)); lcd_data (0xDF); lcd_puts ("C"); lcd_com (0xC0); lcd_puts ("Kosteus:"); // lcd_puts (""); lcd_data (48 + ((RH / 10)% 10)); lcd_data (48 + (suhteellinen kosteus% 10)); lcd_puts ("%"); } else { lcd_puts ("Tarkistussummavirhe"); } } else { clear_screen (); lcd_com (0x80); lcd_puts ("Virhe !!!"); lcd_com (0xC0); lcd_puts ("Ei vastausta"); } __viive_ms (1000); } }
Tiedonsiirto DHT11-anturin kanssa tapahtuu while- silmukan sisällä, jossa aloitussignaali lähetetään anturille. Sen jälkeen Find_response- toiminto käynnistyy. Jos Check_bit on 1, jatkuva tiedonsiirto tapahtuu, muuten nestekidenäytössä näkyy virhevalintaikkuna.
40-bittisestä tiedosta riippuen read_dht11 kutsutaan 5 kertaa (5 kertaa x 8 bittiä) ja se tallentaa tiedot lomakkeessa olevan tietomuodon mukaisesti. Tarkistussumma tila tarkistetaan myös, ja jos virheitä löytyy, se myös ilmoittaa LCD. Lopuksi data muunnetaan ja lähetetään 16x2-merkkiseen nestekidenäyttöön.
Tämän PIC-lämpötilan ja kosteuden mittauksen täydellinen koodi voidaan ladata täältä. Tarkista myös alla oleva esittelyvideo.
Toivottavasti ymmärrät projektin ja nautit rakentamaan jotain hyödyllistä. Jos sinulla on kysyttävää, jätä ne alla olevaan kommenttiosioon tai käytä foorumeitamme muihin teknisiin kysymyksiin.