#include "LiquidCrystal_I2C.h" // підключаємо бібліотеку для дисплею
#include "DHT.h" //підключаємо бібліотеку для сенсора DHT22
// задаємо параметри дисплею
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define DHTPIN 5 // пін до якого приєднано датчик DHT22
#define DHTTYPE DHT22 // визначення типу датчика
DHT dht(DHTPIN, DHTTYPE); // ініціалізація датчика
#define relayModule 11 // до 11 цифрового піна підлючене реле
int light; // змінна, що відповідає за зчитуваний сигнал з оптичного сенсора
void setup() {
Serial.begin(9600); //увімкнути компорт на швидкості 9600 бод
pinMode(relayModule, OUTPUT); // визначаємо пін як на вихід
// ініціюємо дисплей та вмикаємо задню підсвітку
lcd.init();
lcd.backlight();
dht.begin(); // запуск датчика
}
void loop() {
// зчитаємо сигнал з фоторезистора
light = analogRead(A0);
// сигнал від фоторезистора подається від 8 до 1015
// де значення 8 відповідає за максимальне освітлення, а 1015 - мінімальне
// при бажанні значення можна масштабувати за допомогою функції map
float h = dht.readHumidity(); // зчитуємо вологість
float t = dht.readTemperature(); // зчитуємо температуру в цельсіях
float f = dht.readTemperature(false); // не зчитуємо температуру в фаренгейтах
// виводимо інформацію про температуру та вологість на дисплей
lcd.setCursor(0, 0);
lcd.print("T=");
lcd.print(t);
lcd.print(" ");
lcd.print("H=");
lcd.print(h);
// 671 і вище сигнал відповідає за рівень освітленності вночі (0 - 40 лк)
if (t >= 20.00 && light < 671) {
digitalWrite(relayModule, HIGH);
}
// 670 і нижче сигнал відповідає за рівень освітленності вдень (41 і вище лк)
else if (t >= 24.00 && light >= 671) {
digitalWrite(relayModule, HIGH);
}
// гістерезис на два градуси вдень
else if (t <= 18.00 && light < 671) {
digitalWrite(relayModule, LOW);
}
// гістерезис на два градуси вночі
else if (t <= 22.00 && light >= 671) {
digitalWrite(relayModule, LOW);
}
// умова для виводу часу доби на дисплей
if (light >= 671) {
lcd.setCursor(2, 1);
lcd.print("Time: Night");
}
else {
lcd.setCursor(2, 1);
lcd.print("Time: Day");
}
// затримка на мс
delay(100);
}