Программа

#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 секунд, для проветривания гроубокса.


Изменено:

Гроубокс своими руками: 23 комментария

  1. Дешево, «сердито», просто. Отличный «гайд» для самосборки!
    Только вот двух вентиляторов (по моему опыту), будет недостаточно при добавлении дополнительного освещения, поэтому для желающих повторить, совет:
    Ставьте по 3 вентилятора на вдув/выдув (если компьютерные) — при средних оборотах, почти не шумят, а воздуха прогоняют больше. Можно поставить пару недорогих канальных вентиляторов, запитав их через регуляторы оборотов (недорогие китайские или SSD с управлением по ШИМ).
    Андрей, скажите пожалуйста, где Вы купили крепления для подвесов на лампу? Скажите хотя бы, как они называются. Уже давно ищу!

  2. Двух компьютерных вентиляторов в моем проекте хватает. Я подбирал вентиляторы, а не взял первые попавшиеся. Я бы привел расчеты выбора, но на данный момент нет расчетов под рукой. Вентиляторы были Xilence XF039. Могу только сказать, что благодаря этим вентиляторам, воздух обновляется примерно за 16 секунд. Ночью вентиляторы не доставляют дискомфорта.

    У лампы уже были крепления для подвеса. Но для крепления в гроубоксе я использовал обычные металлические уголки, купленные в магазине крепежа.

  3. Надо-бы перепродумать систему вентиляции, и сделать регулируемый выход и входа воздуха. Также нужны споры дикой травы -для качественного урожая…

    • Нет предела совершенству)) Регулировать скорость вращения вентиляторов можно через ШИМ. Нужно только немного изменить программу. На днях подумал над тем, чтобы придумать механизм закрытия вентиляционных отверстий и по возможности сделать нагрев воздуха в гроубоксе, т.к. он у меня стоит на подоконнике, а зимой холодно и холодный воздух от окна попадает в гроубокс. Если что-то придумаю, то обязательно опубликую)

  4. Отличный ящик, отличная статья. Спасибо. Буду делать, когда более неотложные дела закончу (если такое в принципе возможно :))

    На счет управления вентиляционными отверстиями. Тоже периодически ломаю голову на эту тему (применительно к теплице) и на просторах инета увидел отличное решение: вертикальная компоновка окон. Для движения задвижкой ставится двигатель со шпилькой (что-то типа ходовой гайки в CNC станках), а вместо подвижного стола — сама шторка окна. Получается компактно и автоматично 🙂 Для небольших отверстий, на мой взгляд, это самое то. Но сам еще не успел проверить на практике.

  5. Кто может подсказать или показать наглядно с дисплея 2 резистора выходят как их подключать, и с часов тоже резистор как его подключать?

    • А в чем сложность? На фото, где коробка со всей электроникой, видно как все GND (белые и синие провода) соединены с помощью клеммной колодки.

  6. Есть вариант сборки без фанеры и ДСП? Просто обшить каркас пенопластом и утеплителем ?имеет право на жизнь?

    • А почему бы и нет) Мой первый гроубокс был из корпуса, обтянутого изнутри и снаружи утеплителем с фольгой. А если место есть, то можно использовать старый шкаф))

      • Привет! Автор, выложи пожалуйста библиотеки к скечу, перебрал уже кучу, рабочий код править не хотелось бы…

  7. На перемены резистор лучще добавить постоянный в 1 Ком, у меня коротыш получился ( испугал падла, провода приварились к макетке, думал пожог электронику, ну пронесло лишь испорченным патенциометром, и ещё не могу понять как Ардуино сравнивает на больше или равно, время?… Что то запара у меня с D13…?

    • Проверка проходит в теле функции loop, она обновляется много раз в секунду если реальное время больше или равно чем 59 минут 40 секунд вентилятор включен в остальное время выключен. То есть по достижению 00:00 он перестанет соответствовать истине.

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

Ваш адрес email не будет опубликован.

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