Arduino — автономный автополив на 1-12 комнатных растений
Всем привет!
Сегодня я закончил сборку автономной системы автополива для комнатных растений, чем и спешу поделиться. В последнее время участники форума мало своих проектов выкладывают, решил это немного поправить.
Видео по моим системам автополива:
Первая система:
Если интерес остался, то дальше, собственно говоря, буду излагать свои мысли на тему систем автополива и опишу свой проект.
Мысли на тему концепции системы
У AlexGyvera было 2 проекта, связанных с автополивом: простейшая система на Digspark на 1 помпу и многоканальная система с дисплеем и кучей наворотов. Начал я с копирования простой системы. Мой опыт изложен в соответствующем разделе форума, повторяться не буду, вот ссылка:
https://dachniymir.ru/threads/Простой-автополив.35/
Многоканальную систему реализовывать не стал, т.к. для меня важным моментом была автономность. Не хочу что-то оставлять включенным в розетку на несколько недель, когда уезжаю в командировку или в отпуск. Супергибкие настройки через энкодер лично мне не особо нужны. Потратить пару минут несколько раз в год, чтобы перепрошить Ардуину для меня не проблема. Регулярно менять настройки у меня нет необходимости. В то же время мне понравилась идея системы с дисплеем. В простой системе на Digispark как раз не хватало информации о текущих настройках и оставшемся времени до ближайшего срабатывания.
Я решил сделать что-то среднее между этими 2-мя системами.
Многие добавляют в системы автополива датчики влажности почвы. В моем понимании такие датчики должны быть в системах полива для открытого грунта, чтобы не поливать растения, если недавно был дождь. В квартире можно подобрать оптимальные интервалы и продолжительность полива и нет необходимости усложнять систему лишними элементами.
В итоге родились следующие требования к системе:
- Автономная работа минимум 1 месяц
- Должна быть возможность настраивать количество поливаемых растений
- Время срабатывания помп должно настраиваться с точностью до часа
- Должно быть информирование:
- Текущие настройки для каждой помпы
- Сколько дней осталось до срабатывания каждой помпы
- Уровень заряда аккумулятора
- Индикация, что идет зарядка аккумулятора от солнечной батареи
Мой проект
Система состоит из 3х помп. Настройки работы каждой помпы задаются отдельно. Маленькие помпы можно использовать с гребенками — разветвителями на 3-4 крана. В итоге можно поливать до 12 растений. Помимо программных настроек работы помп, дополнительные настройки делаются кранами.
На дисплей выводится следующая «таблица»: строки – номера помп, столбцы информация по каждой помпе.
- ПР – период работы. Раз в сколько дней будет срабатывать помпа.
- ЧР- час работы. Указывается час (например «19» — помпа сработает в 19:00), кода сработает помпа.
- ВР – время работы помпы. Указывается в секундах на сколько включится помпа.
- ДО – дней осталось. Через сколько дней произойдет ближайший полив.
- Также выводится текущие время и дата
Можно программно отключить 2 и/или 3 помпу, тогда выводится информация только по активным помпам.
Меры по обеспечению автономности:
- 3 аккумулятора 18650
- Питание от солнечной батареи
- Ардуино уходит в Powerdown и просыпается по Watсhdog
- У Ардуино выпаял стабилизатор напряжения
- Дисплей Nokia
- Дисплей находится в выключенном состоянии, включается только после удержания кнопки, после этого через некоторое время опять выключается
- Все индикаторы либо выпаяны с модулей, либо вынесены на панель и включаются только при удержании кнопок.
Детали:
- Корпус из коробки для еды за 40р из Ашана
- Arduino nano
- Дисплей Nokia
- Модуль часов DS3231
- Аккумуляторы 18650 в холдере
- Повышающий модуль до 5В
- Понижающий модуль до 3,3В для дисплея
- Модуль зарядки аккумулятора TP4056
- Индикатор зарядки аккумулятора
- Солнечная батарея
- Электролитические и керамические конденсаторы, резисторы, светодиоды, полевые транзисторы
- Кнопки и выключатели
Схема
Сначала использовал Мосфет модули с Али, но они много места занимали, решил сделать батарею из Мосфетов с обвязкой из резисторов разъемы для крепления проводов винтами.
В целях энергосбережения отпаял у модуля DS3231 светодиод Power (1). Также конструкция модуля предполагает, что будут использованы аккумуляторные батарейки CR2032. Если вы используете обычные, то нужно отпаять резистор (2), иначе модуль будет постоянно заряжать обычную батарейку, тем самым убивая её.
Общий алгоритм работы программы:
- Просыпаемся по Вотчдогу
- Снимаем текущие данные по времени и дате
- Если дата изменилась, считаем количество прошедших дней для каждой помпы
- Если число прошедших дней совпадает с периодом работы в настройках — проверяем час.
- Если час с модуля времени равен часу указанному в настройках для помпы, подаем напряжение на Пин помпы далее задержка кода (равная интервалу полива из настроек), отключаем напряжение на Пине, сбрасываем счетчик прошедших дней для данной помпы.
- В каждом цикле уходим в сон
- При удержании кнопки активизируется дисплей и отображает информацию. При смене минуты в модуле времени дисплей отключается.
Хотел бы услышать ваши рекомендации по доработке.
Скетч и библиотеки
§
Всем привет!
Сегодня я закончил сборку автономной системы автополива для комнатных растений, чем и спешу поделиться. В последнее время участники форума мало своих проектов выкладывают, решил это немного поправить.
Видео по моим системам автополива:
Первая система:
Если интерес остался, то дальше, собственно говоря, буду излагать свои мысли на тему систем автополива и опишу свой проект.
Мысли на тему концепции системы
У AlexGyvera было 2 проекта, связанных с автополивом: простейшая система на Digspark на 1 помпу и многоканальная система с дисплеем и кучей наворотов. Начал я с копирования простой системы. Мой опыт изложен в соответствующем разделе форума, повторяться не буду, вот ссылка:
https://dachniymir.ru/threads/Простой-автополив.35/
Многоканальную систему реализовывать не стал, т.к. для меня важным моментом была автономность. Не хочу что-то оставлять включенным в розетку на несколько недель, когда уезжаю в командировку или в отпуск. Супергибкие настройки через энкодер лично мне не особо нужны. Потратить пару минут несколько раз в год, чтобы перепрошить Ардуину для меня не проблема. Регулярно менять настройки у меня нет необходимости. В то же время мне понравилась идея системы с дисплеем. В простой системе на Digispark как раз не хватало информации о текущих настройках и оставшемся времени до ближайшего срабатывания.
Я решил сделать что-то среднее между этими 2-мя системами.
Многие добавляют в системы автополива датчики влажности почвы. В моем понимании такие датчики должны быть в системах полива для открытого грунта, чтобы не поливать растения, если недавно был дождь. В квартире можно подобрать оптимальные интервалы и продолжительность полива и нет необходимости усложнять систему лишними элементами.
В итоге родились следующие требования к системе:
- Автономная работа минимум 1 месяц
- Должна быть возможность настраивать количество поливаемых растений
- Время срабатывания помп должно настраиваться с точностью до часа
- Должно быть информирование:
- Текущие настройки для каждой помпы
- Сколько дней осталось до срабатывания каждой помпы
- Уровень заряда аккумулятора
- Индикация, что идет зарядка аккумулятора от солнечной батареи
Мой проект
Система состоит из 3х помп. Настройки работы каждой помпы задаются отдельно. Маленькие помпы можно использовать с гребенками — разветвителями на 3-4 крана. В итоге можно поливать до 12 растений. Помимо программных настроек работы помп, дополнительные настройки делаются кранами.
На дисплей выводится следующая «таблица»: строки – номера помп, столбцы информация по каждой помпе.
- ПР – период работы. Раз в сколько дней будет срабатывать помпа.
- ЧР- час работы. Указывается час (например «19» — помпа сработает в 19:00), кода сработает помпа.
- ВР – время работы помпы. Указывается в секундах на сколько включится помпа.
- ДО – дней осталось. Через сколько дней произойдет ближайший полив.
- Также выводится текущие время и дата
Можно программно отключить 2 и/или 3 помпу, тогда выводится информация только по активным помпам.
Меры по обеспечению автономности:
- 3 аккумулятора 18650
- Питание от солнечной батареи
- Ардуино уходит в Powerdown и просыпается по Watсhdog
- У Ардуино выпаял стабилизатор напряжения
- Дисплей Nokia
- Дисплей находится в выключенном состоянии, включается только после удержания кнопки, после этого через некоторое время опять выключается
- Все индикаторы либо выпаяны с модулей, либо вынесены на панель и включаются только при удержании кнопок.
Детали:
- Корпус из коробки для еды за 40р из Ашана
- Arduino nano
- Дисплей Nokia
- Модуль часов DS3231
- Аккумуляторы 18650 в холдере
- Повышающий модуль до 5В
- Понижающий модуль до 3,3В для дисплея
- Модуль зарядки аккумулятора TP4056
- Индикатор зарядки аккумулятора
- Солнечная батарея
- Электролитические и керамические конденсаторы, резисторы, светодиоды, полевые транзисторы
- Кнопки и выключатели
Схема
Сначала использовал Мосфет модули с Али, но они много места занимали, решил сделать батарею из Мосфетов с обвязкой из резисторов разъемы для крепления проводов винтами.
В целях энергосбережения отпаял у модуля DS3231 светодиод Power (1). Также конструкция модуля предполагает, что будут использованы аккумуляторные батарейки CR2032. Если вы используете обычные, то нужно отпаять резистор (2), иначе модуль будет постоянно заряжать обычную батарейку, тем самым убивая её.
Общий алгоритм работы программы:
- Просыпаемся по Вотчдогу
- Снимаем текущие данные по времени и дате
- Если дата изменилась, считаем количество прошедших дней для каждой помпы
- Если число прошедших дней совпадает с периодом работы в настройках — проверяем час.
- Если час с модуля времени равен часу указанному в настройках для помпы, подаем напряжение на Пин помпы далее задержка кода (равная интервалу полива из настроек), отключаем напряжение на Пине, сбрасываем счетчик прошедших дней для данной помпы.
- В каждом цикле уходим в сон
- При удержании кнопки активизируется дисплей и отображает информацию. При смене минуты в модуле времени дисплей отключается.
Хотел бы услышать ваши рекомендации по доработке.
Скетч и библиотеки
Автополивщик растений на arduino
Материалы и инструменты:
– Arduino Uno- Растение в горшке с сухой землёй- Водяной насос- Датчик влажности почвы со шлейфом- Силовой ключ (тройка) со шлейфом- Клеммник нажимной- Провод «папа-папа» ×1 шт- Провод «мама-папа» ×1 шт- Блок питания с разъёмом USB- USB кабель
Сборка:
Дисплей подключается к контакту 3 тройка-шилда. При соединении всех проводов данного типа важно удостовериться, что с контактом GND соединялся чёрный провод.Далее, силовой ключ подключается к контакту 5.
У помпы на концах проводов отсутствуют контакты, поэтому используется клеммник. Если есть навык в пайке контактов, тогда правильнее припаивать к проводам «Штырьковые соединители».Вот так выглядит подключённое питание:Далее, подключают сенсор влажности земли.
С помощью Arduino IDE программируется Arduino Uno прикреплённым ниже файлом. Сам сенсор влажности, конечно же, втыкается в почву. Подсоединяется конец трубки с водой в землю.
Если горшок весит немного, тогда автор рекомендует закрепить отдельно трубку так, чтобы растение не было перевернуто. Далее, помпа опускается в удобную ёмкость с водой, и подключается питание.
Калибровка:
Чтобы показания датчика были верными требуется провести несложную процедуру его калибровки. Потому что точность показаний напрямую зависит от кислотности почвы.1. При воткнутом в сухой горшок датчике записываются показания с дисплея. Это значение ничто иное как минимум влажности.2.
Цветок поливают водой и дожидаются пока вода не впитается полностью в землю, и показания сенсора остановятся на одном значении. Данные записываются и помечаются как максимальная влажность.3. В файле прошивки изменяются значения констант HUMIDY_MIN устанавливается минимальная влажность, и HUMIDY_MAX соответственно максимальная влажность.
Arduino Uno прошивается заново.
Масштабирование проекта
В данной статье описан способ полива всего для одного цветка. Но зачастую требуются поливать сразу несколько растений. Конечно, можно подключить к Arduino большее количество помп и датчиков влажности, но насколько это будет затратно. Автор в этом случае предлагает решение дешёвое и простое.
В трубке, которая подсоединена к помпе проделываются дырочки шилом, расстояние между ними около 30 сантиметров, в эти отверстия втыкаются стержни из использованной шариковой ручки.Горшки в доме,как правило, стоят в ряд, например, на подоконнике. Трубка ложится на горшки так чтобы каждое отверстие соответствовало горшку.
Только вот решение о поливе будет приниматься устройством лишь по одному горшку. Лучше всего это будет работать если горшки одинакового размера зачастую на подоконниках так и случается. Сохнуть почва в них будет примерно одинаково.
При желании и большом количестве растений у вас дома, можно подключать дополнительные помпы, и разделять все горшки по группам равным по размерам.
irrigator.rar [675 b] (скачиваний: 387)
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Идея
Описание
Исполнение
Итоговая оценка: 6.5
Делаем автополив комнатного цветка на 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;
// Процедура, включающая насос на время, заданное в volumevoid 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();}
Вот так выглядит конечный результат в работе:
- youtu.be/qHmjWkZ_seM — цветок
- youtu.be/3VdgH9uwMCY — устройство
В ближайшем будущем думаю сюда добавить сенсор уровня воды в резервуаре и датчик влажности почвы.
Код программы
// константы const int dw = 12; // датчик уровня воды на 12 пин const int dg = 11; // датчик влажности почвы на 11 пин const int nasos = 2; // управление насосом на 2 пин const int ledG = 3; // зеленый светодиод на 3 пин const int ledR = 4; // красный светодиод на 4 пин // переменные int dwS = 0; // состояние датчика уровня воды int dgS = 0; // состояние датчика уровня влажности почвы //установки void setup() { // объявляем пины светодиодов и насоса как выходы:
pinMode(nasos, OUTPUT); pinMode(ledG, OUTPUT); pinMode(ledR, OUTPUT); // объявляем пины датчиков и насоса как входы: pinMode(dw, INPUT); pinMode(dg, INPUT); } // рабочий цикл void 1оор(){ // считываем состояния датчика уровня жидкости dwS = digitalRead(dw); // если воды много — включаем зеленый, иначе красный if (dwS == LOW)
{ digitalWrite(ledG, HIGH); digitalWrite(ledR, LOW); } else { digitalWrite(ledG, LOW); digitalWrite(ledR, HIGH); } // считываем состояния датчика влажности почвы dgS = digitalRead(dg); // если почва сухая, включаем полив if (dgS == LOW) { digitalWrite(nasos, HIGH); delay(2000); digitalWrite(nasos, LOW); delay(30000); } else { digitalWrite(nasos, LOW); }
Относительно кода хочу сказать следующее. Для его упрощения я поставил команды delay, на которые сам же ругался. Из-за delay в один момент наше устройство застывает на 30 секунд (а может, придется поставить и больше).
Но в данном устройстве это не критично.
Если в итоге устройство будет поливать 10 растений и произойдет совпадение, что все надо полить одновременно, думаю, 300 секунд, которые придется ждать последнему растению, не так уж важны.
А вот для источника питания такое решение сыграет положительную роль: оно не позволит устройству включить 10 насосов одновременно.
Первый delay(2000) включает на 2 секунды насос, если у вас большое растение в большом горшке, то время надо увеличить, если насос очень производительный, то, наоборот, уменьшить.
Второй delay(30000) дает почве 30 секунд пропитаться водой, об этом я писал ранее. Возможно, это время тоже нужно регулировать.
Конструктивно устройство состоит из двух частей — электронной и механической. Электронную часть и элементы питания желательно поместить в корпус, чтобы случайные брызги не вывели электронику из строя. Можно задействовать не всю Arduino, а микроконтроллер, кварц с конденсаторами и стабилизатор питания на 5 В.
В этот же корпус помещаем микросхему uln2003, резисторы, выводим на лицевую панель светодиоды и устанавливаем разъем для подключения датчиков и насоса. Если насос мощный и uln греется, то в корпусе сверлим отверстия для вентиляции.
Дополнительный индикатор включения устройства устанавливать не нужно, один из светодиодов уровня воды включен всегда, он и выполнит эту функцию.
Корпус для электронной части можно изготовить из любого материала или подобрать готовый. Для емкости можно применить пластиковую бутылку или стеклянную банку подходящего размера, а можно склеить из пластика. Крепим датчик уровня жидкости и устанавливаем насос.
Если насос придется погружать на дно (а бывают и такие), то очень аккуратно изолируем все его токоведущие провода. От насоса до горшка с растением проводим трубку подходящего диаметра. Купить такую можно в магазине автозапчастей вместе с насосом или подобрать подходящую резиновую или силиконовую.
На ободе горшка придумываем крепление для трубки таким образом, чтобы при подаче воды не было брызг. Датчик влажности устанавливаем в непосредственной близости к трубке.
Чтобы стоящая рядом с растением стеклянная или пластиковая посудина не пугала окружающих своим видом, можно с помощью акриловых витражных красок придать ей авторский дизайнерский стиль.
Далее испытания. Не забывайте: от работы устройства зависит благополучие растения. Перед проведением практических испытаний проведите испытания стендовые, потестировав несколько дней устройство с горшком без растения. Земля в нем не должна быть залита или пересушена.
В случае необходимости датчик влажности углубите побольше или, наоборот, приподнимите повыше. Регулируйте в программе продолжительность работы насоса. Он не должен каждые пять минут выдавать по капле, но и не должен раз в неделю заливать землю.
По ходу эксперимента следите за температурой электронных компонентов.
Не допускайте перегрева!
Когда все отлажено, переходите к испытаниям практическим, взяв самое неприхотливое растение. Внимательно следите за состоянием растения, если что-то не так, останавливайте эксперимент до выяснения причин.
Если все нормально, подключайте к Arduino еще один датчик и насос, дописывайте код и автоматизируйте полив еще одного растения. Без дополнительного расширения портов Arduino справится с десятком растений.
Приложение.
Код без комментариев: const int dw = 12; const int dg = 11; const int nasos = 2; const int ledG = 3; const int ledR = 4; int dwS = 0; int dgS = 0; void setup() { pinMode(nasos, OUTPUT); pinMode(ledG, OUTPUT); pinMode(ledR, OUTPUT); pinMode(dw, INPUT); pinMode(dg, INPUT); } void loop(){ dwS = digitalRead(dw); if (dwS == LOW) { digitalWrite(ledG, HIGH); digitalWrite(ledR, LOW); } else { digitalWrite(ledG, LOW); digitalWrite(ledR, HIGH); } dgS = digitalRead(dg); if (dgS == LOW) { digitalWrite(nasos, HIGH); delay(2000); digitalWrite(nasos, LOW); delay(30000); }
else { digitalWrite(nasos, LOW); }}
О датчиках
Датчик влажности почвы лучше всего сделать графитовым, металлический подвержен электролизу и коррозии, в связи с чем его свойства со временем ухудшаются. Хотя в нашей экспериментальной установке нормально работают датчики из гвоздей и медной проволоки.
Датчик из гвоздей — самая простая конструкция. Для его изготовления нужен кусок пластика или резины, два гвоздя, провода и кембрик (изолента).
Датчик уровня жидкости можно сделать так же, как и датчик влажности почвы, а можно придумать конструкцию поплавкового типа. Второй вариант предпочтительнее. На рисунке 3 вариант такого датчика, где 1 — емкость с водой для полива и отметкой минимума, 4 — трубка из любого материала и стержень 3, который свободно ходит в трубке.
Трубку и стержень можно взять от старой шариковой ручки. Внизу на стержень крепится поплавок 2 (кусок пенопласта). В верхней, надводной, части конструкции на трубке размещаем на пластиковой пластине контакты 5, это и будут контакты датчика. Сверху на стержень крепим токопроводящую пластину 6. Ход стержня в трубке 1…2 см.
К контактам 5 припаиваем провода для подключения к Arduino. Трубка 4 неподвижно крепится внутри емкости.
Принцип работы датчика следующий. Когда воды много, поплавок 2 выталкивает стержень 3 до упора вверх, при этом пластина 6 не касается контактов 5.
Когда уровень воды опускается ниже отметки МИН, поплавок опускается вместе с уровнем воды и опускает стержень с пластиной б, которая, в свою очередь, касается контактов 5 и замыкает их между собой. Контроллеру остается только считывать состояние контактов 5.
Если лень возиться, можно купить похожие в автозапчастях, они там продаются как датчики уровня охлаждающей жидкости, цена самых простых 100 — 150 рублей.
Полив комнатных растений автоматически с помощью arduino
// установим все датчики влажности PIN ID
intmoisture1=A0;
intmoisture2=A1;
intmoisture3=A2;
intmoisture4=A3;
// объявим значения влажности
intmoisture1_value=0;
intmoisture2_value=0;
intmoisture3_value=0;
intmoisture4_value=0;
// установим выход реле для клапанов
intrelay1=3;
intrelay2=4;
intrelay3=5;
intrelay4=6;
// установим выход реле на насос
intpump=2;
voidsetup(){
// Объявим реле, как выход
pinMode(relay1,OUTPUT);
pinMode(relay2,OUTPUT);
pinMode(relay3,OUTPUT);
pinMode(relay4,OUTPUT);
// Объявим насос, как выход
pinMode(pump,OUTPUT);
// Откроем порт для мониторинга
Serial.begin(9600);
}
voidloop(){
// читаем значения с датчиков влажности
moisture1_value=analogRead(moisture1);
moisture2_value=analogRead(moisture2);
moisture3_value=analogRead(moisture3);
moisture4_value=analogRead(moisture4);
// проверяем, какое растение нуждается в воде
// и расскоментируйте нужную строчку для конкретного клапана
// установите значение требуемой влажности
//if(moisture1_value<=450){
// digitalWrite(relay1, HIGH);
//}
//if(moisture2_value<=450){
// digitalWrite(relay2, HIGH);
//}
//if(moisture3_value<=450){
// digitalWrite(relay3, HIGH);
//}
//if(moisture4_value<=450){
// digitalWrite(relay4, HIGH);
//}
digitalWrite(pump,HIGH);
digitalWrite(relay1,HIGH);
delay(500);
digitalWrite(relay2,HIGH);
delay(500);
digitalWrite(relay3,HIGH);
delay(500);
digitalWrite(relay4,HIGH);
delay(500);
digitalWrite(relay1,LOW);
delay(500);
digitalWrite(relay2,LOW);
delay(500);
digitalWrite(relay3,LOW);
delay(500);
digitalWrite(relay4,LOW);
digitalWrite(pump,LOW);
delay(500);
// убедитесь, что есть хотя бы одно растение, которое нуждается в воде
// если есть, включите насос
//if(moisture1_value<=450 || moisture2_value<=450 || moisture3_value<=450 || moisture4_value<=450){
// digitalWrite(pump, HIGH);
//}
// Оросите растение в течении 5 с
//delay(5000);
// Выключите насос
//digitalWrite(pump, LOW);
// Пройдитесь по каждому клапану и выключите их
//digitalWrite(relay1, LOW);
//digitalWrite(relay2, LOW);
//digitalWrite(relay3, LOW);
//digitalWrite(relay4, LOW);
// Подождите 5 минут и повторите процесс
//Serial.println(moisture1_value);
//delay(10000);
//delay(300000);
}
Пример кода
int min_value = 600; //предельная сухость
int max_value = 220; //нормальная влажность
int normal_value = 500; //высокая сухость
int value = 0; //полученное значение с датчика
int last_value = 0; //последнее влияющее изменение параметра датчика
int delta =50; //изменение, влияющее на работу помпы
int ralay = 6; //вывод реле
int pomp_work = 10; //время работы насоса в секундах
int analogPin = A0; //вывод датчика влажности почвы
int second = 0; //секунды
int off = 0; //счетчик времени, оставшегося до конца полива
int pause = 15; //время паузы после полива в минутах
void setup()
Serial.begin(9600);
pinMode(ralay,HIGH);
digitalWrite(ralay, HIGH);
void water()
int pomp_temp;
pomp_temp = pomp_work;
digitalWrite(ralay, LOW);
while(pomp_temp > 0 && value > norm_value)
delay(1000);
value=analogRead(analogPin);//обновляем значение влажности
pomp_temp—;
digitalWrite(ralay, HIGH);
second=0; //сброс счетчика секунд
off=pause;//установка таймаута между поливами
void loop()
value=analogRead(analogPin);
if (value>(last_value delta)||value<(last_value-delta))
Serial.println(value);
last_value=value;
if ((value>(min_value-value_sdvig)) && off<1)
water();
if (second>59)
second=0;
if (off>0) off—;
delay(1000);//пауза 1 сек
second ;
Решение задачи
Надо было определиться с:
- чем качать воду
- как считать объём воды, который ушёл на полив каждого горшка
- как определить, что надо поливать.
- как сделать индивидуальный полив. То есть каждый горшок сам по себе.
- ночью хочется спать, а эта штука шумновата.
Мозгами этого всего будет ардуино, точнее, atmega328 в исполнении PDIP-28, ибо паяю я так себе.
Пятый пункт с “тихими часом” решается с помощью микросхемы часов. В моём случае DS1302.
Решение было найдено весной, когда мне попалась ссылка на российский инет-магазинчик, в котором оказались небольшие насосы-помпы на 6В и, самое главное, счётчики расхода жидкости:
Датчик(слева) — импульсного типа, повесим его выход на пин, который поддерживает прерывание. и будем по этим импульсам считать протёкший по шлангу объём жидкости.
Два пункта решены. То,что счётчик на шланг 6мм, а насос — на 3мм, было решено аквариумным шлангом на 4мм, который просто размачивался в кипятке и натягивался. Стоимость шланга — 11-20руб за метр.
Спасибо зоомагазину “Бетховен” на водном стадионе, где мне удалось купить 20метров за 11руб и потом ещё добрать 28метров за 17руб. Аквариумный шланг ещё удобен тем, что его отрезки можно соединять нарезанными по 1.
5-2см кусками стержня от гелевой ручки, что весьма бюджетно относительно покупки соединителей(10-30руб в зависимости от продавца).
Да, дальше нам потребуется много-много аквариумного шланга и много-много проводов(у меня на 4 окна ушло почти 100м шланга и метров 150 провода. Но делаем скидку на то, что из-за особенностей окон приходилось ставить на дальнюю от основной электроники половину окна).
Итак. Нам есть, чем качать, и есть, чем измерять сколько накачали. Теперь надо раздать воду на кучу горшков. Независимо раздать. Идея с кучей сервомашинок и краников отпала из-за стоимости. Зато поиск по интернету дал идею с сервомашинкой и кучей стаканчиков. Первая версия работала на пластиковых стаканах на 0.
25(которые из чуток хрупкого пластика, а не самые дешёвые). Хорошо, но мало. Достать пластиковые пробирки подходящего диаметра (пара сантиметров) и ёмкости( 50 мл) оказалось жуткой проблемой в этом странном городе. Для второй версии была растёрзана старая формочка для льда, попавшийся под руку флакон от чего-то и два стакана.
И это заработало!
“Кран” сделан из завалявшейся трубки для аквариумана 4мм(купил на “птичке” много лет назад), двух Г-образных переходников(источник тот же).
Так как сервомашинка слабовата и я забыл сделать отступ от стены побольше, когда вырезал основание(материал-пластик для откосов окон), то используется второй Г-образник для того, чтобы не было перегиба шланга. Сервомашинка — TowerPro SG-90.
Управление доверим arduino
Для нее это тривиальная задача. Датчики одним контактом подключаем к пину Arduino и через высокоомный резистор подтягиваем к «земле», другим контактом — к 5 В питания Arduino.
Для выбора способа подключения насоса нам нужно знать ток, который он потребляет в режиме работы, причем обязательно при перекачивании воды; на холостом ходу ток может быть меньше.
Если ток меньше 3,5 А, то можно для подключения насоса применить транзисторную сборку uln2003.
Каждый выход uln2003 может управлять нагрузкой 0,5 А. Я подключил параллельно все семь входов и выходов для увеличения тока нагрузки: 7×0,5=3,5 А.
Если ток насоса больше 3,5 А, то можно поставить полевой транзистор, например irf630 (но к нему нужны дополнительные элементы). Этот транзистор выдерживает ток до 9 А.
Если вашему насосу требуется больший ток, то меняйте насос, а то у нас получится не поливалка, а брандспойт 🙂
Для питания автомата полива растений можно применить аккумуляторы от радиоуправляемых игрушек или сетевой блок питания. Выбранный источник питания должен быть рассчитан на ток, необходимый для насосов.
Я бы остановился на аккумуляторном питании, насосы включаются не часто и на короткое время, поэтому в блоке питания, включенном в сеть постоянно, нет необходимости.
Кроме того, со временем можно добавить в программу контроль заряда аккумулятора и сигнализацию необходимости зарядки.
Блок-схема управляющего алгоритма представлена на рисунке ниже. После запуска устройства в непрерывном рабочем цикле опрашиваются датчики и, исходя из состояния каждого датчика, выполняются действия. Датчик уровня воды управляет светодиодами. Датчик влажности почвы управляет насосом.
Программа простая, но требует корректировки в каждом конкретном случае. Особенно нужно уделить внимание паузе между включением и выключением насоса: чем меньше цветочный горшок и чем больше производительность насоса, тем меньше должна быть пауза. Также от размеров горшка зависит и пауза после выключения насоса.
После полива земля должна пропитаться, иначе, если влага до датчика не дойдет, то система включит полив еще раз. Оптимальный вариант — трубку подачи воды разместить рядом с датчиком, чтобы земля в районе датчика пропитывалась сразу.
Здесь же отмечу: уровень влажности для включения полива можно регулировать самим датчиком, погружая его на разную глубину.
Шаг 4. создание корпуса
Ниже вы найдете в архиве 3D-модель корпуса этой системы полива растений. Все перечисленные выше компоненты должны идеально поместиться внутри. Если вы хотите создать свой собственный корпус, убедитесь, что вы очень хорошо измерили размеры ЖК-дисплея и сенсорного датчика, чтобы можно было сделать корпус, который подходит им без проблем. Надеемся, что вы знакомы с 3D-печатью.
После того, как вы закончите распечатывать корпус, вы готовы все установить. Сначала мы делаем нижнюю часть, на которой мы прикрепляем все компоненты. Обрезаем картон по размерам основания корпуса. Следующим шагом является размещение ЖК-дисплея и сенсорного датчика в специальных вырезах в корпусе.
Если вы использовали прикрепленный файл для 3D-модели, компоненты будут идеально вписываться в вырез. В некоторых случаях вам придется подрихтовать края выреза, корпус слишком жесткий. Убедитесь, что соединительные провода достаточно длинные, чтобы не допустить вытягивания ЖК-дисплея.
Используйте скотч, чтобы закрепить сенсорный датчик на внутренней стороне корпуса. Используйте достаточное количество клейкой ленты, чтобы при прикосновении к ней датчик не ослабел. Теперь мы ставим водяной насос и датчик влажности почвы. Отсоедините перемычки от датчика и насоса и протяните их через отверстие в верхней части.
Последний шаг — размещение макета в корпусе. Поставьте корпус на бок и аккуратно поместите макет внутрь. Будьте осторожны, не нажимайте слишком сильно, чтобы провода не отсоединились. Возьмите картонный вырез, чтобы закрыть дно. Закрепите края лентой.