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

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

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

Датчик подключается к управляющей электронике через 3 провода. При подключении к Arduino будет крайне удобно использовать Troyka Shield. Шлейф для подключения включён в комплект.

Внимание! Распиновка питания этого сенсора может различаться. Перед включением модуля ознакомьтесь с особенностями подключения модулей DFRobot .

Данные и температуры, и влажности поставляются по сигнальному проводу в виде цифрового сигнала. Это позволяет передавать данные на расстояние до 20 м. Сенсор работает по собственному протоколу. Полная инструкция по его подключению и использованию с Arduino приведена на нашей вики.

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

  • Напряжение питания: 5 В
  • Диапазон температур: 0–50 °С
  • Погрешность температуры: ±2 °С
  • Диапазон влажности: 20–90%

Погрешность влажности: ±5%

Если необходима большая точность, рассмотрите датчик температуры и влажности SHT1x .

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

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

Питание и I/O 3.5-5.5 В

Характеристики:

Датчик температуры и влажности датчик
  • Определение влажности 20-95% с 5% точностью
  • Определение температуры 0-50 град. с точностью 2 град.
  • Частота опроса не более 1 Гц (не более раза в 1 сек.)
  • Размеры 15.5мм x 12мм x 5.5мм
  • 4 вывода с расстоянием между ножками 0.1"

При подключении к микроконтроллеру, вы можете между выводами Vcc и Data разместить подтягивающий pull-up резистор номиналом 10 кОм. Плата Arduino имеет встроенные pull-up, однако они очень слабенькие — порядка 100 кОм.

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

Очень популярный китайский датчик, сообщающий температуру и влажность. Дешёвый, имеет простой протокол передачи данных.

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

Используется шина с общим коллектором и подтяжкой к плюсу. Протокол общения таков:

  1. Прижимаем шину к 0 в течение 80мкс, отпускаем шину. Это служит меткой запроса. Переводим контакт ввода-вывода STM32 в состояние «вход».
  2. Датчик откликается удерживанием линии в 1 течение 90мкс, и начинает передавать данные.
  3. Каждый бит — это 0 в течение 50 мкс и 1 в течение 25 или 125 мкс.
  4. Датчик передаёт 2 байта данных влажности, 2 байта температуры и 1 байт — сумма первых 4. Это CRC.
  5. После завершения передачи (около 4 мс) датчик отпускает линию в состояние 1.

Осциллограмма создана прибором Red Pitaya . На графике видны паузы между битами — низкий уровень в течение

50мкс, и биты данных — высокий уровень в течение 25 мкс (передан 0) или в течение 125 мкс (передана 1). Понятно, что раз биты имеют переменную длину, длина всей посылки тоже заранее неизвестна, она будет от 2.7мс (переданы все нули) до 6.5мс (переданы все единицы в байтах данных, crc = 11111100b).

Данные — это просто значение влажности или температуры в десятых долях процента или градуса. Давайте посмотрим на пример:

Пример измерения влажности и температуры на DHT22

В начале видим запрос от МК (длинный ноль в момент 0.25мс), ответ от датчика (длинная единица в 0.3мс), и в 0.9мс начинается передача битов: короткие импульсы высокого уровня — это логический ноль, длинные — логическая единица (кстати, похоже на телеграф и на протокол 1-Wire), пауза между битами — низкий уровень. Для наглядности я разделил байты чёрными линиями; приняли 5 байт с такими значениями:

  1. 00000001b = 1, это старший байт (MSB) значения влажности.
  2. 01011111b = 95, это младший байт (LSB) значения влажности.
  3. 00000000b = 0, старший байт (MSB) температуры.
  4. 11100101b = 229, младший байт (LSB) температуры.
  5. 01000101b = 69, это контрольная сумма (CRC), которая должна быть равна сумме всех байт данных. Проверяем: 1+95+0+229 = 325. Понятно, что 325 в байт не влезет, возьмём модуль по 256 (т.е. отрежем старшие биты) — получилось 69. Всё точно!

Последний шаг: влажность = 1 * 256 + 95 = 351, то есть 35.1% ; температура = 0 * 256 + 229 = 229, то есть 22.9°. Это я объясняю так долго, а на самом деле надо просто запихнуть принятые байты в uint16_t, и он сразу покажет эти цифры

Осталось написать программу для чтения DHT22 на STM32. Для общения с датчиком я использую вывод PA1.

Код может показаться не очень понятным, но по сути всё просто: если состояние входа изменилось и стало 0 — значит, только что пришёл новый бит. Измеряем его длительность, если она короткая (меньше 9 циклов опроса — это экспериментальное значение), значит это 0, иначе это 1. Записываем этот бит в переменную типа int64_t на следующую позицию, с каждым новым битом сдвигаемся в этом числе на 1. После окончания приёма ответа в переменной лежит весь ответ, все 5 байт — 40 бит.

Осталось выделить из этого числа два 16-битных числа: влажность (с 24 бита по 39) и температуру (с 8 бита по 23). Я делаю это так: сдвигаю число вправо на 24 бита и привожу результат к 16 битам — к типу uint16_t. Кстати, того же самого обрезания до 16 бит можно было добиться, сделав И с числом 0xFFFF, но это не так наглядно.

На мой взгляд, этот датчик можно использовать:

  1. системе умного дома
  2. в домашней метеостанции
  3. для автоматического управления вентиляцией в теплицах

Правда мне кажется, что это какой-то очень «дополнительный» датчик, не такой важный как термометр или датчик движения. Что делать-то с полученным значением влажности? Может быть, управлять кондиционером ?

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

А как вы используете DHT22?

Навигация по записям

(3 votes, average: 5,00 out of 5)

Рекомендуем также прочитать
Техническая документация на КЗР (КЗРД, КЗРТ):
Обзор бортового компьютера Лады Гранта
1. Климат–контроль нового поколения с хромированной отделкой (пр-во Mitsubishi. Япония)
Проблемы двигателей Форд Фокус-2 объемом 1,8 л и 2,0 л на холостом ходу