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

Температура и влажность являются одними из важнейших параметров окружающей нас среды. В этом проекте мы будем измерять температуру и влажность окружающей среды и с помощью Arduino выводить их значения на жидкокристаллический (ЖК) дисплей 16х2. Для измерения этих параметров мы будем использовать комбинированный датчик для измерения температуры и влажности DHT11, который может измерять температуру в градусах Цельсия и влажность в процентах.

Измерение температуры и влажности с помощью Arduino: внешний вид конструкции

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

Функционально схема устройства состоит из 3-х основных блоков: первый блок измеряет температуру и влажность с помощью датчика DHT11, второй блок считывает эти значения с выхода датчика и преобразует их в форму, удобную для восприятия, а третий блок отображает значения влажности и температуры на ЖК дисплее. Функциональная взаимосвязь этих блоков представлена на следующем рисунке.

Функциональная взаимосвязь блоков нашего проекта

Работа нашей схемы будет основана на последовательной передаче данных по одиночному проводнику. Вначале Arduino передает стартовый сигнал (то есть чтобы DHT модуль начал работу) DHT модулю, а затем DHT модуль (то есть модуль измерения температуры и влажности) выдает Arduino ответный сигнал, содержащий данные о температуре и влажности. Arduino собирает эти данные, обрабатывает и передает на ЖК дисплей 16×2.

В этом проекте мы будем использовать датчик DHT11. Этот модуль способен измерять температуру и влажность и выдавать их значения на выход в виде калиброванного цифрового сигнала. Этот датчик обеспечивает высокую точность измерений, высокую надежность и стабильность измерений. Принцип действия данного датчика основан на резистивном типе измерения влажности и NTC-типе (NTC — отрицательный температурный коэффициент) измерения температуры. Данный датчик имеет встроенный 8-битный микроконтроллер, что обеспечивает ему быстрый отклик на изменения окружающей среды и приемлемую стоимость. Датчик имеет 4 выходных контакта.

Внешний вид датчика DHT11

Модуль DHT11 работает по принципу последовательной связи по одиночному проводнику. Этот модуль передает данные в виде последовательности импульсов с определенным периодом. Но прежде чем он начнет передавать данные ему нужно подать команду инициализации с Arduino. Весь этот процесс занимает примерно 4 мс. Процесс передачи 40 бит данных будет включать в себя:

8-bit integral RH data + 8-bit decimal RH data + 8-bit integral T data + 8-bit decimal T data + 8-bit check sum (проверочная сумма).

Процесс передачи данных от датчика DHT11 к Arduino

Вначале плата Arduino подает на датчик DHT11 сигнал перепада с высокого уровня на низкий с задержкой 18 мкс чтобы запустить датчик DHT11 в работу. Затем Arduino pull-up (подтягивает ее к Vcc как показано на рисунке) линию передачи данных ждет 20-40 мкс ответа от датчика DHT11. Как только датчик DHT11 обнаруживает сигнал, запускающий его в работу (сигнал старта), он передает ответ в виде сигнала низкого уровня длительностью около 80 мкс. А затем контроллер DHT датчика pull up линию передачи данных и удерживает ее в этом состоянии около 80 мкс пока DHT модуль готовится к передаче данных.

Принцип использования подтягивающего резистора в нашем проекте

Как только на линии передачи данных появилось напряжение низкого уровня это значит что датчик DHT11 передает ответный сигнал на Arduino. Как только этот процесс будет завершен, DHT снова «подтягивает» (pull-up) линию передачи данных на 80 мкс чтобы подготовиться к передаче данных.

Формат данных, передаваемых с DHT на Arduino, для каждого бита начинается с 50 мкс напряжения низкого уровня, а продолжительность напряжения высокого уровня после этого зависит от того какой бит передается — “0” или “1”.

Но если вы мало что поняли в этих процессах, не расстраивайтесь, потому что для Arduino написана специальная библиотека для работы с модулем DHT, которая сводит все операции с этим модулем к очень простым действиям – и вы это наглядно увидите в тексте программы, представленном в конце статьи. А вот если бы вы вместо Arduino использовали бы, к примеру, микроконтроллер AVR, то вам все описанные операции пришлось бы программировать вручную.

В рассмотренных процессах весьма важным является правильный выбор значения подтягивающего (pull up) резистора. Поскольку мы располагаем датчик DHT на расстоянии менее чем 20 метров от Arduino, то подтягивающего резистора номиналом 5 кОм будет достаточно. Если же мы будем располагать датчик DHT на расстоянии более 20 метров, то в этом случае необходимо использование соответствующего значения подтягивающего резистора.

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема измерения температуры и влажности с помощью ArduinoЖК дисплей в представленной схеме используется для отображения значений температуры и влажности и напрямую подсоединен к плате Arduino в 4-битном режиме. Контакты ЖК дисплея RS, EN, D4, D5, D6 и D7 подсоединены к цифровым контактам Arduino 2, 3, 4, 5, 6 и 7. Датчик DHT11 подсоединен к цифровому контакту 12 Arduino с помощью подтягивающего резистора 5 кОм.

Исходный код программы

В начале программы подключим библиотеки, необходимые для работы с датчиком DHT11 и ЖК дисплеем.

#include<dht.h>
#include<LiquidCrystal.h>

Затем определим контакты к которым подключен ЖК дисплей и датчик DHT и инициализируем их все в секции setup программы (скетча). Затем в секции loop мы с помощью функции dht считываем данные с датчика DHT и затем используем ряд dht функций чтобы извлечь из этих данных температуру и влажность и отобразить их на ЖК дисплее.

Код программы для считывания значений влажности и температуры с датчика DHT11

Символ градуса на экране ЖК дисплея будет формироваться, используя известное отображение его в виде символа.

byte degree[8] =
{
0b00011,
0b00011,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};

Далее приведен полный текст программы.

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
727 просмотров

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

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