Подключение датчика DHT11/DHT22 к Arduino UNO.

Всем привет, в этой записи я поделюсь с вами тем, как подключить цифровые датчики температуры и влажности DHT11 или DHT22 к контроллеру Arduino UNO.

Цифровые датчики DHT11 и DHT22 используются для измерения температуры и относительной влажности окружающего воздуха. Свою популярность среди любителей реализовывать проекты на arduino (и не только) они завоевали в основном благодаря невысокой цене и неплохому качеству.

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

Сравнительные характеристики цифровых датчиков DHT11 и DHT22:

DHT11 DHT22
Диапазон измеряемой
температуры
0 to 50 ºC +/-2 ºC-40 to 80 ºC +/-0.5ºC
Диапазон измеряемой
влажности
20 to 90% +/-5%0 to 100% +/-2%
Точностьвлажность: 1%
температура: 1ºC
влажность : 0.1%
температура : 0.1ºC
Напряжение питания3 – 5.5 В DC3 – 6 В DC
Потребляемый ток0.5 – 2.5 мА1 – 1.5 мА
Период дискретизации1 секунда2 секунды
Ориентировочная цена$1 — $5$4 — $10

DHT22 лучше чем DHT11, но период измерения у него чуть больше — около 2 секунд. Смотрим характеристики и выбираем тот датчик, который нам подходит больше всего. Мы для своих экспериментов выбрали DHT22.

Распиновка сенсора.

Распиновка датчика DHT22

Всего у датчика 4 контакта. Если вы купте готовый для подключения к ардуино модуль, то у него будет три контакта. Нумерация повернутого к вам «лицом» датчика идет слева на право. Главное при подключении не перепутать полярность! Назначение контактов:

пины DHTназначение
15V
2к любому цифровому GPIO Arduino,
используя 10 КОм резистор
3не используется
4GND

Итак, железо которое нам понадобится для подключения и работы с датчиком (мы выбрали DHT22):

  1. Arduino UNO;
  2. Датчик DHT22;
  3. Резистор номиналом 10 КОм (если мы используем сенсор, а не готовый модуль);
  4. Макетная плата (желательно);
  5. Проводники.
Схема подключения DHT22 к Arduino UNO
Схема подключения DHT22 к Arduino UNO

Купить все необходимое можно в популярном интернет-магазине Aliexpress. Зная распиновку датчика, подключаем его к плате Arduino UNO.

  1. DHT #1 pin — Arduino 3.3-5В;
  2. DHT #2 pin — цифровой вход Arduino, например pin #2;
  3. DHT #4 pin — GND Arduino.

При подключении готового модуля DHT22 к контроллеру Arduino UNO подтягивающий резистор не нужен, на плате модуля он уже смонтирован. Мы такой и используем в нашем примере. Подключение максимально простое:

Подключение модуля DHT22 к Arduino UNO
Подключение модуля DHT22 к Arduino UNO

Теперь для работы с датчиком необходимо установить две библиотеки — «Adafruit Unified Sensor» и «DHT sensor library«, для этого воспользуемся менеджером библиотек в Arduino IDE:

Adafruit DHT
Установка библиотеки Adafruit DHT
Adafruit Unified Sensors
Установка библиотеки Adafruit Unified Sensors

Обязательно после установки библиотек перезагружаем среду разработки Arduino IDE! Остается залить в плату тестовый скетч и убедиться в работоспособности системы. Комментариев в скетче достаточно для того, чтобы понять как работать с датчиком:

// тестовый скетч для работы с различными датчиками DHT 
// Автор ladyada, public domain

#include "DHT.h"
#define DHTPIN 2     // пин к которому подключен датчик

// раскомментируйте строку с вашим датчиком 
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Инициализируем DHT сенсор для 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);
// Пример для инициализации DHT датчика для Arduino Due:
//DHT dht(DHTPIN, DHTTYPE, 30);

void setup() {
  Serial.begin(9600); 
  Serial.println("DHTxx test!");
 
  dht.begin();
}

void loop() {
  // Ждем несколько секунд, необходимо чтобы значения температуры и влажности обновились .
  delay(2000);

  // Считывание температуры и влажности может достигать 250 миллисекунд!
  // Скорость считывания может достигать 2 секунд (это очень медленные сенсоры)
  float h = dht.readHumidity();
  // Считываем температуру в цельсиях
  float t = dht.readTemperature();
  // Считываем температуру в фаренгейтах
  float f = dht.readTemperature(true);
  
  // Если не все данные считались, то выводим сообщение об ошибке.
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  
  Serial.print("Влажность: "); 
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Температура: "); 
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print("Температура фаренгейт: "); 
  Serial.print(f);
  Serial.println(" *F ");
 
}

Если удача была на вашей стороне и вы все правильно сделали, то в мониторе COM порта в Arduino IDE будем наблюдать показания температуры и влажности:

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

У меня не сразу получилось «завести» датчик, и в мониторе COM-порта я наблюдал надпись: «Failed to read from DHT sensor!». Уже начал думать, что с датчиком какие-то проблемы и он не исправен. Перепроверил и прозвонил все контакты, чтобы убедиться в их правильности и надежности. Все тщетно. Решить проблему получилось, поменяв версии библиотек «Adafruit Unified Sensor» и «DHT sensor library» на более ранние. Это можно сделать через менеджер библиотек. Почему сенсор не запускался с новыми версиями библиотек я разбираться не стал. Кто подскажет — буду очень благодарен! Надеюсь, что запись о том как подключить цифровой датчик температуры и влажности DHT22 (DHT11) к контроллеру Arduino UNO будет для Вас полезна. До новых встреч.

Добавлено 04.03.2020. Если Вы столкнулись с проблемой отображения отрицательных температур при использовании датчика DHT22 и Ардуино, то, возможно, вам поможет прочтении записи: Исправление проблемы некорректного подсчета и отображения отрицательных температур датчиком DHT22 при работе с библиотекой DHT sensors library.

Поделиться ссылкой:

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

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