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


Измерение температуры и влажности при помощи датчика DHT11. 

Catcatcat_dht-11_150DHT11 недорогой цифровой датчик температуры и влажности. Он использует емкостной датчик влажности и терморезистор для измерения температуры окружающего воздуха, данные выдает в цифровой форме по шине типа 1-wire. В использовании он довольно прост, но требует точного определения длительности временных сигналов, чтобы декодировать данные. Единственный недостаток это возможность получения данных не чаще 1 раза в две секунды.

Особенности. · Температурная компенсация во всем диапазоне работы · Измерение относительной влажности и температуры · Калиброванный цифровой сигнал · Отличная долгосрочная стабильность показаний · Не требуются дополнительные компоненты · Возможность передачи данных на большое растояние · Низкое энергопотребление · 4-контактный корпус и полностью взаимозаменяемы

Детали. Для преобразования данных внутри датчика используется 8-битный микроконтроллер, В процессе производства датчики калибруются и калибровочная константа записывается вместе с программой в память микроконтроллера. Однопроводный последовательный интерфейс дает возможность быстрой интеграции в устройство. Его небольшие размеры, низкое энергопотребление и до-20-метром передачи сигнала, что делает его привлекательным выбором для различных приложений.

Диапазон измеряемых параметров.

Обзор:

Параметр Диапазон измерения Точность Разрешение
Влажность 20-90% ±5% 1
Температура 0-50°С ±2°С 1

Подробные спецификации:

Параметр Условия Минимальное Типичное Максимальное
Влажность
Разрешение   1% 1% 1%
      8 бит  
Стабильность     ±1%RH  
Точность 25°С   ±4%RH  
  0-50°С     ±5%RH
Взаимозаменяемость  полностью взаимозаменяемы
Диапазон измерения  0°С 30%RH   90%RH
   25°С 20%RH   90%RH
  50°С 20%RH   80%RH
Время отклика (в секундах) 1/e(63%)25℃, 1m/s Air 6 10 15
Гистерезис     ±1%RH  
Долговременная стабильность типичная   ±1%RH/year  
Температура    1°С  1°С  1°С
Разрешение   8 бит 8 бит 8 бит
Стабильность     ±1°С  
Точность   ±1°С   ±2°С
Диапазон измерения   0°С   50°С
Время отклика (в секундах)   6   30

Электрические параметры:

Параметр Режим Мин Типовое Макс Ед.изм.
Напряжение питания DC 3 5 5.5 V
Ток потребления Измерение 0.5   2.5 mA
  Ожидание 100   150 uA
  Среднее 0.2   1 mA

Габаритные размеры и подключение:

Catcatcat_dht-11_01a

Питание DHT11 составляет 3-5.5V DC. После подачи питания на датчик, необходимо выдержать паузу длительностью не менее 1 секунды перед началом считывания данных. Для фильтрации напряжения питания можно добавить один конденсатор 0,1 мкФ между Vdd и Vss.

Последовательный интерфейс (Single-Wire Двусторонний)

Весь обмен данными выполняется по одной одному проводу (шине). На шине может присутствовать только один датчик. Для получения высокого уровня используется подтягивающий резистор (5-10 кОм), т.е в пассивном состоянии на шине высокий уровень. Формат обмена данными может быть разделен на три этапа:

1) Инициализации. 2) Преамбула. 3) Передача данных. Инициализация.

Процесс чтения данных начинается с импульса инициализации который формирует микроконтроллер. Он должен установить на шине низкий уровень на время не менее 18 mS, для инициализации  DHT-11.

Catcatcat_dht-11_02n

Преамбула.

Микроконтроллер после формирования импульса инициализации должен сразу перевести порт в режим чтения (режим приема данных). Если датчик готов к передачи данных, он ответит сформировав преамбулу. Один период меандра длительностью ~160 us.

Catcatcat_dht-11_02b

Микроконтроллер получив ответ от датчика, может начать чтение данных.

Передача данных.

Данные представляют собой 5 байт данных, которые читаются по битно микроконтроллером, т.е всего 40 бит.

Catcatcat_dht-11_04

Первые два байта данные влажности (относительная влажность), целая и дробная часть. Третий и четвертый температура (градусы Цельсия), целая и дробная часть и пятый последний байт контрольная сумма, которая равна сумме первых 4 байт. К сожалению хотя и присутствуют байты отвечающие за десятые доли градуса и процента, реально контроллер датчика их не вычисляет (хотя это и понятно при такой точности это бесполезно), поэтому  в них всегда присутствуют нули. Если реально считывать эти байты то мы увидим, например:

bait0 = 41    // влажность bait1 = 0 bait2 = 31    // температура bait3 = 0 bait4 = 72    // контрольная сумма

Но нет худа без добра, если в этих байтах всегда нули, то можно это значение (аналогично как для контрольной суммы) использовать для достоверности передачи данных.

Данные кодируются длительностью высокого уровня в каждом бите, бит начинается стробом низкого уровня длительностью приблизительно 50-54uS, после строба идет высокий уровень, если длительность высокого уровня в пределах 24 uS, то это передается “0”, если в пределах 70 uS – передается “1”.

Бит ‘0 ‘:

Catcatcat_dht-11_09 Бит ‘1 ‘:

Catcatcat_dht-11_10

Catcatcat_dht-11_11 По окончанию передачи данных датчик передает последний строб, устанавливает на шине высокий уровень и переходит в спящий режим.

Логика чтения данных может быть следующая.

Вид передачи полностью:

Catcatcat_dht-11_12

Датчик подключается ко входу контроллера который может формировать прерывания по изменению уровня на входе. Для определения длительности импульса можно использовать таймер микроконтроллера.

Для демо проекта используем плату ILLISSI_B4_primum с установленным микроконтроллером PIC16F1936. Для индикации данные будем выводить, через USB порт на терминал программы AN1310 Microchip.

Catcatcat_dht-11_13

Вариант построение программа для чтения данных с датчика для компилятора MPLAB® XC8 Compiler v1.20. Для измерение длительности мы применим таймер Timer0. А для контроля моментов изменения сигнала на входах будем использовать возможность микроконтроллера формировать прерывания по изменению состояния на входах. Всё декодирование данных будет выполняться в прерывании (благо там минимум работы), поэтому для основной программы остается только дать “толчек” для выдачи данных и обработать их когда данные будут готовы.

Настройка прерывание для работы с датчиком

Функция запуска измерения (её можно в ставить в главный цикл для постоянного получения данных)

Вариант обработки прерываний

Вывод: простой недорогой датчик влажности и температуры, для проектов бытового назначения. [box title=”Файлы для загрузки” color=”#521BDE”] Демонстрационный проект, MPLAB® X IDE v1.85, MPLAB® XC8 Compiler v1.20[/box]


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