Как да свържете DHT11 сензор за температура и влажност към Arduino
Сензорът за температура и влажност DHT11 е популярен и евтин сензор, който може да се използва в доста широк диапазон от температури и относителна влажност. Нека видим как да го свържете към Arduino и как да четете данни от него.
1 Спецификации за сензор за температура и влажност DHT11
И така, сензорът DHT11 има следните характеристики:
- диапазон на измерена относителна влажност - 20..90% с грешка до 5%,
- диапазон на измерваните температури – 0..50°C с грешка до 2°C;
- време за реакция при промени във влажността - до 15 секунди, температура - до 30 секунди;
- минималният период на запитване е 1 секунда.

Както можете да видите, сензорът DHT11 не е особено точен и температурният диапазон не покрива отрицателни стойности, което едва ли е подходящо за измервания на открито в студения сезон в нашия климат. Но ниската цена, малкият размер и лекотата на работа частично компенсират тези недостатъци. Фигурата показва външния вид на сензора и неговите размери в милиметри.
2 Схема на свързване на датчик за температура и влажност DHT11
Помислете за схемата на свързване на сензора за температура и влажност DHT11 към микроконтролера, по-специално към Arduino.

Да видим какво е показано на снимката.
5,5 волта DC; ако се използва захранване
3,3 V, препоръчително е да използвате захранващ кабел не по-дълъг от 20 cm.
Нека съберем разглежданата схема. Също така традиционно ще включа логически анализатор във веригата, за да мога да проуча времедиаграмата на обмен на информация със сензора.


Сензорът DHT11 често се продава като готов комплект с необходимите тръбопроводи - издърпващи резистори и филтърен кондензатор (както на предишната снимка). За експерименти с Arduino препоръчвам да закупите този.
3 Четене на данни от сензора DHT11 с помощта на Arduino
Да вървим по този начин: изтеглете библиотеката за сензора DHT11, инсталирайте я по стандартния начин (като я разопаковате в директорията \libraries\ на средата за разработка Arduino).
Нека напишем такава проста скица. Той ще извежда към серийния порт на компютъра на всеки 2 секунди съобщенията за относителна влажност и температура, прочетени от сензора DHT11.
Качете тази скица в Arduino. Нека да се свържем с Arduino с помощта на монитора на COM порта и да видим следното:

Може да се види, че данните за влажността и температурата се четат и извеждат към терминала.
4 Времева диаграма на обмен на информация на датчик за температура и влажност DHT11 с микроконтролер
С помощта на времевата диаграма, получена от логическия анализатор, нека да разберем как се извършва обменът на информация.
За да комуникира с микроконтролера, сензорът за температура и влажност DHT11 използва едножилен сериен пакетен интерфейс. Един информационен пакет с продължителност около 4 ms съдържа: 1 бит за заявка от микроконтролера, 1 бит от отговора на сензора и 40 бита данни от сензора (16 бита информация за влажност, 16 бита информация за температура и 8 бита за проверка). Нека разгледаме по-подробно комуникационната времева диаграма на Arduino със сензора DHT11.
Времева диаграма на обмена на информация на сензора DHT11 с микроконтролера
отФигурата показва, че има два вида импулси: къси и дълги. Късите импулси в този протокол за обмен означават нули, дългите импулси означават единици.
И така, първите два импулса са заявката на Arduino към DHT11 и съответно отговорът на сензора. Следват 16 бита влажност. Освен това те са разделени на байтове, високи и ниски, високи отляво. Тоест в нашата фигура данните за влажността са: 0001000000000000 = 00000000 00010000 = 0x10 = 16% RH.
Температурни данни, подобни: 0001011100000000 = 00000000 00010111 = 0x17 = 23 градуса по Целзий.
Контролната сума е само аритметичното сумиране на 4-те получени байта данни: 00000000 + 00010000 + 00000000 + 00010111 = 00100111 в двоично или 0 + 16 + 0 + 23 = 39 в десетично.
5 Работа със сензор DHT11 без библиотека
Сега знаем достатъчно, за да напишем наша собствена програма за работа със сензора за температура и влажност DHT11, без да използваме библиотеки на трети страни. Нека напишем скица, която ще анкетира сензора веднъж в секунда и ще изведе получения пакет и данни за температура, влажност, както и тестов байт към серийния порт на компютъра. Ще изведем управляващ сигнал към 13-ия крак на Arduino и, свързвайки логически анализатор в него, ще проверим дали правилно четем информация от сензора.
Скица за работа с DHT11 и Arduino без библиотеки на трети страни (разширява се)
Малка таблица ще даде допълнителни пояснения към предложеното решение.