Автоматический полив для дачи своими руками
Некоторое время назад я прикинул, что было бы неплохо автоматизировать полив на даче. Обзоры некоторых пользователей муськи также сыграли не последнюю роль в принятии этого решения. Но поскольку электроника — это не мой профиль, решено было делать аппаратную часть проекта максимально упрощенной, и по возможности обойтись без ЛУТ, травления плат и прочих сложностей. Короче, хотелось реализовать свою систему как некий конструктор, собранный из стандартных компонентов, а получилось это или нет — решать вам.
UPD: добавлен скетч для Ардуино.
1. Осмысление хотелок и упорядочивание мыслей проекта
Проект изначально задумывался примерно в таком виде: 4 мощных разбрызгивателя (в перспективе 8), столько же электромагнитных клапанов, релейный модуль для них, вот такая клавиатура, экран 16×2 символов, часы реального времени и Arduino в качестве мозгов.
Я рассчитывал, что для управления клапанами будет достаточно какого-нибудь простого меню, через которое можно задавать текущее время, время начала полива и длительность работы.
Потом прикинул, что 8 входов ардуины отдавать на клавиатуру — это чересчур. И вообще, не все клавиатуры одинаково полезны везде оправдано использование только цифрового блока; нужно ведь не только вводить циферки, но и реализовать навигацию по меню.
А если так, то лучше использовать джойстик — это более универсальное решение чем цифровая клавиатура, да и управление становится «интуитивным»… разумеется, если его удастся таким сделать… Зимой были куплены релюшки, один 12-вольтовый клапан, один разбрызгиватель, джойстик, ардуина и экран, и в феврале-марте я начал отлаживать скетч для поливалки.
В процессе разработки программной части было внесено еще несколько изменений в первоначальный проект. В частности, я добавил несколько датчиков температуры-влажности и блок ручного управления клапанами. Кроме того, для защиты от работы мотора вхолостую я решил поставить на вход датчик расхода воды, чтобы аварийно отключать мотор в случае длительного отсутствия потока.
Зачем столько датчиков? Да просто стоят они не очень дорого, пустые входы на плате оставались, а знать температуру и влажность на разных частях участка — полезно. Датчики я планировал поставить в теплице, на улице и в приямке для насосной станции, а также где-то в огороде разместить датчик влажности почвы и датчик температуры почвы.
А вообще — покажу я лучше таблицу датчиков и пинов ардуины
2. Закупка необходимых компонентов
Привожу список компонентов системы, купленных в Китае (большинство приобрел на aliexpress, но пару лотов взял на Ebay — там было дешевле). Два лота уже сняты с продаж, поэтому вместо ссылок на них будут снапшоты — чтобы заинтересованные люди знали что искать.
1 датчик расхода воды, цена 6,36$ (лот у другого продавца, т.к. мой продавец снял этот датчик с продаж)
1 понижающий преобразователь на LM2596, цена 0,74$
1 часы реального времени I2C ds1307, цена 0,63$
1 набор прототипов печатных плат, цена 1,16$
1 джойстик, цена 0,56$
1 плата Arduino nano, цена 1,79$
1 водонепроницаемый датчик температуры DS18b20, цена 1,1$
1 I2C модуль для дисплея (снапшот), цена 0,66$
1 выключатель, цена 0,5$
1 экран 1602, цена 1,35$
1 реле 4-канальное, цена 3,56$
1 реле 1-канальное, цена 0,84$
3 датчика температуры DHT11, цена 0,99$ за штуку, всего 2,97$
4 поворотных садовых разбрызгивателя, цена 5,59$ за штуку, всего 22,36$
4 электромагнитных клапана (снапшот), цена 3,62$ за штуку, всего 14,48$. Аналоги легко ищутся здесь
4 кнопки со встроенным светодиодом (снапшот), цена 0,95$ за пару, всего 1,9$
Итоговые затраты в интернетах — 60,96$
В местном строительном магазине были куплены следующие вещи:
2 бухты поливочного шланга 5/8 (по 30м) — 540000 бел.рублей, или примерно 28$
8 муфт 1/2 — 112000 бел.рублей, или примерно 5,8$
3 тройника 1/2 — 60000 бел.рублей, или примерно 3$
8 штуцеров 15*16 — 92000 бел.рублей, или примерно 4,8$
Итоговые затраты в оффлайне — 804000 бел.рублей, или 41,2$
Также стоит упомянуть то, что не вошло в этот список — некоторые вещи из этого списка достались мне условно-бесплатно (старая рухлядь), на какие-то вещи я просто запамятовал цены. Это:
40 метров 4-жильного сигнального кабеля для подключения температурных датчиков;
40 метров самого дешевого 2-жильного медного кабеля для передачи 12 вольт на электромагнитные клапаны;
2 разветвителя RJ-11, которые были использованы в качестве выходов для подключения датчиков температуры и влажности, и 4 коннектора для кабелей с датчиками;
2 разветвителя RJ-45, для связи блока управления, находящегося в доме, с блоком реле и датчиков почвы, находящимся на улице рядом с насосом, и 4 коннектора для кабелей;
старый кабель (витая пара) — метров 30-40, для соединения ардуины с релюшками;
коннектор для подключения дисковода, выпаянный со старой материнской платы, и шлейф от дисковода;
старый блок питания на 24 вольта;
обрезки мебельного щита толщиной 12-16 мм для изготовления коробок для системы.
Фотки разветвителей до применения не сделал, выглядят примерно так:
3. Изготовление того, что не было куплено
Некоторые вещи по тем или иным причинам пришлось делать самостоятельно из подручных материалов. Постараюсь здесь описать, что и как было сделано, и почему именно так а не иначе.
3.1 Датчик влажности почвы (надеюсь, долгоживущий)
Как вы можете заметить, в списке покупок отсутствует датчик влажности почвы, хотя в проекте он заявлен. Дело в том, что сама идея закапывать в землю кусок текстолита с тоненькими полосками металла мне показалась достаточно бредовой, поэтому я решил найти способ получше. Пошарившись по интернету, я нашел вот эту тему на тематическом форуме, там есть хорошие советы и примеры. В общем, решил сделать так же, как там и написано: 2 проводника, резисторы и 3-жильный провод. В качестве катода и анода была использована одна велосипедная спица, безжалостно покусанная на части. Вот для сравнения куски донора и целая спица
Паяем провода, резисторы и куски спицы — в общем, делаем все так, как написано на форуме
Потом временно фиксируем анод и катод на пластилин, чтобы заделать наше рукоделие термоклеем
Далее в качестве формочки был взят маленький стаканчик от детского йогурта, в нем я сделал отверстие для провода, аккуратно установил конструкцию внутрь и залил анкерным составом Ceresit СХ-5
Форумчане рекомендуют гипс, но под рукой его не оказалось, думаю что быстросхватывающийся цемент будет не хуже.
Высохло — вскрываем
По готовому датчику на всякий случай прошелся масляной краской в пару слоев, чтобы датчик измерял именно влажность почвы, а не влажность куска бетона.
Для использования этого мегадевайса требуется предварительная калибровка. Делается это элементарно: берем сухую почву, в нее тыкаем самодельный датчик, проверяем и записываем полученное значение влажности. Затем льем туда столько воды, чтобы получилось небольшое болотце, и снова снимаем значение с датчика.
По-быстрому откалибровался вот этим скетчем с форума:
#define PIN_SOIL_LEFT 6
#define PIN_SOIL_RIGHT 7
#define PIN_SOIL_HUMIDITY 0
void setup(){
Serial.begin(9600);
pinMode(PIN_SOIL_LEFT, OUTPUT);
pinMode(PIN_SOIL_RIGHT, OUTPUT);
pinMode(PIN_SOIL_HUMIDITY, INPUT);
}
void setSensorPolarity(boolean flip){
if(flip){
digitalWrite(PIN_SOIL_LEFT, HIGH);
digitalWrite(PIN_SOIL_RIGHT, LOW);
}else{
digitalWrite(PIN_SOIL_LEFT, LOW);
digitalWrite(PIN_SOIL_RIGHT, HIGH);
}
}
void loop(){
setSensorPolarity(true);
delay(1000);
int val1 = analogRead(PIN_SOIL_HUMIDITY);
delay(1000);
setSensorPolarity(false);
delay(1000);
// invert the reading
int val2 = 1023 - analogRead(PIN_SOIL_HUMIDITY);
reportLevels(val1,val2);
}
void reportLevels(int val1,int val2){
int avg = (val1 val2) / 2;
String msg = "avg: ";
msg = avg;
Serial.println(msg);
}
В моем случае, значение на датчике было чуть больше 200 в сухой почве, и чуть меньше 840 во влажной.
Теперь у нас есть минимальный и максимальный уровни влажности конкретно взятой почвы, их нужно будет внести в соответствующие константы в основном скетче. Вот и все!
3.2 Блок питания для клапанов
Можно было, конечно, купить в Китае обычный блок питания на 12 вольт, выдающий хотя бы 1 ампер, но в закромах Родины куче старого барахла нашелся зарядник от дохлого шуруповерта, выдающий полампера при напряжении 24 вольта. Поэтому был куплен понижающий преобразователь на LM2596, и затем успешно встроен в старый блок. Отдельных фоток процесса я не делал, бо не об этом обзор… Вот модифицированный блок вместе с клапаном, сойдет за пример
В корпусе блока было сделано отверстие, удобной регулировки напряжения. Теперь с помощью отвертки и мультиметра можно выставить любое напряжение от 5 до 24 вольт. Получилось довольно неплохо, как мне кажется. К сожалению, я прощёлкал этот обзор Aloha_ про понижающие преобразователи… Но в моем случае все вроде бы нормально, перегрева не замечено.
3.3 Держатели для разбрызгивателей
Вот эту штуку в магазине купить точно не получится! Потому что сделана она в количестве 4 единиц по спецзаказу:) Хотя здесь все просто: полудюймовая труба высотой один метр, снизу сделан изгиб под 90 градусов и приварен уголок длиной 30-40 см, чтобы держатель можно было воткнуть в землю в нужной части участка. Вверху резьба должна быть внутренняя на полдюйма (в моем случае там просто наварена муфта), внизу — кому как удобнее. В моем случае там наружная полдюймовая резьба, но как показала практика — лучше бы была внутренняя, тогда не пришлось бы навинчивать сначала муфту, потом в нее штуцер или клапан… В общем, не продумал заранее, поэтому получил дополнительные расходы на муфты:(
Наглядные фото держателя — вот:
И еще чуть дальше будет фотка держателя в процессе эксплуатации.
3.4 Коробки для блока управления и реле
Сначала я планировал разместить все части поливатора в одной коробке, и оснастить ее выходами на клапаны (12 вольт), насос (220 вольт) и собственно на датчики. Однако потом решил разнести силовую и слаботочную части поливатора, да и щелканье реле ранним утром будет очень сомнительным удовольствием. Соответственно, плата с ардуиной, джойстик, кнопки, экран и часы реального времени остаются в «домашней» коробочке, а реле будут вынесены в коробку на улицу, поближе к мотору и клапанам.
Для сборки управляющего блока мне понадобился кусок мебельного щита, перьевые сверла для отверстий под кнопки и под джойстик, и лобзик, для отверстия под экран
Далее разветвители (телефонные и под витую пару) вскрываем, паяем к ним провода и садим на термоклей. Здесь видно более подробно
Экранчик и часы реального времени были объединены в одно целое вот таким способом
И далее эта конструкция была торжественно закреплена саморезами в коробке. Так же был прикручен джойстик. Теперь внешне блок управления выглядит так:
Осталось закинуть в коробку мозги — и блок управления готов.
Теперь внимание. Эстетам, детям и беременным женщинам настоятельно не рекомендуется открывать следующий спойлер… Потому что красивых плат, которые умеют делать Yurok, ksiman и прочие известные здесь личности, вы не увидите. Зато вы увидите монтаж платы в лучших традициях КитайПодвалПрома: проводки вместо дорожек, и термоклей, чтобы это все не развалилось. Поэтому еще раз предупреждаю: не надо открывать спойлер! Поверьте на слово, эта плата работает, но лучше ее не видеть:)
Блок управления соединен с блоком реле двумя витыми парами. Для взаимодействия «мозгов» с клапанами и мотором достаточно 5 управляющих линий и еще 2 линии для питания реле (5 вольт и земля), но ведь есть еще расходомер (питание уже есть, значит нужна всего 1 линия), датчик влажности почвы (3 линии) и 4 светодиода, отображающие текущее состояние клапанов. Итого — используется 15 линий из 16 доступных.
В блоке реле помимо самих релюшек встроены розетки для мотора и для блока питания клапанов, а также обычный выключатель для принудительного запуска мотора. Сам блок сделан из тех же обрезков мебельного щита, что и блок управления, а выглядит как обычная деревянная коробочка. На входе две витые пары разведены на плате по коннекторам на реле мотора, реле клапанов, светодиоды, датчик влажности и датчик расхода воды. В стенке предусмотрительно сделаны отверстия под провода на клапаны, на выключатель и на розетку, управляемую через реле мотора.
На клеммнике выведены провода к электромагнитным клапанам
Снаружи я прикрутил розетку для мотора, управляемую ардуиной, и выключатель для ручного включения мотора
Все провода разведены и выведены куда нужно… вроде бы
На внутренней стенке появилась розетка для 12-вольтового блока питания, он тоже здесь виден
В готовом виде все это смотрится примерно так:
Немного объясню что и как. В коробку заведено питание, внутри спрятан блок для 12-вольтовых клапанов, реле мотора и реле клапанов. Наружу выходит питание на мотор (розетка), а также выведен выключатель для ручного управления мотором (он запараллелен с релюшкой). Кроме того, есть возможность подключения датчиков влажности почвы и расхода воды, но они пустуют. Почему — расскажу немного дальше.
4. Описание функционала
Собственно, вот неполный набор электронных компонентов для сборки
Сначала был собран примерно вот такой «осьминог» из ардуины и небольшого набора периферии, именно это чудо я использовал для отладки скетча
Минимальный как я уже говорил, было решено сделать управление джойстиком, и вырисовывался следующий минимально необходимый набор пунктов меню:
1. Настройки даты и времени
2. Настройки расписания полива
3. Информация с датчиков
4. Возможность принудительной перезагрузки
Реализовать его мне удалось, причем получилось даже обойтись англоязычным дисплеем 1602 — помогла библиотека LCD_1602_RUS, которая позволила «сделать» 8 кириллических символов. После этого вперемешку с английскими буквами можно было составить вполне понятные для пожилых людей (моих родителей) русские названия пунктов меню. Конечный размер скетча — чуть меньше 1400 строк, втиснутых в 45 килобайт.
Результат компиляции:
Скетч использует 19 626 байт (63%) памяти устройства. Всего доступно 30 720 байт.
Глобальные переменные используют 1 316 байт (64%) динамической памяти, оставляя 732 байт для локальных переменных. Максимум: 2 048 байт.
Никаких предупреждений о нехватке памяти, к счастью, уже нет.
Самого скетча пока здесь нет, со временем выложу. Хочу немного «причесать» код:)
Что получилось и что не получилось? Ну, на осьминоге получилось все:) К сожалению, жизнь вносит свои коррективы, и после разнесения мозгов, релюшек и сенсоров кое-что работать перестало… Во-первых, аналоговые датчики. Увы, но сейчас из-за длины кабелей они у меня не работают — соответственно, пункт меню «ПОЧВА» показывает нулевую температуру и влажность. Есть определенные мысли, как это исправить, но пока — некогда. У родителей на даче бываю не слишком часто и занимаюсь не только поливатором, а тут еще очередная командировка… В любом случае — я буду рад дельным советам от читателей.
Во-вторых, сходу не удалось подключить расходомер — на этот раз вовсе не из-за длины кабелей. Я сгоряча поставил его на вход в мотор, сразу после обратного клапана, как оказалось — ему там не место. Датчик, видимо, не совсем герметичен, и при подъеме воды идет подсос воздуха через микрощели в корпусе, как результат — насос не тянет воду. Пока снял его, потом попробую поставить на выход насоса — должно работать, но возможно — будет немного подтекать.
Теперь по работающему функционалу. Ну, с расписанием понятно — это именно то, ради чего затевался проект. Но иногда нужно просто включить ненадолго поливалку, и для этого я сделал два режима принудительного полива: ограниченный и бесконечный. Ограниченный режим включается коротким нажатием на кнопку, длительность такого полива можно указать в настройках. Если нажать на кнопку еще раз — полив будет прекращен досрочно. По длинному нажатию включается бесконечный полив — выключить его можно опять таки нажатием на кнопку.
Ну и приятное дополнение — просмотр температуры в приямке с насосной станцией, в теплице и на улице.
Раз в сутки запланирована принудительная перезагрузка ардуины.
5. Собираем поливатор
Здесь я сделаю небольшое отступление и приведу технические характеристики водонапорных компонентов.
Насос JY1000 польской фирмы Omnigena, согласно утверждениям производителя, имеет такие характеристики:
Производительность: 60 л/мин;
Максимальная высота подъема: 50 м;
Потребляемая мощность: 1100 Вт;
Максимальная глубина самовсасывания: 8 м.
Ну и конечно, не стоит забывать, что производительность очень сильно зависит от глубины скважины и забитости фильтров.
Электромагнитный клапан безымянный, но я находил на множестве страниц (например здесь) примерно такие характеристики:
Напряжение: DC 12 В;
Ток: 0.5A;
Давление: 0.02-0.8 МПа;
Производительность 3-25 л/мин.
Кроме того, встречается оптимистичное утверждение: Water pressure: hydrostatic pressure of 1.2 MPa, which lasted 5min, no rupture, deformation, leakage.. Т.е. в течение 5 минут клапан выдерживает даже существенно более высокое давление, чем стандартное «не более 0.8 МПа».
Вот здесь можно рассмотреть клапан в разных ракурсах
Также могу отметить, что тестировал клапан на более слабом блоке питания, и он без проблем открылся при 9 вольтах.
А для того, чтобы клапаны без проблем работали в условиях огородной сырости, мне пришлось включить смекалку и найти применение старым пластиковым бутылкам.
Привет, бонаква!
Вот — один клапан в такой одежке, может здесь видно получше
Производительность разбрызгивателя, согласно данным отсюда, составляет 700 — 1140 л/ч, или примерно 11.7-19 л/мин при давлении жидкости 0,21-0,35 МПа соответственно.
Как видно, в идеальных условиях насос выдает слишком большой поток, который просто физически не «осилит» ни клапан, ни тем более разбрызгиватель. Забегая вперед, скажу, что скважина в моем случае далеко не идеальная и до 60 л/мин она не дотягивала. Потом я прикинул, что напор упадет также и из-за длины шланга от мотора до самого дальнего разбрызгивателя (почти 30 метров), решил сильно не заморачиваться по этому поводу. Потом, в ходе «производственных испытаний», подключил к мотору одновременно три разбрызгивателя. Оказалось, что они льют очень слабо, да еще и давления не хватает на то, чтобы изменилось направление вращения. Выглядело так: разбрызгиватель крутится до тех пор, пока не упрется в ограничитель сектора, и вращение прекращается. Если убрать ограничитель сектора, то по кругу вращение более-менее без проблем, но радиус полива — метра 2-3. Отбросил один разбрызгиватель — стало немного лучше и они даже пытались вертеться, но радиус все равно был максимум метра 4. А вот один разбрызгиватель работает замечательно — бьет очень далеко (замерял рулеткой, на 9 метров брызгает только в путь), и никаких проблем с вращением.
Сами разбрызгиватели можно регулировать под свои нужды:
— разбить струю, выкрутив винт напротив сопла;
— изменить угол и соответственно дальность струи, поднимая или опуская пластину напротив сопла;
— изменить сектор полива с помощью ограничителей, или вообще убрать фиксатор ограничителя.
Вот фотографии «элементов управления» с близкого расстояния
Брызгалка на держателе и с подведенным шлангом/проводом выглядит вот так:
6. Работа
Блок управления, кроме текущего времени, умеет показывать всякую полезную информацию вроде температуры и влажности. Там же задается начало и длительность полива по расписанию, и длительность полива при активации кнопкой.
Коротким нажатием одной из 4 кнопок можно включить полив на определенное время (задается в настройках), длинное нажатие включает «бесконечный» режим, т.е. отключить полив на заданной линии можно будет только этой же кнопкой, или он отключится, если по расписанию линию необходимо отключить. Хотя зачем я повторяюсь? Даешь слайды!
Вот здесь видны настройки:
Вот здесь — смотрим температуру и влажность
Эти датчики пока ничего не говорят, почему — объяснял выше
И, наконец… Семь бед — один ресет:
А теперь — видео, куда ж без него.
1. Мини-экскурсия — что есть в меню поливатора. Датчики были не подключены, поэтому все показывают по нулям.
2. Настройка поливатора на включение 2 и 3 линии длительностью по одной минуте
3. Как выглядит полив по расписанию, которое было задано для теста
4. Как выглядит полив по расписанию на экране поливатора
5. Тестовый полив с кнопки — включение и выключение. Работу разбрызгивателя не показываю, но чесслово — все работает
6. Разбрызгиватель и его настройка: что где крутится, поворачивается и фиксируется
7. Работа разбрызгивателя на небольшом секторе с близкого расстояния
7. Сравнение с рыночными предложениями
Доступный вариант на российском рынке — системы Gardena, продается в OBI. Можно взять блок управления Gardena modular за 13590 рублей и еще 4 клапана по 3990 рублей, итоговая цена будет всего-то 29550. Здорово, конечно, и выглядит красиво. Но отдавать почти 500 американских денег… И насколько я понимаю — здесь в комплекте нет разбрызгивателей, соединителей и шлангов! Ладно, смотрим дальше.
Опять Gardena в том же магазине, но здесь уже система на 6 линий. Состоит из таймера подачи воды Gardena MasterControl за 11190 рублей и распределителя воды за 6990 рублей — итого 18180, или почти 300 бакинских… Шланги и разбрызгиватели, как и в предыдущем случае, нужно покупать отдельно.
Ebay сходу предложил блок управления вместе с клапанами Melnor Aquatimer примерно за 60 долларов, плюс ~35$ стоит доставка — в итоге почти сотня. Как вариант, доступны контроллеры (без клапанов) Rain Bird ESP-RZX Series 4 и Hunter XC 400i по ценам не ниже 75 баксов, не считая доставки. Клапаны отдельно; для хантера, например, они идут от 22 баксов за штуку, оптом дешевле.
И вместо послесловия. Имело ли смысл мне заморачиваться изобретением велосипеда, если он уже есть на рынке? Думаю, что да. Что лично я от этого получил? Во-первых, существенную экономию, во-вторых, возможность реализовать систему так, как это нужно именно мне, в-третьих — мне это просто было интересно. Реализуйте свои проекты и не бойтесь делать ошибки. Не ошибается только тот, кто ничего не делает!
Теперь обещанный код для ардуины. Скачать его можно отсюда, комментарии в тексте я по возможности добавил, но конкретно в этом коде возможно не работает (или неправильно работает) расходомер.
Делаем автополив комнатного цветка на arduino за 15 минут
После того как у меня сдох очередной цветок, я понял, что неплохо было бы как-то автоматизировать процесс полива.
Не мудрствуя лукаво, я решил собрать конструкцию, которая бы поливала цветок вместо меня. В итоге у меня получился вот такой аппарат, который вполне справляется со своими обязанностями:
При помощи двух регуляторов можно настроить объём поливаемой за раз воды, а также период между поливами. Кому интересно — далее подробная инструкция, как сделать такое устройство.
Для сборки поливалки вам понадобится некоторое количество компонентов и не более чем 30 минут свободного времени.
Используемые компоненты:
- Arduino Mega (она просто была под рукой, но любая другая подойдёт)
- Насос и силиконовая трубка (подойдёт насос омывателя автомобильных стёкол — можно купить в любых автозапчастях или можно купить маленький погружной насос на ebay)
- Блок питания
- Два переменных резистора для регулировки (любые)
- Транзистор IRL3705N
- Два резистора (100 Ом и 100 кОм)
- Диод (любой)
- Резервуар для воды (в моем случае пластиковая коробочка из Ikea)
- Макетка
Собираем всё по такой схеме:
Или нагляднее:
Вот что получилось у меня:
Сначала протестим насос. Подадим на него 5В. Если он зажужжал, всё в порядке, двигаемся дальше.
Теперь подключим насос к Arduino. Сделаем для управления насоса с ардуино небольшую обвязку на макетке.
Попробуем поуправлять насосом с Ардуино. Зальём такой код
int pumpPin = 5;
void setup() {
pinMode(pumpPin, OUTPUT);
digitalWrite(pumpPin, LOW);
}
void loop() {
digitalWrite(pumpPin, HIGH);
delay(1000);
digitalWrite(pumpPin, LOW);
delay(1000);
}
Если он периодически жужжит, значит, снова всё в порядке.
Теперь нам осталось добавить два регулятора. Подцепим к нашему устройству переменные резисторы, и проверим их работоспособность.
Зальём такой код на Ардуино
int volumePin = A0;
void setup() {
pinMode(volumePin, INPUT);
Serial.begin(9600);
}
void loop() {
Serial.println(analogRead(volumePin));
delay(100);
}
Зайдём в Serial Monitor и убедимся, что есть реакция на поворот регулятора. Он должен меняться примерно от 0 до 1024
Теперь осталось заставить заработать всё это вместе.
Вот непосредственно код поливалки:
// Первый регулятор управляет временем, которое будет литься вода (от 4 до 15 секунд)
#define MAX_FLOWTIME 15 // seconds
#define MIN_FLOWTIME 4 // seconds
// Второй регулятор управляет частотой полива от раза в день до раза в неделю
#define MAX_PERIOD 7 // days
#define MIN_PERIOD 1 // days
#define MAX 1015
#define MIN 0
int volumePin = A0; // Пин, к которому подцеплен регулятор, отвечающий за объём поливаемой воды
int periodPin = A1; // Пин, к которому подцепелн регулятор, отвечающий за период между поливами
int pumpPin = 5; // Пин, к которому подсоединено управление насосом
int volume;
int period;
// Процедура, включающая насос на время, заданное в volume
void water() {
digitalWrite(pumpPin, HIGH); // включаем насос
delay(volume);
digitalWrite(pumpPin, LOW); // выключаем насос
delay(period);
}
void setup() {
pinMode(pumpPin, OUTPUT);
digitalWrite(pumpPin, LOW);
}
void loop() {
// Считываем значения регуляторов (переменных резисторов) и приводим их к заданным пределам
volume = map(analogRead(volumePin), MIN, MAX, MIN_FLOWTIME, MAX_FLOWTIME) * 1000;
period = map(analogRead(periodPin), MIN, MAX, MIN_PERIOD, MAX_PERIOD) * 1000 * 60 * 60 * 24;
water();
}
Вот так выглядит конечный результат в работе:
В ближайшем будущем думаю сюда добавить сенсор уровня воды в резервуаре и датчик влажности почвы.
Контроллер управления для системы автоматического полива
Контроллер управления поливом является основной частью системы автоматического полива. Функция контроллера автоматического полива заключается в определении периодичности, начала времени полива и продолжительности полива индивидуально для каждого электромагнитного клапана. Контроллер управления поливом требует индивидуальных настроек длительности и периодичности для разных типов растений.
Контроллер автоматического полива, описанный в данной статье, был собран на основе микроконтроллера ATMEGA16. Программная оболочка написана в CodeVisionAVR на языке Си. Все элементы собраны на плате 15×10 см. Печатная плата спроектирована в программе Sprint Layout. Предполагается установить данный контроллер в коробку IP65 с дверцей, для быстрого доступа. Данный контроллер работает с электромагнитными клапанами 24 В постоянного тока, но в случае необходимости, может быть модернизирован для использования электромагнитных клапанов 24 В переменного тока. Контроллер тестировался на протяжении трех месяцев, и в течение указанного срока, в том числе и на момент написания настоящей статьи работал и продолжает работать стабильно.
Технические характеристики и возможности устройства
- Входное напряжение: 24 В постоянного тока
- 8 выходных каналов: ~23 В постоянного тока
- Сохранение пользовательских настроек в EEPROM микроконтроллера
- Поддержка хода часов при потере питания
- Три режима работы: «Автоматический режим», «Ручной запуск» и «Отключен»
- Три настраиваемые программы, которые можно назначить к каждому каналу индивидуально
- Типы программ: «Ежедневный полив», «Полив каждый второй день», «Полив каждый третий день», «Полив по заданным дням недели»
- Три таймера в активный день
- Минимальная длительность активности канала: 1 мин
- Максимальная длительность активности канала: 23 часа 59 мин
- Глобальное изменение длительности полива в %
- Язык интерфейса меню: Английский
Принципиальная схема контроллера
Ниже указана дополнительная информация о компонентах, указанных в схеме:
- В устройстве используется микроконтроллер ATMEGA16 (IC1)
- Для индикации информации и настройки контроллера используется символьный ЖК-дисплей 16х2 (LCD1)
- В устройстве присутствуют четыре тактовые кнопки (B1-B4): «Ввод / Меню», «Отмена / Назад», «Влево / -«, «Вправо/ «
- В устройстве используются часы реального времени DS1307 (IC6). Микроконтроллер опрашивает DS1307, для сравнения текущего времени и даты с ранее сохраненными настройками программ и таймеров, для своевременного включения/ отключения каналов
- Индикацию активных каналов отражают светодиоды (LED1-LED8)
- Включение каналов по сигналу микроконтроллера обеспечивают четыре составных транзистора Дарлингтона ULN2803 (IC2, IC3, IC4, IC5). Каждый канал (электромагнитный клапан) подключается через четыре запараллеленных контакта, тем самым увеличивая предел возможной пропускной силы тока
- В устройстве используется готовый модуль для понижения напряжения от 24 В до 5 В (VR1)
Ниже приведена схема контроллера:
Печатная плата
- Плата спроектирована в программе Sprint Layout
- Размер платы: 10х15 см
- Тип: односторонняя печатная плата
- В архиве вложена печатная плата в формате *.pdf и *.lay
Рисунок планы указан ниже:
Инструкция к пользованию
По ссылке указанной ниже можно ознакомиться с картой меню контроллера:
Ниже указаны описания всех категорий меню и их перевод на русский язык:
Дежурный экран контроллера отображает текущие дату и время в первой строке, а также режим работы во второй строке.
Главное меню
При нажатии на кнопку «Ввод / Меню» с позиции дежурного экрана, открывается главное меню контроллера, при использовании кнопок навигации «Влево / -«, «Вправо/ «, происходит перелистывание пунктов данного меню:
- Mode Select — Выбор режима
- Auto Settings — Настройки автоматического режима
- Date/Time Settings — Настройка даты и времени
Подменю Mode Select — Выбор режима
При выборе пункта меню «Mode Select», происходит вход в подменю, при использовании кнопок навигации можно обнаружить следующие режимы:
- Off — Выключен
- Auto — Автоматический режим
- Manual — Ручной запуск
При выборе режима «Off» или «Auto», и последующем подтверждении сохранения настроек, выбранный режим будет активирован, и произойдет возобновление дежурного экрана.
Важно: при завершении сохранения, каких-либо настроек, всегда активируется дежурный экран контроллера.
При выборе пункта меню «Manual», требуется ввести дополнительные параметры перед запуском данного режима.
Подменю «Manual» — «Ручной запуск»
При выборе данного пункта меню, пользователь должен выбрать желаемые каналы для включения, для этого, нужно изменить статус «Off» (Выключен) на статус «On» (Включен). После указания статусов для каждого канала, требуется указать длительность полива в минутах. Минимальная продолжительность полива при ручном запуске — 1 минута, а максимальная продолжительность полива — 240 минут. Следующим пунктом настройки является подтверждение запуска программы.
Важно: После завершения процесса полива, режим контроллера будет изменен на режим, который был указан до ручного запуска полива.
Подменю «Auto Settings» — «Настройки Автоматического режима»
Подменю «Auto Settings» разделен на три пункта:
- Program Setup — Настройки программ
- Zone Setup — Настройки каналов
- Duration Adjustment — Корректировка длительности
Подменю «Program Setup» — «Настройки программ»
Войдя в данный раздел, пользователь должен выбрать одну из трех доступных программ для последующего редактирования:
- Программа A
- Программа B
- Программа C
После выбора одной из трех программ, пользователь должен выбрать в какие дни запускать данную программу. Доступны четыре типа настройки периодичности:
- Everyday — полив каждый день
- Second Day — полив каждый второй день
- Third Day — полив каждый третий день
- DOW Select — полив по указанию дней недели
Режим «Everyday» — Полив каждый день
Данный режим не содержит каких-либо дополнительных настроек, после выбора пункта «Done» (Готово) и подтверждения, настройки будут сохранены.
Режим «Second Day» и «Third Day» — Полив каждый второй день и каждый третий день
После выбора данного режима, пользователь должен дополнительно указать текущий день для запуска счетчика данной программы:
- First Day — Первый день
- Second Day — Второй день
- Third Day — Третий день (данный пункт доступен для режима «Полив каждый третий день»)
Важно: Алгоритм изменения текущего дня, для данных двух режимов срабатывает ежедневно, ровно в 00.00.
Режим «DOW Select» — Полив по указанию дней недели
После выбора данного режима, пользователь должен указать в какие дни недели, он желает запускать данную программу, изменив статус с «Off» (Выключено) на статус «On» (Включено).
Подменю «Zone Setup» — «Настройка Зон»
После входа на данный уровень иерархии меню, пользователь должен выбрать канал для последующего редактирования.
После выбора одного из восьми каналов, пользователь должен произвести следующие настройки:
- Program Assign — Назначить программу. Требуется указать одну из трех программ (A,B,C). В данном списке также присутствует опция «Off» (Отключить), которая в свою очередь отключает выбранный канал
- Timers Count — Количество таймеров в активный день. Возможно указать до трех включений
- Timer #1,2,3 On — время включения канала для таймеров 1,2,3
- Timer #1,2,3 Off — время выключения канала для таймеров 1,2,3
Важно: Максимальная длительность, которую можно указать для таймера, не может превышать 23 часа 59 минут. Таймер невозможно активировать с 23.59 до 00.00 (последнюю минуту дня).
Важно: Время включения таймера не может быть позже времени выключения таймера. В этом случае контроллер укажет на ошибку и перейдет на пункт указания времени включения канала для первого таймера, для корректировки.
Подменю «Duration Adjustment» — «Корректировка длительности«
В данном подменю пользователь может отрегулировать длительность всех существующих таймеров. Данная опция актуальна при сезонных изменениях. Корректировка указывается в процентах.
Важно: Если при настройке корректировки длительности, завершение полива переходит на следующий календарный день, то полив будет приостановлен в 23.59 текущего дня.
Подменю «Date/Time Settings» — «Настройка даты и времени»
При выборе данного подменю пользователь, может настроить текущие дату и время.
Важно: Опция авто-перехода на летнее/зимнее время отсутствует.
Настройка Fuse битов
Для корректной работы порта А, требуется отключить JTAG, так как указано на рисунке ниже:
Фотографии устройства
Применение датчиков на срабатывание клапанов (дополнение от 14-03-2021)
В данной секции я опишу возможность подключения датчиков влажности почвы, температуры и прочих. Метод описанный мною ниже позволяет использовать данные датчики, как дополнительное условие на срабатывание клапанов, не изменяя прошивки микроконтроллера. В своем примере я буду использовать датчик влажности почвы и модуль с компаратором LM393. Данные два элемента свободно продаются во многих онлайн магазинах и обычно идут в комплекте.
Данный модуль имеет два вывода с одной стороны, для подключения непосредственно к датчику, и четыре вывода с другой стороны, это VCC ( 5 В), GND (земля), DO (цифровой вывод, при срабатывании датчика, вывод начинает проводить землю), AO (аналоговый вывод, в нашем примере данный вывод не рассматривается, обычно используется при подключении напрямую к АЦП микроконтроллера). Порог срабатывания датчика настраивается при использовании переменного резистора, на плате модуля опытным путем.
Так же в своем примере, я буду использовать модуль с восемью реле, для того, чтобы учесть интересы другой части пользователей, которые будут использовать электромагнитные клапаны 24 В переменного тока. Данный модуль также свободно продается и часто используется любителями платформы Arduino. На плате модуля находятся десять выводов, это GND (земля), восемь выводов IN1-IN8 (при подключении земли к данным выводам, срабатывает соответствующее реле на плате) и вывод VCC ( 5 В)
Схема подключения следующая:
Вывод базы транзистора 2N7000 подключен через резистор к 5 В, в таком положении транзистор всегда открыт. Минуя резистор, к базе транзистора подключается вывод датчика влажности почвы. Напомним, что при срабатывании датчика, на данный вывод подается земля. Соответственно, если датчик сработал, транзистор закроется.
В открытом состоянии, транзистор 2N7000 проводит через себя «общую землю» к выводу «9» составного транзистора Дарлингтона, и все каналы клапанов работают в штатном режиме, если же 2N7000 закрывается (датчик сработал), ULN2803 перестает функционировать и передавать негативные сигналы на модуль реле.
Изменение схемы контроллера под свои нужды, позволяют отказаться от использования некоторых компонентов, и использовать альтернативные компоненты. Схема указанная ниже, не отображает полную картину подключения контроллера и не является завершенным проектом, а лишь является вспомогательным инструментом для модернизации контроллера.