Умный дом: Автомат полива
Про умные дома вы, наверное, слышали. Многие идеи в этом направлении весьма футуристичны, но это не должно останавливать.
Некоторые казались фантастикой всего 20 — 25 лет назад, а сейчас применяются повсеместно. В ближайшее время все дома сильно «поумнеют» или хотя бы начнут «умнеть». Направление это не только перспективное, но и интересное, так что не стоит оставаться в стороне.
Вообще, умный дом — это очень сложная система датчиков, механических и электронных компонентов, управляемая по заложенной программе. Эта система следит за расходом (и утечкой) воды, газа, электричества. Управляет освещением.
Включает противопожарные элементы. Обеспечивает удаленное управление разными устройствами по телефону или СМС. Включает элементы защиты от краж и несанкционированного доступа.
Содержит устройства бесперебойного питания жизненно важных для всей системы блоков.
Основная задача таких систем — облегчить жизнь людям, переложив часть забот на автоматику. По этому принципу мы и будем работать, поручив часть домашней работы микроконтроллеру. Начнем, как всегда, с простого.
Автомат полива растений
Существует множество поливальных устройств, от примитивных, вроде марли, одним концом закопанной в горшок с растением, а другим погруженной в емкость с водой, до высокотехнологичных систем полива с электронным управлением. У первых качество и КПД полива невысокое, у вторых высока цена, а работают они по своему алгоритму, который менять нельзя.
Мы будем разрабатывать устройство универсальное, с возможностью функционального расширения, но при этом недорогое и эффективное.
Алгоритм работы автомата полива растений простой: высохла земля в горшке — поливаем, полили — ждем, пока высохнет. Вроде все просто на первый взгляд.
Составляем список необходимых компонентов: микроконтроллерная плата, насос, силовой ключ управления двигателем насоса, датчик влажности почвы, емкость с водой (на самом деле хорошо бы подключиться к водопроводу, но лучше не будем 🙂 Чтобы система была полностью автономной, необходимо ее оснастить устройством оповещения о расходе воды, например, зеленый светодиод — воды достаточно, красный — воды осталось мало, надо долить. Значит, нужен еще датчик уровня воды.
Насос для автомата полива растений
Из вышеперечисленного все, кроме насоса, изготовим самостоятельно. Насос подойдет любой маломощный. Можно поискать в старых и сломанных струйных принтерах или купить в автозапчастях насос для стеклоомывателя, самый простой я нашел за 90 рублей.
Важно: прежде чем подключать насос к готовому устройству, проверьте его в работе. Автомобильный насос может выдать фонтан в несколько метров; дома такое «поливание» могут не понять и запретить на корню. Подберите опытным путем оптимальное напряжение.
Автонасос рассчитан на питание от бортовой сети 12 В, на моем экземпляре достаточный напор появляется уже при напряжении 8…9 В.
Насос от принтера напора в несколько метров не даст, но с ним другая проблема: в принтере он качал чернила, а они очень трудно отмываются, и такой насос аккуратнейшим образом необходимо будет промыть.
О датчиках
Датчик влажности почвы лучше всего сделать графитовым, металлический подвержен электролизу и коррозии, в связи с чем его свойства со временем ухудшаются. Хотя в нашей экспериментальной установке нормально работают датчики из гвоздей и медной проволоки.
Датчик из гвоздей — самая простая конструкция. Для его изготовления нужен кусок пластика или резины, два гвоздя, провода и кембрик (изолента).
Датчик уровня жидкости можно сделать так же, как и датчик влажности почвы, а можно придумать конструкцию поплавкового типа. Второй вариант предпочтительнее. На рисунке 3 вариант такого датчика, где 1 — емкость с водой для полива и отметкой минимума, 4 — трубка из любого материала и стержень 3, который свободно ходит в трубке.
Трубку и стержень можно взять от старой шариковой ручки. Внизу на стержень крепится поплавок 2 (кусок пенопласта). В верхней, надводной, части конструкции на трубке размещаем на пластиковой пластине контакты 5, это и будут контакты датчика. Сверху на стержень крепим токопроводящую пластину 6. Ход стержня в трубке 1…2 см.
К контактам 5 припаиваем провода для подключения к Arduino. Трубка 4 неподвижно крепится внутри емкости.
Принцип работы датчика следующий. Когда воды много, поплавок 2 выталкивает стержень 3 до упора вверх, при этом пластина 6 не касается контактов 5.
Когда уровень воды опускается ниже отметки МИН, поплавок опускается вместе с уровнем воды и опускает стержень с пластиной б, которая, в свою очередь, касается контактов 5 и замыкает их между собой. Контроллеру остается только считывать состояние контактов 5.
Если лень возиться, можно купить похожие в автозапчастях, они там продаются как датчики уровня охлаждающей жидкости, цена самых простых 100 — 150 рублей.
Управление доверим Arduino
Для нее это тривиальная задача. Датчики одним контактом подключаем к пину Arduino и через высокоомный резистор подтягиваем к «земле», другим контактом — к +5 В питания Arduino.
Для выбора способа подключения насоса нам нужно знать ток, который он потребляет в режиме работы, причем обязательно при перекачивании воды; на холостом ходу ток может быть меньше.
Если ток меньше 3,5 А, то можно для подключения насоса применить транзисторную сборку uln2003.
Каждый выход uln2003 может управлять нагрузкой 0,5 А. Я подключил параллельно все семь входов и выходов для увеличения тока нагрузки: 7×0,5=3,5 А.
Если ток насоса больше 3,5 А, то можно поставить полевой транзистор, например irf630 (но к нему нужны дополнительные элементы). Этот транзистор выдерживает ток до 9 А.
Если вашему насосу требуется больший ток, то меняйте насос, а то у нас получится не поливалка, а брандспойт 🙂
Для питания автомата полива растений можно применить аккумуляторы от радиоуправляемых игрушек или сетевой блок питания. Выбранный источник питания должен быть рассчитан на ток, необходимый для насосов.
Я бы остановился на аккумуляторном питании, насосы включаются не часто и на короткое время, поэтому в блоке питания, включенном в сеть постоянно, нет необходимости.
Кроме того, со временем можно добавить в программу контроль заряда аккумулятора и сигнализацию необходимости зарядки.
Блок-схема управляющего алгоритма представлена на рисунке ниже. После запуска устройства в непрерывном рабочем цикле опрашиваются датчики и, исходя из состояния каждого датчика, выполняются действия. Датчик уровня воды управляет светодиодами. Датчик влажности почвы управляет насосом.
Программа простая, но требует корректировки в каждом конкретном случае. Особенно нужно уделить внимание паузе между включением и выключением насоса: чем меньше цветочный горшок и чем больше производительность насоса, тем меньше должна быть пауза. Также от размеров горшка зависит и пауза после выключения насоса.
После полива земля должна пропитаться, иначе, если влага до датчика не дойдет, то система включит полив еще раз. Оптимальный вариант — трубку подачи воды разместить рядом с датчиком, чтобы земля в районе датчика пропитывалась сразу.
Здесь же отмечу: уровень влажности для включения полива можно регулировать самим датчиком, погружая его на разную глубину.
Код программы
// константы 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); }}
Источник: http://eschemo.ru/umnyiy-dom-avtomat-poliva/
Система управления поливом на Arduino
В предыдущей статье мы рассказали об организации автоматического полива на дачном участке с возможностью мониторинга состояния и управления системой через интернет. Вот так выглядит поливальная установка:
В этот раз мы более подробно рассмотрим устройство шкафа управления и интерфейс пользователя для управления системой через веб-приложение.
В основу системы управления легло комплексное решение для организации дистанционного мониторинга и управления удалёнными объектами «DUSPRO». О нём можно прочитать в разделе «Наши проекты».
Система управления автоматическим поливом
На следующем рисунке приведена структурная схема комплексного решения для дистанционного управления и мониторинга системы полива.
Контроллер системы управления собирает данные с датчиков системы и с помощью GPRS-модема передаёт их на сервер. В ответ он получает от сервера команды для управления исполнительными устройствами системы (поливочными клапанами, насосом и клапаном блокировки долива воды в резервуар).
Пользователь имеет доступ на сервер через веб-приложение с ПК или мобильного устройства.
Шкаф управления системой
На следующем рисунке приведена структурно-функциональная схема шкафа управления.
Центром системы является контроллер Arduino Mega.
Контроллер управляет модемом SIM900 с помощью AT-команд, передаваемых через COM-порт.
Таким образом осуществляется обмен данными с сервером.
Возникают случаи, когда модем может попасть в «сложную ситуацию». Иногда для того, чтобы восстановить его нормальную работу требуется аппаратная перезагрузка. Для этого в систему добавлен модуль перезагрузки модема, представляющий собой электромагнитное реле, через которое скоммутировано питание модема.
Сигналы от датчиков уровня воды в резервуаре принимает модуль ввода дискретных сигналов. Датчики имеют выход типа «сухой контакт». Подробнее о них можно почитать тут.
Для того чтобы завести дискретные сигналы от датчиков в контроллер, пропитываем их напряжением 24 В от блока питания.
Модуль ввода представляет собой дискретные входы с опторазвязкой, преобразующие входной уровень напряжения в 24 В в уровень 5В, понятный контроллеру.
Для измерения температуры на улице к контроллеру подключен датчик DS18B20. Контроллер производит с ним обмен по интерфейсу OneWire.
В данной статье мы не будем приводить электрическую схему шкафа управления, код программы Arduino и подробно рассказывать о работе веб-сервера, т.к. это тема для отдельного разговора. Для тех, кто хочет углубиться в эту тему мы подготовили серию уроков.
WEB приложение для управления поливом через интернет
Через веб-приложение пользователь:
- отслеживает текущее состояние системы: уровень воды в баке, температуру на улице, состояние линий полива(полив идёт/полив остановлен).
- управляет поливом (включает и выключает необходимые линии) в ручном режиме
- составляет расписание для полива в автоматическом режиме
- получает оповещение о важных событиях в системе (потеря связи, низкий уровень воды в баке и т.д.)
- анализирует график изменения температуры на улице за время работы системы
- просматиривает события, происходящие на объекте, пользуясь журналом событий
Главный экран управления и мониторинга состояния системы
На главном экране веб-приложения отображаются текущие состояния всех узлов системы: показания датчиков уровня воды в резервуаре и датчика температуры (таблица слева), а также состояние электромагнитных клапанов всех контуров полива (таблица справа).
На этом же экране пользователь может вручную включить или выключить любую из линий полива.
В нижней части экрана отображаются последние события, произошедшие на станции.
Экран управления расписанием полива в автоматическом режиме
На данном экране пользователь может создать расписание для работы системы в автоматическом режиме, чтобы сервер включал и выключал полив на станции без участия пользователя.
Журнал событий
В журнал заносятся важные события на станции: включение/выключение линий полива, обрыв связи со станцией, восстановление связи со станцией, температура на улице ниже заданного уровня, резервуар пуст, резервуар почти пуст.
Оповещение пользователя
В настройках станции пользователь может назначить некоторые события как «предупредительные» или «аварийные». При возникновении этих событий сервер будет оповещать пользователя по электронной почте и (или) СМС. Это могут быть события обрыва связи со станцией, низкий уровень воды в резервуаре или низкая температура на улице.
Нижний предел температуры и время таймаута, после которого система регистрирует обрыв связи, — задаются в настройках.
График уличной температуры
На этом экране отображается график изменения температуры в течение заданного промежутка времени (10 мин., 30 мин., час, 12 часов, сутки, неделя, месяц).
Дальнейшее развитие системы
В дальнейшем планируется повысить информативность системы, дополнив её счётчиками воды. Показания счётчиков будут видны пользователю через веб приложение. На основании этих данных можно будет строить графики расхода воды за длительный период времени.
Кроме того, планируется оборудовать линии полива датчиками влажности почвы и управлять поливом, руководствуясь их показаниями. Это позволит создать ещё более комфортные условия для роста растений и повысить экономию воды.
Заключение
Для тех, кто хочет более подробно изучить технологию обмена данными с удалённым сервером с помощью Arduino и модема SIM900, мы подготовили серию уроков на эту тему. Вот первый из них.
Источник: http://lazysmart.ru/avtomatika-v-by-tu/sistema-upravleniya-avtomaticheskim-polivom/
Делаем автополив комнатного цветка на 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();
}
Вот так выглядит конечный результат в работе:
- youtu.be/qHmjWkZ_seM — цветок
- youtu.be/3VdgH9uwMCY — устройство
В ближайшем будущем думаю сюда добавить сенсор уровня воды в резервуаре и датчик влажности почвы.
Источник: http://www.pvsm.ru/arduino/53863
Автополивщик растений на Arduino
В данной статье будет описано, как собирается небольшой агрегат для автоматического полива растений на базе 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
Источник: https://USamodelkina.ru/6898-avtopolivschik-rasteniy-na-arduino.html
Автоматический полив растений
Опубликовано 13.10.2013 19:19:00
Вступление.
Пару лет назад увлёкся разведением разных экзотических растений. Благо, подоконники (почти полметра на полтора) позволяют поставить довольно много горшков. Но в прошлом году, как может помнят москивичи, жара была неслабая. Так как работаю я в офисе, то удавалось поливать только утром и вечером. И этого явно было маловато.
Плюс ещё отъезды на дачу на выходные… А один только полметровый куст эвкалипта способен за два дня и ночь испарить 2-3л воды и успеть завянуть.
Фитильная система не понравилась тем, что она нерегулируема и жрёт место на окне. Которого и так мало.
Лейки-пипетки типа plant genie не подошли по причине того, что даже познав дао втыкания их в горшок(не так воткнул — или не капает или вытекает за пару часов), их надо или так много, что не хватает площади горшка или горшок небольшой и просто переворачивается. Ну и на заявленные две недели этих 0.22л тоже не особо хватает.
Решение задачи
Надо было определиться с:
- чем качать воду
- как считать объём воды, который ушёл на полив каждого горшка
- как определить, что надо поливать.
- как сделать индивидуальный полив. То есть каждый горшок сам по себе.
- ночью хочется спать, а эта штука шумновата.
Мозгами этого всего будет ардуино, точнее, 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.
Мерзкие мелочи(грабли):
- С насосом: он хорошо качает только в случае, когда шланг уже заполнен жидкостью. Ну что ж, ставим на шланг обратный клапан, перед которым врезаем тройник и кран(всё покупается в аквариумных ларьках). Так как обратный клапан имеет некоторое сопротивление потоку, то кран необходим для первичной прокачки, пока вода не пройдёт сквозь насос. Советую на конец крана посадить второй кусок шланга, который опустить в канистру. Мало ли…
- Сервомашинка “плавает” по углам при небольших шагах и слегка плавающем питании. Это ограничивает возможности уменьшения приёмных стаканов. Всегда настраиваем так, чтобы “мёртвые точки” движения сервы не позволяли пролить мимо крайних стаканов.
- сервомашинка даёт ошибку порядка 5-10градусов,когда её поворачиваешь на небольшие углы. Лечится тем, что после каждого налива в стаканчик поворачиваем её до нуля.
- Все соединения после насоса надо сажать или на клей или хотя перехватывать проволочкой. Пару раз китайский БП перед смертью выдавал выше 6В и соединения распадались. Канистра воды на полу — тот ещё подарок.
Датчики
В виду того, что денег у нас немного и хочется дешёво, но достаточно хорошо, то делаем резистивные датчики влажности.
Используем просто полоску текстолита с двумя вытравленными и залуженными дорожками. Важно нарезать все датчики для одной схемы с одного листа, потому что иначе будет сильный разброс значений, что плохо. В моём варианте это полоска 10х35мм с двумя дорожками по ~3мм по краям и зазором в 4мм.
Сигнал с таких датчиков аналоговый, соответственно, будем использовать аналоговые входы atmega328. Схема подключения стандартный вариант с делителем напряжения, где в одном плече(что к земле) переменный резистор, а на втором(+5В) — наш датчик. С середины снимаем показания аналоговым входом. Чем суше грунт, тем меньше показания датчика.
При использовании подобных датчиков надо иметь в виду, что электролиз в мокром грунте играет против нас. Решение простое: вешаем между питанием и датчиками ЭМ-реле, которое включаем за 1-2с до снятия замеров (время на стабилизацию, подобрано опытным путём) и выключаем сразу после снятия замеров.
Реле выбрано за то, что даёт физический разрыв цепи и у нас датчики не будут постоянно “под фазой”. Да и растениям вряд ли полезен такой “электрический грунт”.
Как показала практика, за почти полгода работы из полусотни датчиков пришлось только два протереть от лишайника, который пошёл по горшку после пересадки в новый грунт. Остальные работают.
Плодим входы
Как было видно на слайде выше, у нас 17 стаканов-приёмников. Горшков на окне 16. А на atmega328 только шесть аналоговых входов. Решение простое: используем расширители аналоговых входов.
Из того, что достать просто есть два варианта: 8-ми канальные микросхемы HCF4051BE и 16-ти канальные CD4067BE. Первые мне попались в продаже сразу и вменяемые деньги в районе 20руб/шт. Зря я это сделал… Пожалел потом много раз.
Проблема проста: у HCF4051BE аналоговые входы разбросаны не по порядку ножек, а у CD4067BE — всё идёт подряд. Новую версию буду делать на них.
Общие штрихи
Итогом второй попытки стала вот такая разводная коробка 10х10х4см
В виду отсутствия в пределах досягаемости нормального лазерника и некоторой лени, всё сделано на макетной плате.
Я не сумел найти общий язык с DS1302 по поводу резервного питания (после сбоя основного питания микросхема упорно превращалась в утюг) и поэтому ограничился тем, что в линию питания вставил диод Шоттки и после него впаял ионистор на 0.1Ф. Работает.
Чтобы можно было перенастраивать без перепрошивки, поставил bluetooth модуль и впилил в прошивку простенький интерпретатор команд и сохранение данных в eeprom. учитывая,что перешёл на программатор, в новом варианте конфиг буду писать во внешнюю микросхему eeprom. Заодно туда можно будет побольше данных сохранять.
Ещё обнаруженные проблемы:
- шланг со временем зарастает водорослями, которые забивают его полностью. Кажется, зелёный шланг такому не подвержден. Но он был дороже.
- на поверхности земли горшков, где требуется постоянная влажность, начинают расти водоросли. Лечится керамзитом или мелкими камушками.
- датчики жидкости издыхают. не все и не всегда, но из шести за полгода три уже заменены.
И на последок пара видео:
Краткий обзор:
И просто видео работы версии на более прилично выглядящих одноразовых рюмках:
Схема и pcb-разводка в формате diptrace будут позже, после обкатки нормальной версии, сделанной ЛУТом, а не на макетной плате.
Обновление: Вылезла проблема: изменение количества датчиков плохо сказывается на точности серв (питание просаживается). Подгонять каждый раз — занятие крайне нудное.
Решением стало прикрепить на трубку “крана” водораздатчика геркон(МКА-10110/советский аналогичного размера), на сервомашинку приклеить старую CD-болванку и в нужных точках просверлить отверстия и вклеить в них неодимовые магнитики цилиндриком 2х5мм. Получилось следующее(магнитики подчёркнуты красным):
Исходники лежат на github, в поддиректории pcb — платы под ЛУТ в формате diptrace. Платы разведены под микросхемы CD4067BE, прошивка также под них сделана. Остальное вроде в коде откомментировано.
В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.
Источник: http://zelectro.cc/automatic-plant-watering
Система автоматического полива. Контроллер
Речь в статье пойдет о контроллере автоматического включения полива зеленых насаждений на моем приусадебном участке.
Эта статья является логическим продолжением темы о системе автоматического полива. Начало было положено в статье о форсунках. Трубы закопаны, распылители установлены, теперь надо сделать так, что бы не бегать постоянно к кранику и не крутить его туда, сюда. Речь пойдет только о контроллере, про исполнительные устройства будет написана еще одна статья.
Требования к контроллеру были установлены следующие: 1. Включать и выключать полив по заранее установленному времени; 2. Следить за наличием дождя за бортом, зачем поливать если идет дождь; 3. Следить за температурой воздуха;
4. На перспективу: контролировать уровень в бочке с водой.
Требования есть, надо делать. В качестве мозга выбран микроконтроллер ATmega328 распаянный на платке Arduino Nano. Это удобно, так как на этой платке есть разъем мини usb, что позволяет менять прошивку в ходе отладки, не извлекая контроллер из платы.
Время будет отсчитывать микросхема часов реального времени DS3231, в ней встроен датчик температуры и с помощью него организована температурная корректировка показаний. DS3231 более точна в отличии от дешевой ds1307. Управление исполнительными механизмами будет организовано через реле. Для отображение информации я выбрал LCD экран на 20 знаков в 4 ряда.
Для навигации выбрал платку с распаянными кнопками. Температуру и влажность решил измерять датчиком DH22, в отличии от DH11 он более точный и позволяет измерять влажность до 100%. DH22 будет трудится в паре с аналоговым датчиком воды (для меня дождя). Контроллер и начинка будут запитаны через плату с регулятором напряжения LM2596.
Питаться вся сборка будет от напряжения 12В, которое обеспечивает щит низковольтного питания. Для наглядности привожу картинки всех составляющих, которые были заказаны в китайском магазине.
DS3231
Arduino nano
Реле
LCD 2004
Кнопки
Датчик дождя
Датчик влажности и температуры
Модуль питания
Что бы эта вся требуха не болталась я разместил ее на кусочке фольгированного текстолита 10х15 см, который является как бы «материнской платой».
Рисуем печатную плату (она же материнская), параллельно чертим схему и пишем программный код.
Вроде все сверял и проверял, а все равно попутал порты контроллера (ардуино), поэтому на фотографии готовой платы видно много перемычек, в архиве для скачивания и на скриншоте из Sprint-Layout уже все исправлено.
Схема и ее краткое описание. (схема кликабельная).
Схема не представляет собой чего то сложного, так как вся конструкция собрана из модулей, остается их только соединить между собой. Питание всей логики и исполнительных элементов осуществляется с помощью DC-DC преобразователя на микросхеме LM2596.
Эту сборку можно заменить простой LM7805, мне было удобней поставить сборку, что бы меньше паять. Далее по схеме индикаторный светодиод, который информирует о наличии напряжения после регулятора.
Модуль клавиатуры — это по сути делитель напряжения, он подключен к аналоговому входу ардуино на котором организовано АЦП, напряжение которое приходит на лапку контроллера определяет какая кнопка нажата. Значения делителя лучше измерять по факту, а то кто знает, что там китайци запаяют. Модуль часов реального времени сидит на шине I2C.
Можно заметить, что шина данных не подтянута к плюсу питания, так как подтяжка присутствует на самом модуле. Модули реле так же имеют на своей плате подтяжку к плюсу питания, это означает, что реле включается при низком логическом уровне (по уровню LOW).
На всей схеме мы видим всего лишь два транзистора, один для включения пищалки, которая сигнализирует своим писком о состоянии системы, ошибках и превышении каких то там пределов. Второй включает подсветку экрана, логика включения отработана на программном уровне.
Дисплей подключен к контроллеру по 4-х битному интерфейсу, хотя выгодней его подключить к шине I2C, тогда останется больше цифровых портов для подключения разных приблуд. На схеме все выводы подписаны, нужен только даташит к экрану. Резистор R2 предназначен для регулировки контрастности.
Датчик влажности и температуры выбран именно DH22 из за более точных показаний в отличии от DH11, о чем, в принципе, я уже говорил. Датчик дождя представляет из себя простую пластинку с дорожками и отдельную платку с которой организован выход двух сигналов — аналоговый и цифровой. Я заиспользовал цифровой, так как мне надо знать идет дождь или нет. Датчик дождя работает программно в паре с DH22 что бы отсечь ошибочные срабатывания. Все входы и выходы выведены на клеммные колодки.
На схеме видно 3 выключателя и два квадратика с надписями «Расход» и «Давление». Это сделано на перспективу для контроля заполнения емкости запаса воды. Датчики соответственно для мониторинга давления и расхода в подающей магистрали. Датчики предполагаются только аналоговые. Можно применить датчики передающие информацию по протоколу I2C, но это уже совсем другая история.
А вот и печатная плата. Тут особо рассказывать нечего. Все найденные ошибки я, вроде, исправил. Тут видно маленькие платки для распайки клемм и выносных датчиков.
А вот фото собранного девайса. Куча перемычек — это мои ошибки. :)))
Назначение кнопок для дальнейшего понимания обозреваемого:
В итоге программный комплекс получился следующий.
В контроллере организовано две независимые ветки полива с тремя таймерами включения и выключения, которые выставляются независимо друг от друга. На картинке видно только первую линию, вторая аналогичная. Переключается индикация кнопками «вверх» и «вниз».
Запрет на полив организован по температуре: запрет на полив при высокой температуре, чтоб не сжечь растения летом, и при низкой, чтоб «не заморозить» :))). Диапазон рабочих температур можно выставить в меню.
Контроллер может работать с двумя системами подачи воды: от водопровода и от бочки с насосом. В схеме присутствует четыре реле, два из них управляют клапанами на линиях полива, одно включает насос и последнее включает подпитку бака. При превышении или понижении уровня высвечивается ошибка и пищит пищалка. По логике при низком уровне насос не включится, при переполнении — включается.
В верхней строке отображается текущее время, температура и влажность на улице. Видно информационные пиктограммки о том идет ли сейчас дождь, включился полив, включение подпитки бака с водой, переполнения бака, низкий уровень в баке.
В самой нижней строке экрана могут мигать ошибки: 1. Еrr 001 — нет связи с датчиком DH22 (эта ошибка высвечивается в верхнем тулбаре); 2. Еrr 002 — превышен уровень в баке;
3. Еrr 003 — слишком низкий уровень в баке.
Включить полив можно и в ручную, удерживая кнопку «Set»:
Для удобства пользования организовано меню. При нажатии на кнопку «влево» она же «menu» открывается первая страница где можно выбрать настройки первой, второй линии и настройки, собственно, системы. Пройдемся по порядку.
Настройки таймеров для линии 1. Здесь можно настроить три независимых таймера включения — выключения. Для линии 2 все точно так же.
Первые значения это время включения, второе время выключения, а ниже флажок включен таймер или нет. При нажатии на кнопку «Set» происходит сохранение заданных значений. При нажатии на кнопку «влево, menu» происходит возврат в предыдущее меню без сохранения значений. Навигация осуществляется кнопками «влево», «вправо». Настройка значений кнопками «вверх», «вниз».
Следующее подменю — подменю Setup. Здесь можно выбрать пункт настройки часов, температурного диапазона включения полива, а так же очистить энергонезависимую память, то есть сбросить все настройки таймеров.
Настройка часов аналогична настройке таймера полива.
Настройка температурного диапазона полива. Первое значение — это нижняя граница, второе — верхняя.
Меню очистки память. Здесь кнопками «вверх», «вниз» требуется выбрать необходимое действие и подтвердить его нажатием кнопки «Set».
В конце статьи можно скачать архив со схемой, печатными платами и прошивкой. В прошивке присутствуют коментарии для облегчения понимания. На момент написания статьи версия прошивки 2.04. Если найду ляпы, прошивку обновлю.
Для всей этой конструкции был закуплен корпус:
А вот контроллер в процесе монажа:
А вот уже смонтирован:
Датчики разместил возле крыши сарая. В место корпуса отлично подошла баночка из под крема.
А тут мы видим узел подачи воды к форсункам. В качестве электроприводной арматуры выступает китайский электромагнитный клапан:
Конструкция подключения временная. Она будет изменена когда доделаю вторую ветку системы полива. А пока так.
Архив со схемой, печатными платами и прошивкой: Клац…
Так же Вам может понадобится дополнительная библиотека «DHT.h» и она так же присутствуюет в вышеизложенном архиве.
Как устанавливать библиотеки расписано тут: Клац…
Для работы с выложенным материалом вам понадобятся: 1. sPlan 7.0; 2. Sprint-Layout 6.0;
3. Среда разработки Arduino IDE 1.6.5
PS. Я вижу люди мою статью читают, поэтому пишите в коментах (спам я не рассылаю), дам пояснения, правильно я сделал или нет. Не стесняйтесь.
Источник: https://3dxsite.wordpress.com/2016/01/04/sistema_poliva_kontroler/
Контроллер системы автоматического полива на Arduino
А вот и мой самодельный контроллер системы автополива.
Контроллер автополива в разобранном виде |
Контроллер собран и готов к работе! |
Схем будет несколько, так как собирал я его по модульной системе. Это удобно тем, что если потом захочется что-то улучшить – не нужно переделывать всё.
Итак, из чего состоит контроллер? Для тех, кто не в курсе, Arduino – это такие небольшие платы с микроконтроллером, который можно запрограммировать для выполнения почти каких угодно задач. Для него разработан специальный значительно упрощённый язык программирования и куча обучающих материалов.
Начать работать с ним может человек, достаточно далёкий от программирования и электроники. Каким и я был в своё время. Сделал я её уже давненько, как эксперимент.
Схема Arduino Leonardo. |
Исходники делал на основе официальной схемы с сайта https://www.arduino.cc/ в Протеусе, Ссылки на все исходники внизу.
Так как делал на односторонней печатной плате – то у меня не получилось развести её так, как надо – поэтому расположение выводов не соответствует официальному. Поначалу мне удалось залить в Ардуино загрузчик, и потом заливать в неё скетчи через USB.
Но потом по непонятным причинам он слетел, и пришлось программировать через ISP-разъём при помощи программатора (у меня это USBasp). В общем, если кто захочет повторить контроллер полива – то есть два варианта.
Или сделать такой же самодельный Arduino, как у меня, или проще купить готовый Arduino Leonardo, и переразвести плату контроллера под стандартное расположение его выводов. Плату контроллера системы автополива я сделал двустороннюю, травил популярным методом лазерно-утюжной технологии.
Схема главной платы контроллера системы автоматического полива |
Как видите, больше всего на плате всяких разъёмов. По сути, это по большей части просто разводка от выводов Arduino до других компонентов.
Так что, стоит запастись вот такими вилками и розетками:
Кроме того, на плате расположены 6 транзисторных ключей Q1 – Q6 с обвязкой, к которым и подключаются электромагнитные клапаны. Транзисторы можно брать почти любые (биполярные NPN, или полевые N-канальные), с напряжением от 30 вольт, и силой тока от 1А. Я остановился на BD135. Перед тем стояли полевики – но они почему-то попробивались.
Микросхема сдвигового регистра 74HC595 нужна для того, чтобы, используя только 3 вывода Arduino , управлять всеми 6-ю транзисторами. Соединяется с микроконтроллером через шину SPI.
Разъёмы J14 – J16 пока не используются, в будущем могут быть использованы для подключения каких-либо аналоговых датчиков. С землёй они соединены через транзистор – чтобы можно было программно отключать питание на датчики и таким образом экономить энергию. Модуль я сделал сам, а сейчас – так проще купить готовый в любом магазине.
Микросхема часов реального времени нужна для того, чтобы при отключении питания сохранять данные о времени (и продолжать отсчитывать дальше). Для этого она получает питание не только от +5 вольт, как и вся схема – но ещё и имеет отдельную литиевую батарейку. DS1307 отличается весьма малым энергопотреблением – поэтому этой батарейки хватает на несколько лет.
Очень распространённый в самоделках экранчик. Продаётся в большинстве онлайн радиомагазинов, стоит дёшево. Имеет разрешение 84 на 48 точек, и к нему есть несколько библиотек для Arduino. Я для экономии выводов подключал к выводам ICSP Arduino Leonardo, и немного переделал стандартную библиотеку – так что если кто будет повторять – нужно брать мою (PCD8544_Leo).
Она будет в архиве. Также нужно учитывать, что разрешённое напряжение для выводов экранчика – 3.3 В, тогда как на выводах Arduino напряжение 5 В. И хотя при экспериментах я соединял их просто так без последствий – топри длительной работе вполне вероятен выход экрана из строя.
Поэтому я сделал простенький конвертер уровней по принципу резистивного делителя напряжения, туда же влепил линейный стабилизатор на 3.3В на питание. Клавиатура состоит из 5 тактовых кнопок. Для того, чтобы обойтись не пятью, а только тремя выводами Arduino, кнопки хитро соединены с выводами через диоды.
А потом уже в программе по сочетанию высоких и низких уровней напряжения на трёх вводах определяется, какая именно кнопка нажата. Вот видео, где на всё это можно посмотреть:
Контроллер автополива в разобранном виде
Но всё, что я описал – это куча железа без программы для микроконтроллера. Писал я её долго и упорно, несколько раз переписывал куски кода…
Но в итоге работает! В программе реализована возможность разрешать/отключать автополив и набор воды в бак, устанавливать дни недели, когда осуществлять полив, выбирать общую длительность полива и длительность включения каждого клапана, корректировать время… И вроде без явных багов.
По крайней мере, в моё отсутствие полив производится, вода в бак набирается. В следующем видео можно увидеть меню настроек и простые тесты контроллера.
Контроллер собран. Обзор меню и настроек, тестирование.
Ну, а видео того, как работает система полива непосредственно на моей даче – в моём предыдущем посте.
Источник: http://homelectronix.blogspot.com/2015/09/wateringsystem2.html