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

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

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

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/239-arduino-datchik-temperatury-i-vlazhnosti-dht22-ventilyator/images/arduino-datchik-temperatury-i-vlazhnosti-dht22-ventilyator-1.jpg

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

Расположение выводов (распиновка) датчика DHT22 можно видеть на приведенном ниже изображении.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/239-arduino-datchik-temperatury-i-vlazhnosti-dht22-ventilyator/images/arduino-datchik-temperatury-i-vlazhnosti-dht22-ventilyator-2.png

Далее приведена схема подключения датчика температуры и влажности DHT22 и вентилятора к плате Arduino UNO. Как мы видим, датчик DHT22 подключается к порту 2 платы Arduino. Сигнал на управление вентилятором поступает с порта 4 на биполярный транзистор NPN-типа BC547. Резистор 1 КОм нужен для ограничения тока на базе транзистора. Также не забудьте поставить сопротивление 10 КОм между первой и второй ножками датчика DHT22.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/239-arduino-datchik-temperatury-i-vlazhnosti-dht22-ventilyator/images/arduino-datchik-temperatury-i-vlazhnosti-dht22-ventilyator-3.png

Вентилятор начинает вращаться, когда уровень влажности поднимается выше 60% или температура становится больше 40°C. Но вы, конечно же, можете изменить эти значения в коде. Для работы с датчиком используется библиотека DHT library от Adafruit.

Ниже приведен скетч для Arduino, позволяющий управлять вентилятором в зависимости от температуры и влажности в помещении.

#include "DHT.h"

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

int maxHum = 60;
int maxTemp = 40;

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  pinMode(fan, OUTPUT);
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  // ждем пару секунд перед началом измерений
  delay(2000);

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

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

  if(h > maxHum || t > maxTemp) {
      digitalWrite(fan, HIGH);
  } else {
     digitalWrite(fan, LOW);
  }

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C ");

}

Вы можете менять значения maxHum (для влажности) и maxTemp (для температуры), если хотите изменить пороги запуска вентилятора. Вместо вентилятора можно использовать реле, если нужно подключить нагрузку с питанием от большего напряжения. И не забудьте соединить резистор 10 КОм между выводом питания (Vcc) и выводом данных (Data) датчика DHT22.