// --- Библиотеки ---
#include <DHT.h>
// --- Настройки пинов ---
#define DHTPIN 2 // Пин для датчика температуры DHT11
#define FAN_RELAY_PIN 6 // Пин для управления реле вентилятора (KY-019)
#define GAS_SENSOR_PIN A1 // Пин для датчика газа KY-026
// --- Параметры системы ---
#define DHTTYPE DHT11 // Тип датчика DHT
#define TEMP_THRESHOLD_HIGH 26.0 // Температура включения вентилятора (°C)
#define TEMP_THRESHOLD_LOW 25.0 // Температура выключения вентилятора (°C)
// Создаем объект датчика DHT
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("=== СИСТЕМА КЛИМАТ-КОНТРОЛЯ ===");
pinMode(FAN_RELAY_PIN, OUTPUT); // Устанавливаем пин реле как выход
digitalWrite(FAN_RELAY_PIN, LOW); // Изначально вентилятор выключен
dht.begin();
}
void loop() {
// Задержка обязательна для корректного чтения данных с DHT11
delay(2000);
// Чтение температуры
float temperature = dht.readTemperature();
// Проверка на ошибки чтения
if (isnan(temperature)) {
Serial.println("Ошибка чтения данных с DHT11!");
return;
}
// Чтение показаний газового датчика (для информации)
int gasValue = analogRead(GAS_SENSOR_PIN);
// --- ЛОГИКА УПРАВЛЕНИЯ ВЕНТИЛЯТОРОМ ---
bool fanState = digitalRead(FAN_RELAY_PIN); // Текущее состояние вентилятора
if (!fanState && temperature >= TEMP_THRESHOLD_HIGH) {
// Вентилятор выключен И температура достигла порога включения
digitalWrite(FAN_RELAY_PIN, HIGH);
Serial.println("[АВТОМАТИКА] ВЕНТИЛЯТОР ВКЛЮЧЕН из-за высокой температуры.");
} else if (fanState && temperature <= TEMP_THRESHOLD_LOW) {
// Вентилятор включен И температура упала ниже порога выключения
digitalWrite(FAN_RELAY_PIN, LOW);
Serial.println("[АВТОМАТИКА] ВЕНТИЛЯТОР ВЫКЛЮЧЕН. Температура нормализовалась.");
}
// --- ВЫВОД СТАТУСА В МОНИТОР ПОРТА ---
Serial.print("Температура: ");
Serial.print(temperature);
Serial.print(" °C | Порог вкл: ");
Serial.print(TEMP_THRESHOLD_HIGH);
Serial.print(" °C / Порог выкл: ");
Serial.print(TEMP_THRESHOLD_LOW);
Serial.println(" °C");
Serial.print("Статус вентилятора: ");
Serial.println(digitalRead(FAN_RELAY_PIN) ? "ВКЛ" : "ВЫКЛ");
Serial.print("Газ (KY-026): ");
Serial.println(gasValue);
Serial.println("-----------------------------");
}