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

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

В данной статье рассмотрим один из таких датчиков, а именно DHT11. Данный датчик подобен по функционалу с датчиками SHT1x/SHT7x фирмы SENSIRION, но значительно дешевле. В нем так же заложена возможность калибровки цифрового выходы для температуры и влажности.

В работе датчик DHT11 использует собственный протокол 1-Wire. В статье подробно рассмотрим вопрос обмена данными датчика DHT11 с микроконтроллером с PIC16F628A по протоколу 1-Wire. Задачу поставим минимальную, а именно принятие значений температуры и влажности от датчика DHT11 и отображения их на ЖК-дисплее.

монтажная плата для датчика DHT11

О датчика DHT11

Датчик DHT11 изготовлен в пластиковом корпусе, имеет четыре вывода расположенных в один ряд. Напряжение питания составляет от 3,5 до 5,5 вольт. Датчик способен измерять температуру от 0 — 50 градусов Цельсия с точностью ± 2 и относительную влажность в пределах от 20 — 95% с точностью 5%.

фото датчика DHT11

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

Следующие временные диаграммы описывают протокол передачи данных между микроконтроллером PIC16F628A и датчиком DHT11. Микроконтроллер (МК) инициирует передачу данных путем отправки сигнала «Старт». Для этой цели данный вывод МК должен быть сконфигурирован на выход. Микроконтроллер PIC16F628A сначала переводит линию в состояние низкого уровня, по крайней мере на 18 мсек, а затем переводит ее в высокое состояние на 20-40 мксек, прежде чем МК освобождает линию. Далее, датчик реагирует на сигнал «Старт» от микроконтроллера PIC16F628A, отправив низкий уровень сигнала длительностью 80 мксек, а затем высокий уровень такой же продолжительностью.

Необходимо отметить, что после отправки сигнала «Старт», вывод микроконтроллера должен быть переведен в режим входа для принятия ответа от датчика.

После обнаружения сигнала отклика от датчика, МК должен быть готов к приему данных от датчика. Датчик посылает 40 бит (5 байт) данных, непрерывно в линию передачи данных. Следует отметить, что во время передачи байта, датчик посылает старший значащий бит первым.

диаграмма обмена стартовым сигналом

«Сигнал «Пуск» и ответ датчика»

Данные от датчика (40 бит) имеет следующую структуру:

Данные (40 бит) = целое число байта RH + десятичное число байта RH + целое число байта Temp. + десятичное число байта Temp. + байт контрольной суммы.

Для датчика DHT11, десятичные байты измерения температуры и влажности всегда равны нулю. Таким образом, первый и третий байт полученных данных фактически дают числовые значения измеренной относительной влажности (RH) и температуры (Temp.). Последний байт является байтом контрольной суммы, который используется, чтобы убедиться, что передача данных произошло без каких-либо ошибок. Если все пять байтов передаются успешно, то байт контрольной суммы должен быть равен последним 8 битам суммы первых четырех байтов, т.е.

Контрольная сумма = последние 8 бит (целое число байта RH + десятичное число байта RH + целое число байта Temp. + десятичное число байта Temp.)

Теперь давайте поговорим о важной вещи, а именно о сигналах для передачи «0» и «1». Чтобы отправить бит данных, датчик сначала переводит линию в низкий уровень на 50 мс. Затем если нужно отправить «0», то датчик переводит линию в высокое положение на 26-28 мкс, или 70 мкс, если необходимо передать «1». Таким образом ширина положительного импульса несет в себе информацию о «0» и «1».

диаграмма сигала "0" и "1"«Разница в сигналах «1» и «0»

обмен данными«Обобщенная картина обмена данными»

В конце последнего переданного бита, датчик переводит линию передачи данных в низкое положение на 50 мсек, а затем освобождает его. Для датчика DHT11 требуется внешний подтягивающий резистор, который должен быть подключен между выводами Vcc и линии передачи данных, таким образом, в состоянии ожидания сигнал на линии данных всегда высокий. После окончания передачи данных и отпускании линии данных, датчик DHT11 переходит в режим низкого энергопотребления, пока новый сигнал «Пуск» не поступит от микроконтроллера.

Принципиальная схема подключения DHT11

Схема сопряжения датчика DHT11 с микроконтроллером PIC16F628A и ЖК с контроллером HD44780. Микроконтроллер работает на частоте 4,0 МГц, используя внешний резонатор, включенный между OSC1 (16) и OSC2 (15) контактами.

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

Использование частоты в 4,0 МГц позволяет упростить расчеты временных интервалов, так как в этом случае 1 машинный цикл становится равным 1 мксек. Информация о синхронизации будет использоваться для расчета ширины импульса принимаемого от датчика данных, таким образом мы можем определить передачу «1» или «0».

Программное обеспечение

Составить программное обеспечение для датчика DHT11 является немного более сложным, чем сама аппаратная часть, из-за условий синхронизации для «1» и «0». Подпрограмма для инициализации датчика DHT11 и чтения 40-бит данных в определенной последовательности написана в mikroC Pro для PIC.

Для отслеживания ширины принятого импульса данных, а именно, чтобы определить, является ли принятый бит «1» или «0» использован модуль Timer0. Когда обнаруживается переход сигнала с низкого уровня на высокий в начале любого бита данных, TMR0 очищается и запускается. Поскольку тактовая частота составляет 4,0 МГц, приращения TMR2 на 1 происходит каждую 1мксек. TMR0 останавливается всякий раз, когда пульс данных снова становится низким. Значение регистра TMR0 дает ширину импульса данных в мксек.

Возьмем 40мксек как порог для определения «0» и «1». Если TMR0 больше 40, это означает, что получен бит «1», иначе «0». Ссылка на скачивание полного исходного кода находится в конце статьи. Полный исходный код написан на mikroC Pro для PIC . Он может быть легко адаптирована к любой другой платформе, но помните, что если вы используете другую тактовую частоту, вы должны изменить работу таймера TMR0.

Точность DHT11 не так хороша, как у датчиков серии SHT1X/7X SENSIRION, но зато он позволяет радиолюбителю просто и недорого определить, в рамках одного устройства, относительную влажность и температуру.

Скачать прошивку (скачено: 31)

http://embedded-lab.com/blog


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

Ваш электронный адрес не будет опубликован.

*


\n