воскресенье, 29 октября 2017 г.

Подключение и сравнение температурных датчиков DHT11 и DHT22

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

DHT11 и DHT22 (AM2302), пожалуй, наиболее популярные датчики температуры и влажности для Ардуино. Они содержат терморезистор, емкостный датчик влажности и простенький контроллер, который считывает с них аналоговые значения и выдает результат в виде цифрового сигнала. Датчики имеют следующие характеристики:


DHT11 (Datasheet)
  • Напряжение питания 3,5 ~ 5,5В
  • Потребляемый ток не более 0,3мА
  • Диапазон температур 0 ~ 50°C
  • Погрешность измерения температуры ±2°C
  • Диапазон влажности 20 ~ 80%
  • Погрешность измерения влажности 5%
  • Разрешение шкалы температуры и влажности 1°C и 1%RH соответственно
  • Время отклика 1с

DHT22 (Datasheet)
  • Напряжение питания 3,5 ~ 5,5В
  • Потребляемый ток не более 1,5мА
  • Диапазон температур -40 ~ 80°C
  • Погрешность измерения температуры ±0,5°C
  • Диапазон влажности 0 ~ 100%
  • Погрешность измерения влажности 2 ~ 5%
  • Разрешение шкалы температуры и влажности 0,1°C и 0,1%RH соответственно
  • Время отклика 2с
DHT22 имеет более привлекательные характеристики, что сказывается на его цене: стоит он в 2-3 раза дороже чем DHT11. Оба датчика достаточно медленные, но это не мешает использовать их в большинстве любительских проектов. 

DHT11 DHT22 pinout
Датчики имеют 4 вывода: 2 для питания, 1 сигнальный и 1 вывод не используется. В продаже часто встречаются в виде модулей, у них только 3 контакта и они содержат подтягивающий резистор для сигнального вывода. AM2302 может выпускаться как в стандартном корпусе (на фото выше), так и в увеличенном с тремя проводами. Если вы используете не модуль, а отдельный датчик, то вывод DATA следует подтянуть к +5В резистором на 5,1-10кОм. Ниже показана схема подключения DHT11 к Ардуино, DHT22 подключается точно так же.


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

Я для работы с датчиками использую библиотеку DHT sensor library от Adafruit. Кроме нее потребуется установить Adafruit Unified Sensor Library. Это можно сделать как вручную, так и через менеджер библиотек в IDE Ардуино (меню Скетч - Подключить библиотеку - Управлять библиотеками... Для быстрого поиска нужной библиотеки воспользуйтесь фильтром). После установки библиотек можно открыть пример DHTtester (скетч также доступен ниже), указать тип используемого датчика (DHT11, DHT22 или DHT21), при необходимости изменить пин для вывода DATA и прошить скетч в Ардуино. Результат работы будет доступен в мониторе порта.

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

// Раскомментируйте строку в соответствии с используемым датчиком
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

DHT dht(DHTPIN, DHTTYPE);

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

  dht.begin();
}

void loop() {
  // Пауза 2 секунды между опросами датчика
  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;
  }

  // Вычислим индекс жары (Heat index) по Цельсию
  float hic = dht.computeHeatIndex(t, h, false);
  // и по Фаренгейту
  float hif = dht.computeHeatIndex(f, h);

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");
}

Результат работы DHTtester c DHT11
Результат работы DHTtester c DHT11

Что выбрать DHT11 или DHT22?

Некоторое время я использовал DHT11 для измерения температуры в помещении и мой термометр мог показать сначала 20 градусов, в следующий момент 19, затем 22. Да и в принципе показания были явно занижены, возможно, эта проблема связана с неправильной калибровкой датчика. После его замены на DHT22 термометр стал показывать адекватные значения, они стали более стабильными. Я провел небольшой тест для сравнения обоих датчиков: в течение дня измерял температуру и влажность, затем по результатам измерений построил графики. Если даже не брать в расчет то, что показания DHT11 были ниже реальных значений, его график получился ломаным, с постоянными перепадами до 3 градусов. Для DHT22, напротив, график получился очень плавным, разброс составлял 0,1 градуса. Аналогично с графиками влажности. Поэтому мое субъективное мнение - лучше немного переплатить за DHT22, зато вы получите значительно более точный и стабильный датчик. DHT11 имеет смысл использовать лишь в том случае, если требуется максимально сэкономить на цене устройства и при этом точность измерений не так критична.

Сравнение температурных датчиков DHT11 и DHT22

Комментариев нет:

Отправить комментарий