- ДХТ11 - Спецификација и рад
- Комуникација са сензором ДХТ11
- Потребне компоненте
- Шема
- ДХТ11 са објашњењем ПИЦ МПЛАБКС кода
Мерење температуре и влажности често је корисно у многим апликацијама као што су аутоматизација куће, надгледање околине, метеоролошка станица итд. Најпопуларнији сензор температуре поред ЛМ35 је ДХТ11, већ смо направили многе пројекте ДХТ11 повезивањем са Ардуином и Распберри Пи и многи други развојни одбори. У овом чланку ћемо научити како да повежемо овај ДХТ11 са ПИЦ16Ф87А који је 8-битни ПИЦ микроконтролер. Користићемо овај микроконтролер за очитавање вредности температуре и влажности помоћу ДХТ11 и приказивање на ЛЦД дисплеју. Ако сте потпуно нови у коришћењу ПИЦ микроконтролера, можете да користите нашу серију водича за ПИЦ да бисте научили како да програмирате и користите ПИЦ микроконтролер, што је речено, почнимо.
ДХТ11 - Спецификација и рад
ДХТ11 сензор је доступан у облику модула или у облику сензора. У овом упутству користимо сензор, једина разлика између оба је у томе што у облику модула сензор има кондензатор за филтрирање и пулл-уп отпорник причвршћен на излазни пин сензора. Дакле, ако користите модул, не морате их додавати споља. ДХТ11 у облику сензора приказан је испод.
ДХТ11 сензор долази у кућишту плаве или беле боје. Унутар овог кућишта имамо две важне компоненте које нам помажу да осетимо релативну влажност и температуру. Прва компонента је пар електрода; електрични отпор између ове две електроде одређује подлога која задржава влагу. Дакле, измерени отпор је обрнуто пропорционалан релативној влажности околине. Што је већа релативна влажност ваздуха, већа је вредност отпора и обрнуто. Такође имајте на уму да се релативна влажност разликује од стварне влажности. Релативна влажност ваздуха мери садржај воде у ваздуху у односу на температуру у ваздуху.
Друга компонента је површински монтирани НТЦ термистор. Израз НТЦ означава негативни температурни коефицијент, јер ће пораст температуре смањити вредност отпора. Излаз сензора је фабрички калибриран и стога као програмер не морамо бринути о калибрацији сензора. Излаз сензора који даје 1-жична комуникација, погледајмо пин и дијаграм повезивања овог сензора.
Производ је у 4-редном паковању са једним редом. Први пин повезан је преко ВДД-а, а четврти пин повезан преко ГНД-а. Други пин је дата пин који се користи у сврху комуникације. Овом пин-у података потребан је пулл-уп отпор од 5к. Међутим, могу се користити и други повлачни отпорници као што су 4.7к до 10к. 3. пин није повезан ни са чим. Дакле, игнорише се.
Лист са подацима пружа техничке спецификације, као и информације о повезивању које се могу видети у доњој табели -
Горња табела приказује опсег и тачност мерења температуре и влажности. Може да мери температуру од 0-50 степени Целзијуса са тачношћу од +/- 2 степена Целзијуса и релативну влажност од 20-90% релативне влажности са тачношћу од +/- 5% влажности. Детаљне спецификације могу се видети у доњој табели.
Комуникација са сензором ДХТ11
Као што је раније поменуто, да бисмо могли читати податке из ДХТ11 са ПИЦ-ом, морамо користити ПИЦ једножични комуникацијски протокол. Детаљи о томе како се то може учинити могу се разумети из дијаграма повезивања ДХТ 11 који се може наћи у његовом техничком листу, исти је дат у наставку.
ДХТ11 треба стартни сигнал од МЦУ-а да започне комуникацију. Стога, сваки пут када МЦУ треба да пошаље сигнал за покретање ДХТ11 сензору да затражи да пошаље вредности температуре и влажности. Након завршетка стартног сигнала, ДХТ11 шаље сигнал одговора који укључује информације о температури и влажности. Пренос података врши се једним протоколом за пренос података сабирнице. Укупна дужина података је 40 бита и сензор прво шаље већи бит података.
Због отпора за извлачење, линија података увек остаје на нивоу ВЦЦ у режиму мировања. МЦУ треба да смањи овај напон на најнижи ниво током најмање 18 мс. За то време, сензор ДХТ11 детектује сигнал за старт, а микроконтролер чини линију података високом за 20-40ус. Ово време од 20-40ус назива се период чекања када ДХТ11 почиње да одговара. Након овог периода чекања, ДХТ11 шаље податке јединици микроконтролера.
ДХТ11 формат података сензора
Подаци се састоје од децималних и интегралних делова комбинованих заједно. Сензор следи доњи формат података -
8-битни интегрисани РХ подаци + 8-битни децимални подаци РХ + 8-битни интегрални Т подаци + 8-битни децимални Т подаци + 8-битна контролна сума.
Подаци се могу верификовати провером вредности контролне суме са примљеним подацима. То се може учинити јер, ако је све исправно и ако је сензор послао исправне податке, тада би контролна сума требало да буде збир „8-битни интегрални подаци РХ + 8-битни децимални подаци РХ + 8-битни интегрални подаци Т + 8-битни децимални подаци Т“.
Потребне компоненте
За овај пројекат су потребне следеће ствари -
- Подешавање програмирања ПИЦ микроконтролера (8 бита).
- Бреадбоард
- Јединица за напајање од 5В 500мА.
- Отпор 4,7к 2ком
- 1к отпорник
- ПИЦ16Ф877А
- Кристал од 20мХз
- 33пФ кондензатор 2 ком
- ЛЦД од 16к2 карактера
- ДХТ11 сензор
- Жице краткоспојника
Шема
Дијаграм кола за повезивање ДХТ11 са ПИЦ16Ф877А приказан је доле.
Користили смо ЛЦД 16к2 за приказ вредности температуре и влажности које меримо од ДХТ11. ЛЦД је повезан у четворожичном режиму, а сензор и ЛЦД напајају се од 5В спољног напајања. Користио сам даску за повезивање да бих успоставио све потребне везе и користио сам спољни адаптер од 5В. Ову плочу за напајање можете користити и за напајање плоче са 5В.
Једном када је круг спреман, све што треба да урадимо је да отпремимо код дат на дну ове странице и можемо почети читати температуру и влажност као што је приказано доле. Ако желите да знате како је написан код и како он функционише, прочитајте даље. Комплетан рад овог пројекта такође можете пронаћи у видеу датом на дну ове странице.
ДХТ11 са објашњењем ПИЦ МПЛАБКС кода
Код је написан помоћу МПЛАБКС ИДЕ-а, а компајлиран је помоћу КСЦ8 компајлера, који обезбеђује Мицроцхип сам, а бесплатан је за преузимање и употребу. Молимо вас да погледате основне водиче да бисте разумели основе програмирања, у наставку су разматране само три важне функције које су потребне за комуникацију са ДХТ11 сензором. Функције су -
воид дхт11_инит (); воид финд_респонсе (); цхар реад_дхт11 ();
Прва функција се користи за сигнал за старт са дхт11. Као што је претходно речено, свака комуникација са ДХТ11 започиње сигналом за покретање, овде се прво мења смер пина да би се конфигурисао дата пин као излаз из микроконтролера. Затим се линија за пренос података повуче ниско и чека на 18мС. Након тога микроконтролер поново подиже линију и чека до 30ус. Након тог времена чекања, пин података постављен је као улаз у микроконтролер за пријем података.
воид дхт11_инит () { ДХТ11_Дата_Пин_Дирецтион = 0; // Конфигуришите РД0 као излаз ДХТ11_Дата_Пин = 0; // РД0 шаље 0 сензору __делаи_мс (18); ДХТ11_Дата_Пин = 1; // РД0 шаље 1 сензору __делаи_ус (30); ДХТ11_Дата_Пин_Дирецтион = 1; // Конфигуриши РД0 као улаз }
Следећа функција се користи за подешавање контролног бита у зависности од статуса пин-а за податке. Користи се за откривање одговора ДХТ11 сензора.
воид финд_респонсе () { Цхецк_бит = 0; __делаи_ус (40); иф (ДХТ11_Дата_Пин == 0) { __делаи_ус (80); иф (ДХТ11_Дата_Пин == 1) { Цхецк_бит = 1; } __делаи_ус (50);} }
Коначно, функција читања дхт11; овде се подаци читају у 8-битни формат где се подаци враћају помоћу операције померања бита у зависности од статуса пин-а података.
цхар реад_дхт11 () { цхар подаци, за_број; фор (фор_цоунт = 0; фор_цоунт <8; фор_цоунт ++) { вхиле (! ДХТ11_Дата_Пин); __делаи_ус (30); иф (ДХТ11_Дата_Пин == 0) { дата & = ~ (1 << (7 - за_број)); // Очисти бит (7-б) } елсе { дата- = (1 << (7 - за_број)); // Постави бит (7-б) вхиле (ДХТ11_Дата_Пин); } } вратити податке; }
У
После тога све се ради у главној функцији. Прво се иницијализација система врши тамо где се ЛЦД иницијализује и смер прикључка пинова ЛЦД-а постави на излаз. Апликација се изводи унутар главне функције
воид маин () { систем_инит (); док (1) { __делаи_мс (800); дхт11_инит (); финд_респонсе (); иф (Цхецк_бит == 1) { РХ_бите_1 = реад_дхт11 (); РХ_бите_2 = реад_дхт11 (); Темп_бите_1 = реад_дхт11 (); Темп_бите_2 = реад_дхт11 (); Збир = реад_дхт11 (); иф (Збир == ((РХ_бите_1 + РХ_бите_2 + Темп_бите_1 + Темп_бите_2) & 0КСФФ)) { Влажност = Темп_бите_1; РХ = РХ_бите_1; лцд_цом (0к80); лцд_путс ("Темп:"); // лцд_путс (""); лцд_дата (48 + ((Влажност / 10)% 10)); лцд_дата (48 + (влажност% 10)); лцд_дата (0кДФ); лцд_путс ("Ц"); лцд_цом (0кЦ0); лцд_путс ("Влажност:"); // лцд_путс (""); лцд_дата (48 + ((РХ / 10)% 10)); лцд_дата (48 + (РХ% 10)); лцд_путс ("%"); } елсе { лцд_путс ("Грешка контролне суме"); } } елсе { цлеар_сцреен (); лцд_цом (0к80); лцд_путс ("Грешка !!!"); лцд_цом (0кЦ0); лцд_путс ("Нема одговора."); } __делаи_мс (1000); } }
Комуникација са ДХТ11 сензором се обавља унутар вхиле петље, где је почетак сигнала који се подноси сензора. Након тога се покреће функција финд_респонсе . Ако је Цхецк_бит 1, онда се врши даљња комуникација, иначе ће се на ЛЦД-у приказати дијалог о грешкама.
У зависности од података од 40 бита, реад_дхт11 се позива 5 пута (5 пута к 8 бита) и чува податке према формату података наведеном у листу са подацима. Такође се проверава статус контролне суме и ако се пронађу грешке, такође ће се обавестити на ЛЦД-у. Коначно, подаци се претварају и преносе на ЛЦД са 16к2 карактера.
Комплетни код за ово ПИЦ мерење температуре и влажности можете преузети овде. Такође погледајте доленаведени демонстрацијски видео.
Надам се да сте разумели пројекат и уживали сте у стварању нечег корисног. Ако имате питања, оставите их у одељку за коментаре испод или користите наша форума за друга техничка питања.