#include <DHT.h> // Подключаем библиотеку для работы с датчиком температуры DHT
#include <Servo.h> // Подключаем библиотеку для управления сервомоторм
// Настройка пинов
#define PIR_PIN 2 // Пин для датчика движения
#define LED_PIN 3 // Пин для светодиода
#define DHT_PIN 5 // Пин для датчика температуры
#define TEMPERATURE_THRESHOLD 25.0 // Порог температуры (можно настроить)
#define RELAY_PIN 4 // Пин для реле (управление подачей питания на сервомотор)
DHT dht(DHT_PIN, DHT22); // Инициализация датчика DHT22
Servo fanServo; // Создаем объект сервомотора
void setup() {
pinMode(PIR_PIN, INPUT); // Устанавливаем пин датчика движения как вход
pinMode(LED_PIN, OUTPUT); // Устанавливаем пин светодиода как выход
pinMode(RELAY_PIN, OUTPUT); // Устанавливаем пин для управления реле как выход
Serial.begin(9600); // Инициализируем последовательный монитор для отладки
dht.begin(); // Инициализация датчика температуры
fanServo.attach(9); // Подключаем сервомотор к пину 9
fanServo.write(0); // Устанавливаем начальный угол сервомотора в 0° (выключен)
digitalWrite(RELAY_PIN, LOW); // Изначально реле выключено (питание сервомотора отключено)
}
void loop() {
// Проверка состояния датчика движения
if (digitalRead(PIR_PIN) == HIGH) {
digitalWrite(LED_PIN, HIGH); // Включаем свет
Serial.println("Движение обнаружено! Включение света.");
} else {
digitalWrite(LED_PIN, LOW); // Выключаем свет, если движения нет
}
// Считывание температуры
float temperature = dht.readTemperature();
if (isnan(temperature)) {
Serial.println("Ошибка считывания температуры!");
return;
}
Serial.print("Текущая температура: ");
Serial.print(temperature);
Serial.println("°C");
// Управление реле и сервомотором
if (temperature > TEMPERATURE_THRESHOLD) {
digitalWrite(RELAY_PIN, HIGH); // Включаем реле, подаем питание на сервомотор
fanServo.write(90); // Устанавливаем угол 90°, чтобы запустить вентиляцию
Serial.println("Температура превышает порог! Сервомотор включен.");
} else {
digitalWrite(RELAY_PIN, LOW); // Отключаем реле, питание на сервомотор выключено
fanServo.write(0); // Возвращаемся в 0°, чтобы остановить вентиляцию
}
delay(1000); // Задержка для предотвращения лишних срабатываний
}