Лето – сезон отпусков, а дома конечно же имеются разные комнатные растения, которые надо бы периодически поливать. Для этих целей и собрана схема автомата полива.
Озаботился сделать себе автомат полива цветов и прежде чем делать свою разработку, решил поискать что-то подобное в интернете. Мои поиски привели на разные проекты, но один мне очень понравился своей простотой и удобством настройки. Ещё одно преимущество, что данный автомат собран не на платформе Ардуино, а на маленьком микроконтроллере ATTiny13A. Купил как-то 5 шт. на АлиЭкспрессе, ещё по средней цене, хотел маленькие проекты попробовать сделать на этом микроконтроллере. Поэтому данный проект мой первый опыт в программировании и использовании ATTiny13A.
У автора есть готовый файл в .HEX, что облегчает повторение проекта. Алгоритм работы мне полностью подходит, поэтому в программе что-то менять не буду и загрузил данный файл сразу в микроконтроллер.
Программировал ATTiny13A с помощью USBasp программатора, покупал его для ремонта тестера компонентов LCR-T4, через программу AVRDUDE_PROG_v3.3. Попутно замечу, что на программаторе USBasp установил перемычку JP3, тогда частота программирования программатора уменьшается и он более стабильно считывает и программирует данные на микроконтроллеры.
ATTiny13A у меня в корпусе DIP-8, поэтому на АлиЭкспрессе купил небольшую платку с панелькой. Платка похожа на Digispark и стоит около 28...36 P, к её контактам как раз подходит колодка с 6-ю пинами программатора.
Можно сделать свою плату, собственно нужна всего лишь панелька под DIP-8 и 6 контактный штырьковый разъём, для подключения программатора. Используются контакты 6(MISO), 7(SCK), 1(RESET), 8(VCC), 5(MOSI), 4(GND). Между контактами 1(RESET) и 8(VCC) запаять резистор на 10 кОм и между 8(VCC) и 4(GND) установить конденсатор на 10 мкФ.
Фьюзы не менял, использовал заводские.
Моя схема несколько отличается от схемы автора проекта. Отличие небольшое. Добавил RC фильтр по питанию, так как от работы мотора идут наводки на микроконтроллер. Подключение насоса и самого ATTiny13A разделены цепочкой C1, C2, R1, C3, C4. Ещё одно небольшое отличие в резисторе R7. Считаю, что этот резистор необходим.
Если мотор насоса расчитан на питание от 3...4 В, то для этого лучше воспользоваться схемой показанной ниже.
Если мотор насоса расчитан на работу от 5...6 Вольт, как у меня, то для большей эффективности использую DC-DC преобразователь на необходимое напряжение. Иначе насос с трудом проталкивает воду по маленьким трубочкам. Преобразователь любой подходящий. У меня самодельный на базе микросхемы MT3608, есть такие же покупные. На схеме не показан модуль зарядки аккумулятора, он подключается параллельно контактам батареи.
Ещё одно дополнение, на мой взгляд повышающее удобство использования устройства, кнопка SB2 - RESET/Ручной полив
. С помощью этой кнопки происходит перезагрузка программы в начальное состояние. Если необходимо сделать настройку программы, то можно не выключать устройство и ждать когда разрядятся конденсаторы C1-C4, а можно предварительно нажать на кнопку SB1 и, удерживая её, кратковременно нажать на кнопку SB2 – программа перейдёт в режим настройки и светодиод PROG будет работать, указывая на режим выбора. Так же при необходимости ручного принудительного полива, достаточно кратковременно нажать на кнопку SB2 и произойдёт переход программы в начальное состояние и включится работа насоса по поливу растения. Можно несколько раз поливать растение до необходимой начальной влажности почвы, а дальше программа будет поливать растение уже по заданным параметрам.
Программа имеет два режима:
При включении питания устройства (или при кратковременном нажатаии на кнопку SB2) удерживайте кнопку SB1, тогда программа переходит в режим 1 – настройки параметров полива. Светодиод HL1 начинает мигать один раз, два раза, три раза, что означает интервал полива в днях соответственно. Если вы выбираете, к примеру, интервал полива через два дня, то после мигания светодиода два раза отпустите кнопку. Значение интервала равное два дня будет записано в память.
Далее светодиод HL1 гаснет и включается сигнал на подачу воды. Включаются светодиод HL2 и мотор насоса и продолжается их работа до тех пор, пока не будет снова нажата кнопка SB1. После этого подача воды прекратится и продолжительность полива будет записана в память микроконтроллера. Завершение записи в память сигнализируется многократным промаргиванием светодиода HL1.
После этого программа переходит в режим 2 – работа по поливу и через заданный интервал в днях будет периодически поливать растения.
Если выключить питание, то все заданные ранее интервал и продолжительность полива сохраняются в EEPROM, и после очередного включения питания устройство сразу начинает работать, используя эти установки.
Начальную проверку работоспособности схемы сделал на макетной панеле. В качестве источника питания использовал литий-ионный аккумулятор формата 18650. Для воды использовал контейнер с крышкой на 3,3 литра. В воду положил маленькую таблетку серебра. Трубки и тройники куплены в магазине Живой мир
в отделе для аквариумов.
Светодиоды использовал красные, они имеют меньший ток потребления при высокой яркости.
Растения стоят на лоджии. Пока схема собрана в макетном варианте, но по мере свободного времени, имею намерение сделать плату и поместить всё устройство в корпус. Придать, так сказать, товарный вид .
Появилось время и разработал печатную плату по второй схеме, с использованием преобразователя DC-DC. Вначале плату разрабатывал только с одной кнопкой SB1. Размеры этой платы 56.25 * 23.75 мм.
Потом понял, что необходимо добавить кнопку SB2. Добавил на плату эту кнопку, но в реальном образце плата была сделана по первому варианту и добавлена небольная монтажная платка с кнопкой SB2. Равзмеры платы уже 72,5 * 23,75 мм. Изготавливал плату по методу ЛУТ. Платы разработаны с видом со стороны объёмных элементов, поэтому зеркалить при печати её не нужно, печатайте сразу как есть, тогда при ЛУТ будет всё как надо.
На фото ниже видно, что сначала изготовил плату без кнопки SB2, потом попользовался и пришёл к мнению, что удобнее добавить кнопку SB2. Поэтому добавил небольшую платку с этой кнопкой. После чего стал разрабатывать общую конструкцию устройства. Ниже вид со стороны объёмных компонентов.
Мне нравится использовать планарные компоненты, поэтому и тут применил их по возможности максимально. Ниже вид со стороны печатных проводников и планарных компонентов.
Решил конструкцию сделать в стиле Ардуино
– прозрачный корпус из акриловых пластин, а платы собрать в этажерку. Эта конструкция для домашних условий, а для полевых/дачных условий конечно нужно делать в закрытом, защищённом корпусе. Для моей конструкции нужно изготовить две платы-шасси из ABS-ки. Ниже шасси под плату с радиоэлементами.
Плата установлена на шасси. Подпаял разъём под насос и выключатель питания, попробовал в работе... хорошо, продолжаем делать корпус.
Изготовлены все шасси: под плату и аккумулятор. Использую аккумулятьр от сотового телефона. Удобно, что он плоский и общая конструкция получается более компактной и гармоничной. Между шасси и пластинами корпуса сделал стойки из прозрачной трубочки. Внутри трубочки нарезана резьба М3. Можно было бы напечатать стойки шестигранного сечения, кому интересен такой вариант, то в архив положу файл для FreeCAD-а со стойками. Измените их под свои размеры.
Конструкция собрана в единое целое. Сверху и снизу пластины из акрила толщиной 4 мм, лучше бы было из 3 мм. Так как панель управления прозрачная, то хорошо видны светодиоды на плате. Над каждым есть соответствующая надпись. Под толкатели кнопок сделаны отверстия. Толкатели кнопок сделаны из ABS.
Разъём под штекер насоса установлен на пластине из ABS. Выведен сбоку, так как это более удобно, чем у автора сверху панели управления, на мой взгляд.
С боку видна вся эта этажерка, где и что установлено. Делал конструкцию так, чтобы было всё разборное и был бы хороший доступ ко всем частям устройства.
Другой вид со стороны разъёма для разядки аккумулятора. Так как нижняя пластина прозрачная, то светодиоды, сигнализирующие об этапах заряда аккумулятора, хорошо видны.
Автомат автополива помещён на крышку контейнера с водой, подключен насос и включено питание – автополив в работе.
После того, как собрал конструкцию и стал использовать автомат по назначению, обнаружил, что происходит довольно существенный набег времени в ходе работы устройства. Так как тактовая частота никаким кварцем не синхронизируется, то есть некоторый условный момент определения истинного интервала времени.
Автор в программе сутки определяет в секундах. Это значение у него равно 86400 секунд, что выводится простым образом через умножение 24 * 60 * 60 секунд.
Имеющийся систематический набег времени мне как-то не совсем нравится. Но чтобы что-то изменить, то нужны исходники. Благо автор к своему проекту все файлы приложил. Пришлось по исходникам программы, которую автор написал на С в нескольких файлах, всё пересобрать в формате Arduino IDE в файл [.ino].
После нескольких часов работы по программированию получил следующий результат. Вся программа уложилась в 810 байтов, что просто замечательно, так как у ATTiny13A всего-то в наличии 1024 байта.
Программирую и загружаю скетч сейчас через среду Arduino IDE. Ниже привожу свои установки. Программой AVRDUDE_PROG_v3.3 в данном случае не пользуюсь. Читал через неё только фьюзы и оставил их без изменения.
Установки в Arduino IDE: Меню -> Инструменты: Плата: "ATTiny13" BOD: "BOD 2.7V" EEPROM: "EEPROM retained" Clock: "1.2 MHz internal osc." Расчёт времени: "Micros desabled" Программатор: "USBasp slow (MicroCore)" Вначале один раз нужно записать загрузчик Меню -> Инструменты -> Записать загрузчик: Установятся фьюзы для МК Заливаю программу: Меню -> Скетч -> Загрузить через программатор
Провёл ряд измерений набега времени и с помощью Excel определил формулу. Набег идёт по линейной формуле:
В чём причина этого набега точно не скажу, скорее всего из-за отсутствия кварцевого стабилизатора в данной схеме. Пробовал и от 5 В запитывать и от аккумулятора 3.98 В, набег происходит по формуле (1). Не знаю как у автора, м.б. у меня ATTiny13A какие-то особенные? Как бы там ни было, экстраполировал значения на 24 часа. В секундах получается нужно установить период 68693 вместо 86400, тогда период будет реально 24 часа c минимальным набегом времени, колебания температуры внешней среды и отсутствие кварца всё равно дают неточность в отсчёте времени.
Если кто-то хочет повторить мою программу, то все необходимые файлы в общем архиве. Там же и лист Excel с расчётами. Здесь сам скетч публиковать не буду, и так страница большая получилась. Отмечу только, что у меня программа несколько другая. К примеру, все пины при инициализации устанавливаются в режим INPUT, а в момент когда нужно выдать управляющий сигнал – соответствующий пин переводится в режим OUTPUT. После завершения сигнала управления пин опять переводится в режим INPUT. Такой приём позволяет экономить энергию аккумулятора. Функция конфигурирования пинов используется Arduino-вская pinMode(). Для режима сна использую библиотеку #include <sleep.h>.
В общем же логика программы оставлена как у автора, очень удачная задумка, особенно с возможностью быстро перенастроить полив без использования программатора и компьютера.
Все, что необходимо для повторения конструкции, можно скачать по ссылкам:
В заключение можно добавить, что если вместо мотора насоса управлять реле, а оно в свою очередь может включать мощный насос, то такой автомат полива можно применить не только дома, но и на даче или приусадебном участке.
Спасибо за внимание!