Датчики температуры и влажности чрезвычайно полезны при построении систем контроля климата. В данном случае мы просто подключим данный датчик к плате Arduino UNO, и понаблюдаем за значениями.

Вместо DHT-22 можно взять DHT-11, но у используемого в данном случае датчика шире диапазон измерения температуры (от -40°C до +80°C) и влажности (от 0 до 100%). Также он имеет цифровой выход (Single-bus), что увеличивает точность считывания.

 

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

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

 

Схема подключения датчика DHT22 и вентилятора к Arduino:

Схема подключения датчика DHT22 и вентилятора к Arduino

 

Скетч

Для работы скетча понадобится установить библиотеку DHT, распаковать в папку library.

#include "DHT.h"

#define DHTPIN 2     // вывод, к которому подключается датчик
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  delay(250);

  // считывание температуры или влажности занимает примерно 250 мс!
  // считанные показания могут отличаться от актуальных примерно на 2 секунды (это очень медленный датчик)
  float h = dht.readHumidity();
  // Считывание температуры в цельсиях
  float t = dht.readTemperature();

  // проверяем, были ли ошибки при считывании и, если были, начинаем заново
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  //выводим информацию в Монитор последовательного порта
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C ");
}

 

Результат работы DHT-22 в мониторе порта

dht22 mon

Комментарии   

-1 # Марьян 29.10.2016 02:56
Спасибо . Всё работает :-)
Ответить | Ответить с цитатой | Цитировать
+2 # Shurovik 01.05.2017 20:40
А чтобы получить значения без десятичных знаков, замените float на int
Ответить | Ответить с цитатой | Цитировать
0 # Григорий 10.09.2017 14:18
Заглянул в библиотеку. Я с ардуино почти не ковырялся, как-то на более тяжелых контроллерах сижу. Возник вопрос, на который Вы, возможно, сможете ответить.
void DHT::begin(void) {
// set up the pins!
pinMode(_pin, INPUT);
digitalWrite(_pin, HIGH);
_lastreadtime = 0;
}

Если конфигурируем пин на вход, то зачем в него писать единицу? Что это дает?
Ответить | Ответить с цитатой | Цитировать
+1 # Mishel 30.10.2017 13:37
Включаем на входе подтягивающий к питанию резистор.
Ответить | Ответить с цитатой | Цитировать
0 # Григорий 10.09.2017 14:32
Мне кажется, что ::begin должна включать кусок из ::read, а не конфигурировать на вход с последующей установкой в единицу:
// now pull it low for ~20 milliseconds
pinMode(_pin, OUTPUT);
digitalWrite(_pin, LOW);
delay(20);
cli();
digitalWrite(_pin, HIGH);
delayMicroseconds(40);
pinMode(_pin, INPUT);

Спецификации чипа не читал, но то, что там сейчас накодировано, для меня выглядит странно.
Ответить | Ответить с цитатой | Цитировать
0 # Григорий 30.10.2017 13:47
Цитирую Mishel:
Включаем на входе подтягивающий к питанию резистор.

Внутренний?
Там же внешний pull-up нарисован на 10кОм.
Ответить | Ответить с цитатой | Цитировать

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


Защитный код
Обновить