Проект 14. Автоматическое управление светом в аквариуме
Для регулирования жизни рыбок в воде необходим свет. Устройство предназначено для включения и выключения света в любое время суток в заданное время в ваше отсутствие. Поэтому, чтобы морская фауна не испытывала недостаток в освещенности и чувствовали себя максимально приближена к реальной жизни без вашего надзора, разработано устройство, которое будет делать это за вас.
Описание работы:
Для начала работы подключите питание к Arduino. На индикаторе появится время установленное в датчике реального времени.
Для настройки времени необходим нажать одновременно красную и зеленую кнопку. На индикаторе время остановится, перестанет мигать точка по центру, загорятся две кнопки и красная и зеленая. Далее для изменения времени нажимаем красную, либо зеленую кнопку. При разовом нажатии красной кнопки, минуты увеличивается на один, при удержании красной кнопки минуты увеличиваются пока нажата кнопка. При разовом нажатии зеленой кнопки минуты уменьшаются на один, при удержании зеленой кнопки минуты уменьшаются пока нажата кнопка. Для завершения настройки времени необходимо подождать 2 секунды. На индикаторе время пойдет с заданного времени, а кнопки погаснут.
Для задания времени включения света, необходимо нажать зеленую кнопку. На индикаторе загорится слово «On», а зеленая кнопка загорится. Затем через секунду на индикаторе появится время включения света. По умолчанию установлено «00:00». Для изменения времени включения света нажимаем либо зеленую, либо красную кнопку. При разовом нажатии красной кнопки, минуты увеличивается на один, при удержании красной кнопки минуты увеличиваются пока нажата кнопка. При разовом нажатии зеленой кнопки минуты уменьшаются на один, при удержании зеленой кнопки минуты уменьшаются пока нажата кнопка. Для завершения настройки времени необходимо подождать 2 секунды. На индикаторе пойдет текущее время, а зеленая кнопка погаснет.
Для задания времени выключения света, необходимо нажать красную кнопку. На индикаторе загорится слово «OFF», а красная кнопка загорится. Затем через секунду на индикаторе появится время выключения света. По умолчанию установлено «00:00». Для изменения времени выключения света нажимаем либо зеленую, либо красную кнопку. При разовом нажатии красной кнопки, минуты увеличивается на один, при удержании красной кнопки минуты увеличиваются пока нажата кнопка. При разовом нажатии зеленой кнопки минуты уменьшаются на один, при удержании зеленой кнопки минуты уменьшаются пока нажата кнопка. Для завершения настройки времени необходимо подождать 2 секунды. На индикаторе пойдет текущее время, а красная кнопка погаснет.
Свет включится в установленное время и будет гореть до времени выключения. Тогда когда горит свет можно задавать новые значения включения или выключения света. При этом свет будет гореть до времени отключения в любом случае. Если вы хотите отключить свет раньше, чем планировалось необходимо задать новое время выключения.
В этом проекте, как и в предыдущем, приведено два варианта подключения осветительных приборов, показанные ниже в разделе «Схема сборки».
Нам понадобится:
- Arduino Uno х 1шт.
- Trema Set Shield х 1шт.
- Trema-модуль реле х 1шт.
- Trema-модуль часы реального времени, RTC х 1шт.
- Trema-модуль кнопка со светодиодом, зеленая х 1шт.
- Trema-модуль кнопка со светодиодом, красная х 1шт.
- Trema-модуль четырехразрядный LED индикатор х 1шт.
Для реализации проекта нам необходимо установить следующие библиотеки:
- Библиотека iarduino_4LED для работы с Trema-модуль четырехразрядным LED индикатором.
- Библиотека iarduino_RTC для работы с Trema-модуль часами реального времени, RTC.
- Библиотека EEPROM — для работы с энергонезависимой памятью EEPROM (библиотека входит в стандартный набор Arduino IDE).
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .
Схема сборки:
- Устанавливаем Trema Set Shield в Arduino Uno.
- Устанавливаем Trema-модуль Четырехразрядный LED индикатор во 2 посадочную площадку.
- Устанавливаем Trema-модуль часы реального времени, RTC в 3 посадочную площадку, в верхнюю I2C колодку.
- Устанавливаем Trema-модуль реле в 4 посадочную площадку.
- Вариант 1. Подключаем лампочку как показано на рисунке ниже.
- Вариант 2. Подключаем светодиодную ленту к Источник питания на 12В, через Коннектор с помощью Проводков как показано на рисунке ниже.
Код программы:
Алгоритм работы:
В начале скетча (до кода setup) выполняются следующие действия:
- Подключаем стандартную библиотеку EEPROM.h для работы с памятью EEPROM.
- Подключаем библиотеку iarduino_4LED для работы с Trema-модуль Четырехразрядным LED индикатором.
- Объявляем объект dispLED, с указанием выводов дисплея.
- Подключаем библиотеку iarduino_RTC для работы с Trema-модуль часами реального времени, RTC.
- Объявляем объект time для модуля на базе чипа DS3231.
- Объявляем пины для работы с Trema-модуль реле, Trema-модуль кнопка со светодиодом, красная и Trema-модуль кнопка со светодиодом, зеленая, а так же пины для работы со светодиодами кнопок.
- Объявляем переменные и функции задействованные в скетче.
В коде setup выполняются следующие действия:
- Переводим выводы pinRele для реле, pinKeyGreen для зеленой кнопки, pinKeyRed для красной кнопки в режим выхода.
- Инициируем LED дисплей.
- Инициируем RTC модуль.
- Задаем событие 1.
- Проверяем данные записанные в память EEPROM. Если они не попадают в диапазон времени (для минут от 00 до 59, для часов от 00 до 24), то обнуляем полученные данные.
В коде loop выполняются следующие действия:
- Читаем время с датчика реального времени.
- Событие 1.
- Выключаем светодиоды красной и зеленой кнопки.
- Записываем показания датчика времени. Записываем текущее время (часы и минуты) в переменные
- Устанавливаем максимальную яркость свечения LED индикатора.
- Выводим время на дисплей с помощью функции «ShowTime() «.
- Проверяем совпадает текущее время с временем включения света. Если совпадает, то разрешаем включение света, включаем реле.
- Проверяем событие разрешения света. Если разрешено, то разрешаем переход к событию 7.
- Проверка нажатия зеленой кнопки. Если нажата, то переходим к циклу проверки нажатия красной кнопки. Ждем секунду и если не нажата, то разрешаем переход к событию 5 (Событие разрешение/запрет нажатия зеленой кнопки по умолчанию разрешено). Если нажата, то переходим к событию 2 и запрещаем нажатие зеленой кнопки.
- Проверка нажатия красной кнопки. Если нажата, то переходим к циклу проверки нажатия зеленой кнопки. Ждем секунду и если не нажата, то разрешаем переход к событию 3 (Событие разрешение/запрет нажатия красной кнопки по умолчанию разрешено). Если нажата, то переходим к событию 2 и запрещаем нажатие красной кнопки.
- Разрешаем событие нажатия зеленой и красной кнопки.
- Событие 2.
- Устанавливаем небольшую яркость свечения LED индикатора.
- Включаем светодиоды на красной и зеленой кнопках.
- Изменяем время (увеличиваем либо уменьшаем) с помощью функции «ChangeTime() «.
- Устанавливаем новое время.
- Разрешаем переход в событие 1 с помощью функции «Return() «.
- Событие 3.
- Устанавливаем небольшую яркость свечения LED индикатора.
- Включаем светодиод на красной кнопке.
- Вывод текста «OFF» на индикатор.
- Ждем 1 секунду и разрешаем переход к событию 4.
- Считываем время выключения в переменные времени «hour » и «minut».
- Событие 4.
- Выводим время на индикатор с помощью функции «ShowTime() «.
- Изменяем время (увеличиваем либо уменьшаем) с помощью функции «ChangeTime()».
- Разрешаем переход в событие 1 с помощью функции «Return() «.
- Если разрешен переход в событие 1, то записываем новое заданное время выключения света в переменные выключения света и в память EEPROM.
- Событие 5.
- Устанавливаем небольшую яркость свечения LED индикатора.
- Включаем светодиод на зеленой кнопке.
- Вывод текста «On» на индикатор.
- Ждем 1 секунду и разрешаем переход к событию 6.
- Считываем время включения в переменные времени «hour » и «minut».
- Событие 6.
- Выводим время на индикатор с помощью функции «ShowTime() «.
- Изменяем время (увеличиваем либо уменьшаем) с помощью функции «ChangeTime()».
- Разрешаем переход в событие 1 с помощью функции «Return() «.
- Если разрешен переход в событие 1, то записываем новое заданное время включения света в переменные включения света и в память EEPROM.
- Событие 7.
- Выводим время на индикатор с помощью функции «ShowTime() «.
- Считываем значение времени с датчика реального времени.
- Если текущее время совпадает с временем выключения света, разрешаем переход к событию 1, запрещаем включение света, выключаем реле.
- Если нажата одна из двух кнопок: красная либо зеленая, то разрешаем переход к событию один, а затем переход к событию нажатой кнопки.
- Функция «Return() «. В ней проверяем изменение минут. Если меняются, то обнуляем переменную счета. Если минуты не меняются увеличиваем переменную счета до 150. Как только переменная счета дойдет до 150 разрешаем переход событию 1. Сохраняем новое значение минут в переменную «minutPrev».
- Функция «CheckHour() «. Проверяем выход часов и минут за диапазон времени. Если минуты больше 59, то увеличиваем часы на один и обнуляем минуты. Если минуты меньше 00, то уменьшаем часы на один и устанавливаем минуты на 59. Если часы больше 24, то обнуляем часы, если часы меньше 00, то устанавливаем часы на 23.
- Функция «ChangeTime()». В ней изменяем время (увеличиваем либо уменьшаем). Проверяем нажатие красной/зеленой кнопки одинаковы. Входим в цикл слежения нажатия красной/зеленой кнопки, в нем пока нажата кнопка увеличиваются/уменьшаются минуты, проверяем часы/минуты на выход за диапазон времени, выводим время на индикатор. Проверка разового нажатия красной/зеленой кнопки. Если нажата, то увеличиваем/уменьшаем минуты, проверяем часы/минуты на выход за диапазон времени, выводим время на индикатор.
- Функция «ShowTime() «. В ней преобразуем время целочисленного значения в строковое, добавляя ноль, где это необходимо. А так же выводим раз в пол секунды общее время и мигающую точку по центру, для событий 1 и 7. Для остальных событий выводим время и точку постоянно.
Проекты ардуино аквариум
Основной функционал:
плавное включение-выключение освещения (рассвет-закат) 2 канала + люминесцентные лампы;
контроль температуры (включение выключение обогревателя);
подача жидких удобрений по времени (Микро, Макро, Железо);
контроль системы фильтрации (вкл-выкл по расписанию);
контроль подачи CO2 в аквариум (вкл-выкл по расписанию);
установка часов и календаря;
режим «Профилактики» с возможностью ручного включения-выключения исполнительных устройств (освещение, фильтр, обогрев, CO2);
Также планировалось реализовать автоматическое кормление рыб, посредством управления шаговым двигателем и созданием механической части самой кормушки, но руки пока не дошли, да и памяти и выходов Arduino Nano явно недостаточно.
Итак для сборки АкваКонтроллера нам понадобится:
1. Arduino Nano v 3.0 ATMEGA328P;
2. Модуль часов реального времени DS3231 I2C RTC;
3. LCD display 2004A I2C;
4. Блок реле 5V 4 канала;
5. Датчик температуры DS18B20 водонепроницаемый;
6. Три Дозирующий перистальтических насоса DC 12V;
7. Блок питания или драйвер 12V (для питания самой схемы и светодиодного освещения;
8. DC-DC преобразователь XL6009;
9. Ну и по мелочи: несколько мосфетов, транзасторов, тактильные кнопки 6*6*25 мм, китайская USB зарядка 5V, пищалка (buzzer 12085) и др.
Схема акваконтроллера представлена ниже:
Позже, после сборки схема была несколько доработана (добавлены подтягивающие резисторы в цепи затвора-истока мосфетов для предотвращения ложных запусков перистальтических насосов, рализовна полная гальваническая развязка блока силовых реле с основной схемой для предотвращения помех, и установлены LC-фильтры в цепи питания Ардуины и на нагрузочные розетки исполнительных устройств (особенно на розетку люминесцентных ламп с пускателем). Итоговую схему вы можете наблюдать ниже:
Почти все собрано навесным монтажем с помощью соединительных проводов (продаются такие специально для ардуины). На печатной плате спаяна только силовая часть (мосфеты) и кнопки управления.
Итак, изготавливаем печатные платы:
Припаиваем на платы электронные компоненты:
Выше показана также распайка соединения дисплея с кнопками с основной частью акваконтроллера посредством разъемов USB.
Кнопки 6*6*8 мм, показанные на фото, впоследствии были заменены на более подходящие для корпуса, а именнно вот на такие (6*6*25) :
Далее объединяем в корпус подходящего размера (125х83х32 мм) LCD дисплей и плату с кнопками управления:
Собираем из подручных материалов (ДСП и оргстекло) основной ящик-корпус акваконтроллера:
Оклеиваем корпус самоклейкой, и начинаем собирать основные блоки акваконтроллера в корпусе:
Первоначально у меня розовые полноспектральные светодиоды запитывались от отдельного драйвера на 34 Вольта 700 мА (его видно на 1 фото выше (маленький такой, расположен над USB зарядкой черного цвета, которая предназначена для запитывания блока реле) ), но позже выяснилось что данный драйвер не поддерживает диммирование (светодиоды начинают мигать при диммировании). Поэтому было принято решение заменить данный драйвер на DC-DC преобразователь XL6009, выставленный на выдачу 34 Вольт, и более мощный драйвер 12 Вольт 6.3 А (72 Ватта)(данная модель драйвера диммируется без проблем), от которого и запитывается вся схема, включая силовую часть со светодиодами и светодиодными полосками.
Полноспектральные светодиоды использованы на 3 Вт х 10 штук. Каждый рассчитан на 3.4 Вольта 700 мА. Белые светодиодные COB полосы (6500K), на 12 Вольт, 10-12 Ватт каждая также запитываются от общего источника питания 12В. Вот как выглядят светодиоды и полосы:
Питание к светодиодам освещения у меня подводится с помощью старого советского стереофонического аудиокабеля ( у него 4 отдельных жилы и экран (2 жилы для питания полноспектральных светодиодов, и 2 жилы запаралеленных друг с другом + экранная оплетка для питания белых светодиодных полос (у них повышенная нагрузка по току, поэтому так сделано) ) ). Соединяется кабель с помошью DIN разъема и гнезда 5-контактного (тоже аудио). Ниже показано это соединение + заводка удобрений и CO2 в аквариум:
И вот как выглядит конечная паутина проводов и элементов. Не очень эстетично, но зато работает! :
А вот так смотрятся смонтированные розетки (делал из того что было в наличии дома, поэтому розетки разные, где-то двойные, где-то одинарные) и перистальтические насосы:
Лицевая часть корпуса акваконтроллера:
Удобрения подаются из бутылочек с помощью трубок из под капельницы (Система), купленных в аптеке:
А вот так смотрится дисплей с кнопками управления:
И общий вид на аквариум:
А теперь давайте пройдемся по программной части акваконтроллера. Примерная блок-схема работы программы представлена ниже:
Главное меню Акваконтроллера , его экраны с настройками представлены ниже:
Думаю все понятно и без описания, что да как. Кроме этого еще есть несколько менюшек с настроками часов реального времени, режима «Профилактики» в котором можно вручную включать и выключать освещение (розовое, белое, и люминесцентные лампы), фильтр, обогреватель и подачу CO2. И тестовое окно для проверки работы перистальтических насосов :
Вот скомпилированный скетч в IDE Arduino:
Занимает 30718 байт памяти устройства (99%). Как видите все под завязку!
Ну и вот собственно сам скетч (дождались :)) :
В заключение можно посмотреть видеообзор (общее устройство, основные функции, пункты меню, демонстрация рассвета-заката) данного Акваконтроллера: