Программа

#include <DS1302.h> //Библиотека часов
#include <LiquidCrystal.h>//Библиотека для работы с дисплеем
#include <DHT.h> //Бибилиотека датчика
#define DHTPIN 8 //Определение пина для получения данных
#define DHTTYPE DHT21 //Определение типа датчика

DS1302 rtc(10, 9, 7); //Часы
Time ti;//Переменная даты
LiquidCrystal lcd(12, 11, 2, 3, 4, 5); //Инициализация дисплея с номерами пинов

int Ventil = 6;//Определение пина для управления вентиляторами
int Lampa220 = 13;//Определение пина для управления реле 220 В для лампы
String temp = ""; //Переменная для вывода температуры
String hum = ""; //Переменная для вывода влажности
DHT dht(DHTPIN, DHTTYPE); //Инициализация датчика
int Water220 = A0;// Увлажнитель воздуха
void setup()
{
Serial.begin(9600);// подключаемся к порту
lcd.begin(16, 2); //Установка количества колонок и строк на дисплее
dht.begin(); //Запуск датчика
pinMode(Ventil, OUTPUT);//вентиляторы
pinMode(Lampa220, OUTPUT);//подсветка
pinMode(Water220, OUTPUT);//увлажнитель воздуха
rtc.halt(false); //Запуск часов
//Установим время, и отключим защиту от записи
rtc.writeProtect(false);
// Если у вас в DS1302 уже сохранено установленное время, то нужно за комментировать
//rtc.setDOW(SATURDAY); // Устанавливаем день недели SATURDAY
//rtc.setTime(15, 02, 00); // Устанавливаем время 20:30:10 (24часа формат времени)
//rtc.setDate(20, 01, 2019); // Устанавливаем число месяц и год
}
void loop()
{
delay(1000); //Задержка 1 секунды
ti = rtc.getTime(); //Заносим время в переменную ti
float h = dht.readHumidity(); //Чтение данных влажности
float t = dht.readTemperature();//Чтение температуры в градусах по Цельсию
if (isnan(h) || isnan(t)) // Проверка, все ли данные корректны
return; //Возврат, если данные некорректно считались
temp = "T" + String(t) + "C"; //Строка температуры
hum = "H" + String(h) + "%"; //Строка влажности
//(Помним, что нумерация колонок и строк начинается с 0)
lcd.setCursor(0, 0); //Установим курсор в первую строку
lcd.print(temp); //Вывод температуры
lcd.setCursor(0, 1); //Ставим курсор на вторую строку
lcd.print(hum);//Вывод влажности
lcd.setCursor(8, 0); //Установим курсор в первую строку на 8 символ
lcd.print(rtc.getTimeStr()); //Печатаем время
lcd.setCursor(8, 1); //Ставим курсор на вторую строку на 8 символ
lcd.print(ti.date); //Печатаем дату
lcd.print( "." ); //Печатаем точку
lcd.print(ti.mon); //Печатаем месяц числом
//Управление гроубоксом
if (ti.hour>=9) {digitalWrite(Lampa220, HIGH);} //Если время 9-00, то включаем лампу посредством реле
if (ti.hour>=21) {digitalWrite(Lampa220, LOW);} //Если время 21-00, то выключаем лампу посредством реле
if (t>=29) {digitalWrite(Ventil, HIGH);} //Если температура больше 29 гр, то включаем вентиляторы
if (t<28) {digitalWrite(Ventil, LOW);} //Если температура меньше 28 гр, то выключаем вентиляторы
if (h<57) {digitalWrite(Water220, HIGH);} //Если влажность меньше 57%, то включаем увлажнитель посредством реле
if (h>=62) {digitalWrite(Water220, LOW);} //Если влажность больше 62%, то выключаем увлажнитель посредством реле
if (ti.min==59 && ti.sec>=40) {digitalWrite(Ventil, HIGH);} //Раз в час включаем вентиляторы на 20 секунд
}

Программа контролирует уровень влажности в гроубоксе в пределах от 57 до 62%. Включает лампу в 9-00 и выключает в 21-00. Если температура повышается выше 29 градусов, то включает вентиляторы и выключает, если температура падает ниже 28 градусов. Раз в час включаются вентиляторы на 20 секунд, для проветривания гроубокса.

0

Изменено:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.