Вам понадобится
  • - Arduino;
  • - датчик температуры и влажности DHT17.
Инструкция
1
Итак, датчик DHT11 имеет следующие характеристики:
- диапазон измеряемой относительной влажности - 20..90% с погрешностью до 5%,
- диапазон измеряемых температур - 0..50 градусов Цельсия с погрешностью до 2 градусов;
- время реакции на изменения влажности - до 15 секунд, температуры - до 30 секунд;
- минимальный период опроса - 1 секунда.
Как видно, датчик DHT11 не отличается особой точностью, да и диапазон температур не охватывает отрицательные значения, что вряд ли подойдёт для наружных измерений в холодное время года при нашем климате. Однако малая стоимость, малый размер и простота работы с ним частично перекрывают эти недостатки.
На рисунке приведён внешний вид датчика и его размеры в миллиметрах.
Внешний вид и размеры датчика DHT11
2
Рассмотрим схему подключения датчика температуры и влажности DHT11 к микроконтроллеру, в частности, к Arduino. На рисунке:
- MCU - микроконтроллер (например, Arduino или аналогичный) или одноплатный компьютер (Raspberry Pi или аналогичный);
- DHT11 - датчик температуры и влажности;
- DATA - шина данных; если длина соединительного кабеля от датчика к микроконтроллеру не превышает 20 метров, то эту шину рекомендуется подтянуть к питанию резистором 5,1 кОм; если больше 20 метров - то другой подходящий номинал (меньший).
- VDD - питание датчика; допустимы напряжения от ~3,0 до ~5,5 вольт постоянного тока; если используется питание ~3,3 В, то желательно использовать питающий провод не длиннее 20 см.
Один из выводов датчика - 3-ий - ни к чему не подключается.
Сенсор DHT11 часто продаётся в виде готовой сборки с необходимой обвязкой - подтягивающими резистором и фильтрующим конденсатором.
Схема подключения датчика DHT11 к микроконтроллеру
3
Соберём рассмотренную схему. Я также подключу в цепь логический анализатор, чтобы можно было изучить временную диаграмму информационного обмена с датчиком.
Датчик DHT11 и Arduino
4
Давайте пойдём простым путём: скачаем библиотеку для датчика DHT11 (ссылка в разделе "Источники"), установим её стандартным способом (распаковав в директорию \libraries\ среды разработки для Arduino).
Напишем такой вот простенький скетч. Загрузим его в Arduino. Этот скетч будет выводить в последовательный порт компьютера каждые 2 секунды сообщения об относительной влажности и температуре, считанные с датчика DHT11.
Скетч для работы с датчиком температуры-влажности DHT11
5
Теперь, с помощью временной диаграммы, полученной с логического анализатора, разберёмся с тем, как осуществляется информационный обмен.
Для связи с микроконтроллером датчик температуры и влажности DHT11 использует однопроводный последовательный интерфейс. Один информационный обмен занимает около 40 мс и содержит: 1 бит запроса от микроконтроллера, 1 бит ответа датчика и 40 битов данных от датчика. В данные входят: 16 битов информации о влажности, 26 битов информации о температуре и 8 проверочных битов.
Давайте подробнее рассмотрим временную диаграмму информационного обмена Arduino с датчиком DHT11.
Из рисунка видно, что есть два типа импульсов: короткие и длинные. Короткие в данном протоколе обмена обозначают нули, длинные импульсы - единицы.
Итак, первые два импульса - это запрос Arduino к DHT11 и, соответственно, ответ датчика. Далее идут 16 бит влажности. Причём они разделены на байты, старший и младший, старший слева. То есть на нашем рисунке данные о влажности такие:
0001000000000000 = 00000000 00010000 = 0x10 = 16% относительной влажности.
Данные о температуре, аналогично:
0001011100000000 = 00000000 00010111 = 0x17 = 23 градуса Цельсия.
Проверочные биты - контрольная сумма - это всего-навсего суммирование 4-х полученных байтов данных:
00000000 +
00010000 +
00000000 +
00010111 =
00100111 в двоичной системе или 16 + 23 = 39 в десятичной.
Временная диаграмма обмена с датчиком DHT11