29.08.2018
Составной датчик DHT11 включает в себя сразу два полезных измерительных прибора — термометр и гигрометр. Первый, очевидно, измеряет температуру, а второй — влажность воздуха. Обычно, датчик можно приобрести в таком вот пластиковом корпусе:
Но бывают версии распаянные на небольшой платке, например так:
Характеристики датчика:
напряжение питания — 3-5В; потребляемый ток — 2.5 мА в момент опроса (в остальное время меньше); диапазон измерений влажности — 20-80%, при точности — 5%; диапазон измерений температур — 0-50°C, при точности ±2°C; частота опроса — 1 Гц (раз в секунду).Кроме DHT-11, вы можно легко встретить и его близких собратьев: DHT-22, 33 и 44. Отличаются эти датчики более высоким уровнем точности и диапазоном измерений. Например, у датчика DHT-22 диапазон измерений влажности составляет от 0 до 100%, а температуры от -40 до 125°C.
У датчика DHT-11 есть четыре вывода, один из которых (№3) не используется.
Как видно на фото, выводы нумеруются слева на право, если смотреть на корпус датчика со стороны решетки и ногами вниз. Подключаем выводы к Ардуино Уно по следующей схеме:
Датчик DHT11 | 1 | 2 | 4 |
Ардуино Уно | +5V | 2 | GND |
Важно отметить, что второй вывод датчика мы подключаем не только ко второй линии GPIO на Ардуино, но еще и к плюсу питания через резистор 4.7 кОм. Таким образом, мы, что называется, «подтягиваем» линию данных датчика к плюсу. Это необходимо для правильного функционирования DHT11.
Теперь, когда датчик подключен, приступим к программированию контроллера. Первое, что нам следует сделать — установить в Arduino IDE дополнительную библиотеку. Существует несколько библиотек для работы с DHT, но мы выберем вариант с портала adafruit. Скачать архив с библиотекой можно по следующей ссылке:
https://github.com/adafruit/DHT-sensor-library/archive/master.zip
Устанавливаем библиотеку и составляем тестовую программу:
#include "DHT.h" #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) const byte dht_pin = 2; DHT dht(dht_pin, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("Test DHT11"); dht.begin(); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(t) || isnan(h)) { Serial.println("Failed to read from DHT"); } else { Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C"); } }В верхней части программы имеется три строки с директивой define, две из которых закомментированы. В зависимости от типа датчика мы можем раскомментировать нужную строку. Сейчас выбран датчик DHT11.
Загружаем программу в Ардуино Уно, открываем монитор последовательного порта (Tools/Serial Monitor) и наблюдаем результаты измерений!
Хотя датчик влажности DHT11 и является самым популярным, он не отличается выдающимися характеристиками. К примеру, его более продвинутый собрат DHT22 имеет больший диапазон измерений влажности и температуры, а также большую точность.