// --- Подключение библиотек ---
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// --- Настройки пинов и параметров ---
#define DHTPIN 2 // Пин, к которому подключен датчик DHT11
#define DHTTYPE DHT11 // Тип датчика (DHT11 или DHT22)
#define RELAY_PIN 8 // Пин, к которому подключена кнопка
#define TEMP_THRESHOLD 27 // Порог температуры для включения реле (в градусах Цельсия)
#define String modeText= "" // Режим работы
// --- Инициализация объектов ---
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Адрес I2C дисплея 0x27, 16 столбцов и 2 строки
void setup() {
// Инициализация пинов
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Для модуля с оптоизолятором: HIGH = реле ВЫКЛЮЧЕНО
// Инициализация компонентов
dht.begin();
lcd.init();
lcd.backlight();
// Начальное сообщение на экране
lcd.setCursor(0, 0);
lcd.print("Starting...");
}
void loop() {
// Задержка для стабильного чтения с датчика DHT11
delay(2000);
// Чтение данных с датчика
float temperature = dht.readTemperature(); // Температура в градусах Цельсия
float humidity = dht.readHumidity(); // Влажность в процентах
// Проверка, удалось ли считать данные
if (isnan(temperature) || isnan(humidity)) {
lcd.setCursor(0, 0);
lcd.print("Sensor Error");
return; // Останавливаем выполнение loop() и пробуем снова через 2 секунды
// Управления кнопкой
}
// --- Логика управления увлажнителем ---
if (humidity <30) {
digitalWrite(RELAY_PIN, HIGH);
modeText = "MODE 1";
}
else if (humidity ,50) {digitalWrite(RELAY_PIN, HIGH);
modeText = "MODE 2";
}
else {
digitalWrite(RELAY_PIN, LOW);
modeText = "OFF";
}
// --- Вывод информации на дисплей ---
// Строка 1: Температура и статус режима
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature, 1); // Выводим температуру с одним знаком после запятой
lcd.print((char)223); // Символ градуса (°)
lcd.print("C ");
// Строка 2: Влажность и фактическое состояние пина (для отладки)
lcd.setCursor(0, 1);
lcd.print("H:");
lcd.print(humidity, 0); // Выводим влажность без знаков после запятой
lcd.print("% ");
}
// Вспомогательная функция для обновления статуса реле на экране
void updateRelayStatus(bool isOn) {
lcd.setCursor(0,1); // Устанавливаем курсор в конец первой строки
lcd.print(modeText);
lcd.print(" ");
}