Датчик влажности и температуры DHT11

Составной датчик DHT11 включает в себя сразу два полезных измерительных прибора — термометр и гигрометр. Первый, очевидно, измеряет температуру, а второй — относительную влажность воздуха. Такие датчики применяются в системах климат-контроля внутри жилых и промышленных помещений, в теплицах, а также в погодных станциях.

Внутри корпуса DHT11 размещается резистивный элемент, чувствительный к изменению относительной влажности, термистор типа NTC, а также микросхема для передачи показаний этих двух датчиков по цифровому протоколу 1-wire.

Для удобства использования, мы в RobotClass сделали модуль в форм-факторе 23×23мм, на котором датчик DHT11 уже имеет необходимый для правильной работы резистор подтяжки и штыревой трёхконтактный разъём.

Датчик влажности и температуры DHT11 от RobotClass

Характеристики датчика

  • напряжение питания и 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

Как видно на фото, выводы нумеруются слева на право, если смотреть на корпус датчика со стороны решетки и ногами вниз. Подключаем выводы к Ардуино Уно по следующей схеме:

Датчик DHT11124
Ардуино Уно+5V2GND

Принципиальная схема

Подключение DHT11 к Ардуино Уно

Внешний вид макета

Подключение датчика DHT11 к Ардуино

Важно отметить, что второй вывод датчика мы подключаем не только ко второй линии GPIO на Ардуино, но еще и к плюсу питания через резистор подтяжки 4,7 кОм. Таким образом, мы, что называется, «подтягиваем» линию данных датчика к плюсу. Это необходимо для правильного функционирования DHT11.

Подключение модуля RobotClass DHT11 к Ардуино

В случае использования модуля от RobotClass, подтягивающий резистор не понадобится. Схема будет выглядеть следующим образом.

Принципиальная схема

Подключение датчика DHT11 к Ардуино

Внешний вид макета

Подключение датчика DHT11 к Ардуино

Программа для работы с 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) и наблюдаем результаты измерений!

IMG_20141120_225500

Задания

  1. Автоматическая теплица. Требуется собрать автоматический регулятор влажности, состоящий из контроллера Ардуино Уно, датчика влажности 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«.


Изменено:

Датчик влажности и температуры DHT11: 5 комментариев

  1. Вопрос есть. У вас тоже точность измерений и скорость изменения показаний не очень? В квартире 21 градус, 34 влажность, ок. Но потом я вышел на улицу с температурой градусов 7-8 и влажностью 95 %, за секунд 30 показания опустились по температуре до 16 градусов, а влажность поднялась всего до 36 %.

    • Датчик DHT11 не славится точностью, это правда. Чуть получше дела обстоят у датчика DHT22. Есть и еще более точные модели.

    • На скрине показывает влажность 13% при том, что пределы измерения датчика 20-95. Явно что-то не так.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.