#include <Servo.h>
#define TEMP_SENSOR A4 // Аналоговый вход датчика температуры
#define RELAY_PIN 2 // Пин реле для кондиционера
#define SERVO_PIN 3 // Пин сервопривода
#define SYSTEM_SWITCH A1 // Переключатель системы охлаждения
Servo windowServo;
bool acState = false; // Состояние кондиционера
void setup() {
Serial.begin(9600);
pinMode(TEMP_SENSOR, INPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(SYSTEM_SWITCH, INPUT);
windowServo.attach(SERVO_PIN);
windowServo.write(0); // Створка закрыта
digitalWrite(RELAY_PIN, LOW); // Кондиционер выключен
}
void loop() {
int systemOn = digitalRead(SYSTEM_SWITCH); // Проверяем переключатель системы охлаждения
if (systemOn == HIGH) { // Если система включена
int rawValue = analogRead(TEMP_SENSOR);
float temperature = map(rawValue, 0, 1023, -40, 125); // Пересчёт NTC в градусы
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" C");
// Управление створкой окна
if (temperature >= 33.0) {
windowServo.write(0); // Закрываем окно
if (!acState) {
Serial.println("AC ON"); // Выводим сообщение
digitalWrite(RELAY_PIN, HIGH);
acState = true;
}
}
else if (temperature >= 30.0) {
windowServo.write(90); // Полное открытие окна
if (acState) {
Serial.println("AC OFF"); // Выключаем кондиционер
digitalWrite(RELAY_PIN, LOW);
acState = false;
}
}
else if (temperature >= 27.0) {
windowServo.write(45); // Открытие наполовину
}
else if (temperature >= 22.0) {
windowServo.write(22); // Открытие на четверть
}
else {
windowServo.write(0); // Закрываем окно
}
}
else {
// Если система выключена, закрываем окно и выключаем кондиционер
windowServo.write(0);
digitalWrite(RELAY_PIN, LOW);
acState = false;
}
delay(1000);
}