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

Датчики DHT11 и DHT22

Если вы хотите отслеживать климат в своей теплице или данные температуры и влажности в проекте метеостанции, то вам идеально подойдет датчик температуры и влажности DHT11 или DHT22.

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

Сравнение DHT11 и DHT22

DHT11 и DHT22 — два наиболее широко используемых датчика серии DHT. Они имеют одинаковую распиновку, но отличаются по размерам и техническим характеристикам.

Из этих двоих DHT22 стоит дороже и обладает лучшими техническими характеристиками.

DHT22 может измерять температуру от -40°C до +125°C с точностью ±0,5°C, в то время как DHT11 может измерять температуру от 0°C до 50°C с точностью ±2°C.

Кроме того, датчик DHT22 может измерять относительную влажность от 0 до 100% с точностью ±2% (максимум ±5%), в то время как датчик DHT11 может измерять относительную влажность только от 20 до 80% с точностью ±5%.

Вот технические характеристики датчиков:


DHT11

DHT22
Рабочее напряжениеот 3 до 5 Вот 3 до 5 В
Максимальный ток потребления2.5 мА2.5 мА
Диапазон измерения влажностиот 20% до 80%от 0% до 100%
Погрешность измерения влажности±5%±2% (макс. ±5%)
Диапазон измерения температурыот 0°C до 50°Cот -40°C до 80°C
Погрешность измерения температуры±2°C±0.5°C
Частота измерения1 Гц (измеряет каждую секунду)0.5 Гц (измеряет один раз в 2 секунды)
Габаритные размеры12.5мм ⨉ 16мм ⨉ 6мм15.1мм ⨉ 25.1мм ⨉ 7.7мм
ПреимуществаНизкая ценаБолее точный

Несмотря на то, что DHT22 более точен и способен работать в более широком диапазоне температур и влажности, DHT11 полностью превосходит DHT22 в цене, размерах и скорости измерения: DHT11 проводит измерение раз в секунду, а DHT22 раз в две секунды.

Диапазон рабочего напряжения для обоих датчиков от +3 до +5 вольт, при максимальном токе 2,5 мА (во время преобразования).

А вот самое приятное то, что датчики DHT11 и DHT22 взаимозаменяемы. Так что, если вы создаете свой проект с одним из них, вы можете просто отключить его и заменить другим. Потребуется только немного подправить код, но схема подключения останется прежней.

Из чего состоит датчик DHT

Если вы разберете корпус датчика, внутри вы обнаружите чувствительный элемент для измерения влажности и NTC-термистор.

Что внутри у датчиков DHT11 и DHT22

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

Внутренняя структура датчика влажности

Датчик также включает в себя NTC термистор для измерения температуры. Термистор — это тип резистора, сопротивление которого меняется в зависимости от температуры.

Термисторы устроены так, что их сопротивление резко меняется с температурой. Аббревиатура NTC означает «отрицательный температурный коэффициент» (Negative Temperature Coefficient), то есть с повышением температуры сопротивление термистора уменьшается.

График зависимости сопротивления от температуры NTC термистора

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

Распиновка DHT11 и DHT22

Датчики DHT11 и DHT22 относительно просты в подключении. Они имеют четыре контакта:

VCC

Контакт обеспечивает питание датчика. Рекомендуется использовать питание +5В, так как тогда датчик можно разместить на расстоянии до 20 метров. При напряжении питания +3,3В датчик можно разместить на расстоянии до 1 метра. В противном случае падение напряжения приведет к ошибкам измерения.


Data

Контакт используется для связи между датчиком и микроконтроллером.


NC

Не используется


GND

Земля

Подключение датчиков DHT11 и DHT22 к Arduino

Теперь давайте разберемся с подключением к Ардуино.

Подключить датчики DHT к Arduino несложно. Они имеют довольно длинные контакты с шагом 2.54 мм, что позволяет легко подключать их к макетной плате.

Подключите вывод VCC к 5V платы Arduino, а вывод GND — к GND Arduino. Контакт Data подключите для передачи данных к цифровому контакту D2.

Чтобы обеспечить правильную связь между датчиком и микроконтроллером, необходимо также добавить подтягивающий резистор 10 кОм между линией передачи данных Data и питанием VCC (для поддержания высокого уровня сигнала). Если вы используете готовый модуль датчика (например, такой как KY-015), вам не нужно добавлять подтягивающий резистор, поскольку он уже на нем установлен.

Схема подключения DHT11 к Ардуино
Схема подключения DHT22 к Ардуино

Библиотека для работы с датчиками DHT

Датчики DHTxx имеют собственный протокол однопроводной передачи данных. Однако мы не будем рассматривать его в этой статье, а воспользуемся готовой библиотекой DHTlib версии 1.3.6. Скачать библиотеку можно ниже в разделе Загрузки, или через менеджер библиотек в Arduino IDE.

Для информации


Подробнее про адаптер I2C можно прочитать в этой статье.

Чтобы установить библиотеку, перейдите в Инструменты > Управление библиотеками и в поле поиска введите DHTlib. Должна появится одна библиотека. Нажмите на кнопку УСТАНОВКА.

Поиск библиотеки Arduino IDE

Код для вывода показаний в монитор порта

После установки библиотеки скопируйте и вставьте этот код в Arduino IDE. Следующий код выведет значения температуры и влажности в монитор порта.

#include <dht.h>
/* Контакт, к которому подключен датчик  */
#define DATA_PIN 2
/* Создание объекта DHT */
dht DHT;

void setup() 
{
  /* Инициализация последовательного порта */
	Serial.begin(9600);
}

void loop() 
{
  /* Считываем данные с датчика DHT11 */
	int readData = DHT.read11(DATA_PIN);
  /* Считываем данные с датчика DHT22 */
  //int readData = DHT.read22(DATA_PIN);
  /* Получает значения температуры */
	float t = DHT.temperature;
  /* Получает значения влажности */
	float h = DHT.humidity; 

	/* Выводим значения в монитор порта */
	Serial.print("Температура = ");
	Serial.print(t);
	Serial.print(" °C ");
	Serial.print("Влажность = ");
	Serial.print(h);
	Serial.println(" % ");
	Serial.println("");
  /* Задержка 2 секунды */
	delay(2000);
}

После загрузки кода вы должны увидеть следующий вывод в мониторе порта.

Пояснения к коду

Программа начинается с подключения библиотеки DHTlib. После этого мы указываем номер контакта Arduino, к которому подключен вывод данных нашего датчика, и создаем объект DHT.

#include <dht.h>
/* Контакт, к которому подключен датчик  */
#define DATA_PIN 2
/* Создание объекта DHT */
dht DHT;

В функции setup() мы инициализируем последовательную связь.

void setup() 
{
  /* Инициализация последовательного порта */
	Serial.begin(9600);
}

В функции loop() мы используем функцию read11(DATA_PIN) для чтения DHT11. Эта функция принимает в качестве параметра номер контакта данных датчика. При работе с DHT22 необходимо использовать функцию read22(DATA_PIN), для этого вам просто нужно раскомментировать строку int readData = DHT.read22(DATA_PIN); и закомменитировать или убрать int readData = DHT.read11(DATA_PIN);.

  /* Считываем данные с датчика DHT11 */
  int readData = DHT.read11(DATA_PIN);
  /* Считываем данные с датчика DHT22 */
  //int readData = DHT.read22(DATA_PIN);

Теперь мы можем получить значения влажности и температуры, обратившись к свойствам объекта DHT:

  /* Получает значения температуры */
  float t = DHT.temperature;
  /* Получает значения влажности */
  float h = DHT.humidity; 

А дальше выводим значения в порт.

Вывод данных на LCD 1602

Если вы строите метеостанцию или аналогичный проект, то вам понадобится выводить данные на какой-нибудь дисплей, а не на последовательный монитор. В следующем примере мы рассмотрим, как подключить ЖК дисплей к Arduino, чтобы выводить измеренные значения с датчиков DHT11 и DHT22.

Схема покдлючения

Для экономии контактов Ардуино, мы подключим дисплей с помощью адаптера I2C. В этом случае для управления выводом данных на дисплей нам необходимо только два контакта, не считая питания и землю.

Ссылка


Подробнее про адаптер I2C можно прочитать в этой статье.

Схема подключения DHT11, PCF8574, LCD1602, Arduino Nano

Код для Ардуино

Для работы с дисплеем через шину I2C будем использовать библиотеку LiquidCrystal_I2C.

Ссылка


Подробнее про библиотеку LiquidCrystal_I2C можно прочитать в этой статье.

/* Подключаем библиотеки */
#include <dht.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

/* Создание объекта lcd */
LiquidCrystal_I2C lcd(0x27,16,2);

/* Контакт, к которому подключен датчик  */
#define DATA_PIN 2
/* Создание объекта DHT */
dht DHT;

void setup() 
{
  /* Инициализация дисплея */
  lcd.init();
  /* Включаем подсветку */
  lcd.backlight();
}

void loop() 
{
  /* Считываем данные с датчика DHT11 */
	int readData = DHT.read11(DATA_PIN);
  /* Считываем данные с датчика DHT22 */
  //int readData = DHT.read22(DATA_PIN);
  /* Получает значения температуры */
	float t = DHT.temperature;
  /* Получает значения влажности */
	float h = DHT.humidity; 
  /* Выводим температуру на первой строке */
  lcd.home();
  lcd.print("T: ");
  lcd.print(t);
  /* Выводим символ градуса */
  lcd.print(char(223));
  lcd.print("C");
  /* Выводим влажность на второй строке */
  lcd.setCursor(0,1);
  lcd.print("H: ");
  lcd.print(h);
  lcd.print("%");
  /* Задержка между измерениями 2 секунды */
  delay(2000);
}

В результате получилась следующая картина:

Результат подключения датчика DHT11 к Ардуино

И напоследок, сравнили значения, которые выдал датчик DHT11, с термогигрометром ИВА-6.

Замер влажности и температуры

Загрузки

Где купить

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии