#include <Servo.h> // Підключення бібліотеки для роботи з мотором
#include <DHT.h> // Підключення бібліотеки для роботи з датчиком температури та вологості
#define DHT_PIN 8 // Визначення константи для піну, до якої підключений датчик DHT
#define DHT_TYPE DHT22 // Визначення типу датчика DHT
Servo firstServo; // Створення об'єкту Servo для взаємодії із жовтим мотором
Servo secondServo; // Створення об'єкту Servo для взаємодії з оранжевим мотором
Servo thirdServo; // Створення об'єкту Servo для взаємодії із червоним мотором
DHT dht(DHT_PIN, DHT_TYPE); // Створення об'єкту DHT для взаємодії з датчиком температури та вологості
int firstServoPin = 3; // Визначення піну, до якого підключений жовтий мотор
int secondServoPin = 5; // Визначення піну, до якого підключений оранжевий мотор
int thirdServoPin = 11; // Визначення піну, до якого підключений червоний мотор
int relayPin = 12; // Визначення піну, до якого підключене реле
bool isRelayOn = false; // Перевірка, чи реле ввімкнене
void setup() {
firstServo.attach(firstServoPin); // Ініціалізація об'єкту жовтого мотору за допомогою функції attach()
secondServo.attach(secondServoPin); // Ініціалізація об'єкту оранжевого мотору за допомогою функції attach()
thirdServo.attach(thirdServoPin); // Ініціалізація об'єкту червоного мотору за допомогою функції attach()
pinMode(relayPin, OUTPUT); // Налаштування піну, до якого підключене реле на вивід
dht.begin(); // // Ініціалізація об'єкту датчика температури та вологості за допомогою функції begin()
}
void loop() {
float humidity = dht.readHumidity(); // Зчитування вологості із датчика
float temperature = dht.readTemperature(); // Зчитування температури із датчика
isRelayOn = !isRelayOn; // Ввімкнення або вимкнення реле за допомогою bool-змінної
if (isRelayOn) { // Якщо реле ввімкнене
digitalWrite(relayPin, HIGH); // Ввімкнення індикатора на реле
secondServo.write(50); // Визначення положення оранжевого мотору відповідно до індикатора реле
} else { // Якщо реле вимкнене
digitalWrite(relayPin, LOW); // Вимкнення індикатора на реле
secondServo.write(100); // Визначення положення оранжевого мотору відповідно до індикатора реле
}
temperature = map(temperature, -40, 80, 0, 120); // Зміна діапазону визначення температури для коректного положення мотора
firstServo.write(temperature); // Визначення положення жовтого мотору відповідно до значення температури на датчику
thirdServo.write(humidity); // Визначення положення червоного мотору відповідно до значення вологості на датчику
delay(5000); // Виклик функції delay для паузи 5 секунд між отриманням значень температури та вологості із датчика
}