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

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

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

Вентилятор начинает вращаться, когда уровень влажности поднимается выше 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.
© digitrode.ru