Загрузка данных


// --- Библиотеки ---
#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("-----------------------------");
}