Составной датчик DHT11 включает в себя сразу два полезных измерительных прибора — термометр и гигрометр. Первый, очевидно, измеряет температуру, а второй — относительную влажность воздуха. Такие датчики применяются в системах климат-контроля внутри жилых и промышленных помещений, в теплицах, а также в погодных станциях.
Внутри корпуса DHT11 размещается резистивный элемент, чувствительный к изменению относительной влажности, термистор типа NTC, а также микросхема для передачи показаний этих двух датчиков по цифровому протоколу 1-wire.
Для удобства использования, мы в RobotClass сделали модуль в форм-факторе 23×23мм, на котором датчик DHT11 уже имеет необходимый для правильной работы резистор подтяжки и штыревой трёхконтактный разъём.
Характеристики датчика
- напряжение питания и I/O: от 3,3 до 5,5 В;
- тип датчика влажности: резистивный;
- диапазон измерения влажности: от 20% до 90%;
- погрешность при измерении влажности: 5%;
- тип датчика температуры: NTC термистор;
- диапазон измерения температуры: от 0°C до 50°C;
- погрешность при измерении температуры: 2%;
- частота опроса: не более 1 Гц (1 раз в сек.);
- время отклика при измерении влажности: 10 с.
Кроме DHT-11, существует множество аналогичных датчиков, которые отличаются точностью, энергопотреблением, интерфейсом. Например, у датчика DHT22 диапазон измерений влажности составляет от 0 до 100%, а температуры от -40 до 125°C.
Список необходимых компонентов
Для выполнения простого примера с датчиком RobotClass DHT11, кроме самого модуля датчика, потребуется отладочная плата Arduino Uno или её аналог, а также немного проводов вилка-розетка. Необходимые компоненты можно добавить в корзину прямо здесь, и затем оформить заказ в нашем интернет-магазине.
Подключение датчика DHT11 к Ардуино
У датчика DHT11 есть четыре вывода, один из которых (№3) не используется.
Как видно на фото, выводы нумеруются слева на право, если смотреть на корпус датчика со стороны решетки и ногами вниз. Подключаем выводы к Ардуино Уно по следующей схеме:
Датчик DHT11 | 1 | 2 | 4 |
Ардуино Уно | +5V | 2 | GND |
Принципиальная схема
Внешний вид макета
Важно отметить, что второй вывод датчика мы подключаем не только ко второй линии GPIO на Ардуино, но еще и к плюсу питания через резистор подтяжки 4,7 кОм. Таким образом, мы, что называется, «подтягиваем» линию данных датчика к плюсу. Это необходимо для правильного функционирования DHT11.
Подключение модуля RobotClass DHT11 к Ардуино
В случае использования модуля от RobotClass, подтягивающий резистор не понадобится. Схема будет выглядеть следующим образом.
Принципиальная схема
Внешний вид макета
Программа для работы с DHT11
Теперь, когда датчик подключен, приступим к программированию контроллера. Первое, что нам следует сделать — установить в Arduino IDE дополнительную библиотеку. Существует множество библиотек для работы с DHT, но мы выберем вариант с портала Adafruit. Ссылка на библиотеку имеется в конце урока.
Устанавливаем библиотеку и составляем тестовую программу:
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
// датчик подключен к контакту №2
#define DHTPIN 2
// выбираем модель датчика, убрав признак комментария у нужной строки
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// создаем объект dht, с которым будем работать
DHT_Unified dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
// инициализируем датчика
dht.begin();
}
void loop() {
sensors_event_t event;
// получаем значение температуры
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
// в случае проблем с датчиком температуры выводим следующий текст
Serial.println("Error reading temperature!");
}
else {
// вывод в COM порт текста Temperature: xxx°C
Serial.print("Temperature: ");
Serial.print(event.temperature);
Serial.println("°C");
}
// получаем значение влажности
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
// в случае проблем с датчиком влажности выводим следующий текст
Serial.println("Error reading humidity!");
}
else {
// вывод в COM порт текста Humidity: xxx%
Serial.print("Humidity: ");
Serial.print(event.relative_humidity);
Serial.println("%");
}
delay(1000); // пауза 1 сек перед следующим опросом датчика
}
В верхней части программы имеется три строки с директивой define, две из которых закомментированы (перед ними стоят два слеша). В зависимости от типа датчика мы можем раскомментировать нужную строку. Сейчас выбран датчик DHT11.
Загружаем программу в Ардуино Уно, открываем монитор последовательного порта (Tools/Serial Monitor) и наблюдаем результаты измерений!
Задания
- Автоматическая теплица. Требуется собрать автоматический регулятор влажности, состоящий из контроллера Ардуино Уно, датчика влажности DHT11 и реле. Программа регулятора должна каждые 3 секунды проверять значение влажности и температуры. В случае, если во время очередной проверки влажность опускается ниже 50% при температуре не ниже +20 градусов, с помощью реле включается вентилятор. Для простоты, к реле можно подключить обычный светодиод.
В заключении
Хотя датчик влажности DHT11 и является самым популярным, он не отличается выдающимися характеристиками. К примеру, его более продвинутый собрат DHT22 имеет больший диапазон измерений влажности и температуры, а также большую точность. А датчик AM2320 так же точен, как и DHT22, но имеет более удобный в некоторых задачах интерфейс I2C.
Однако, сам по себе резистивный элемент имеет ряд недостатков. Поскольку сопротивление материала зависит ещё и от температуры, возникает необходимость измерять её достаточно точно. Кроме того, сопротивление в зависимости от влажности меняется очень слабо, так что для качественного измерения потребуется точный малошумный АЦП.
Есть и датчики, основанные на других принципах. В частности, ёмкостный AHT20, выполненный по MEMS технологии. Но и у них тоже достаточно своих недостатков. Ёмкостные элементы имеют склонность к старению, загрязнению и дрейфу калибровочных значений.
Кроме того, все датчики требуют регулярной калибровки, что тоже сопряжено с различными проблемами.
Как вы уже понял, точное измерение относительной влажности — сложный процесс, подверженный искажениям из-за множества факторов. Благо, что в большинстве DIY-задач такой точности не требуется.
Полезные материалы
Скачать архив с библиотекой для работы с DHT11 можно по следующей ссылке:
https://github.com/adafruit/DHT-sensor-library
Также библиотеку можно установить через менеджер библиотек в Arduino IDE. В поисковой строке менеджера необходимо ввести «DHT sensor library by Adafruit«.
Вопрос есть. У вас тоже точность измерений и скорость изменения показаний не очень? В квартире 21 градус, 34 влажность, ок. Но потом я вышел на улицу с температурой градусов 7-8 и влажностью 95 %, за секунд 30 показания опустились по температуре до 16 градусов, а влажность поднялась всего до 36 %.
Датчик DHT11 не славится точностью, это правда. Чуть получше дела обстоят у датчика DHT22. Есть и еще более точные модели.
На скрине показывает влажность 13% при том, что пределы измерения датчика 20-95. Явно что-то не так.
А где решение задачи посмотреть?
Датчик,который на картинке-включается в схему без резистора!!