Автоматическая система полива растений на ардуино
Содержание:
- Процесс сборки
- Как собрать?
- Дополнительные улучшения системы
- Пример кода для Arduino для проекта «Автополив»
- Необходимые инструменты и периферия для реализации проекта «Автополив» на базе микроконтроллера Arduino
- ИНСТРУКЦИИ ПО ЭКСПЛУАТАЦИИ
- Подготовка к сборке
- Автоматический полив
- Проведение калибровки
- Компоненты и их описания
- Шаг 3. Код системы полива
- Необходимые компоненты
- Масштабирование решения
- Исходный код программы
- Шаг 5: Подключаем плату Arduino
- Насос для автомата полива растений
- Заключение
- Заключение
Процесс сборки
Чтобы получить в распоряжение готовый для настройки ирригатор, потребуется выполнить следующие действия:
- Первоначально установить плату Troyka Shield на Arduino Uno.
- К пину A0 через Troyka Shield подключается сенсор определения влажности;
- Также посредством Troyka Shiled к основной платке подключается дисплей. Здесь пин CS нужно соединить с 9-ым пином Troyka Shield, а к соответствующему выходу на Troyka Shield цепляем SPI пины дисплея.
- Силовой ключ присоединяем к четвертому контакту.
- Затем к силовому ключу подводим коммутирующее напряжение через разъем с подписями P+ и P–.
- Водяной насос подключается к силовому ключе через пины L+ и L−.
В результате наша небольшая схема готова и должна выглядеть так:
- Теперь щуп датчика влажности втыкаем в почву с уже посаженным в нем растением.
- Конец шланга тоже помещается в почву. Если вес горшка меньше 2 кг, желательно дополнительно трубку укрепить. Это исключит риск опрокинуть горшок с нашим растением.
- Последним шагом опускаем насос в резервуар с водой и запитываем нашу схему.
Теперь ирригатор собран и потребуется провести его дополнительную настройку.
Как собрать?
Возьмите бочку и сделайте в ней 2 отверстия для датчиков уровня воды. Датчик максимального уровня должен находится в 10–15 сантиметрах от верхнего края, датчик минимального – примерно на середине бочки. Установите датчики в отверстия.
Нижний датчик будет включать насос при низком уровне воды. Верхний датчик будет отключать насос. Так вы сможете поддерживать постоянный уровень воды и продлите срок службы насоса.
Возьмите датчик скорости потока жидкости и подключите к нему шланг от насоса. Шланг должен иметь на конце гайку с трубной резьбой ½ дюйма
Обратите внимание, на корпусе датчика изображена стрелка, показывающая направление движения воды. В данном случае стрелка должна показывать в направлении от насоса к бочке
К другой стороне датчика присоедините такой же шланг с гайкой на конце.
Возьмите Iskra JS и установите на неё Troyka Shield.
Подключите реле в форм-факторе тройка модуль через трехпроводной шлейф мама-мама к Troyka Shield к пину .
Возьмите герметичный короб, разместите в нем Iskra JS и реле. Для подключения насоса и датчиков вам потребуется сделать отверстия в коробке. Сделайте их минимально возможного размера. Сделайте отверстия для шлейфов двух датчиков уровня, датчика скорости потока жидкости и розетки питания насоса.
Проденьте в отверстия шлейфы от каждого датчика. Подключите шлейф от нижнего датчика уровня к пину , а верхнего — к пину . Шлейф датчика скорости потока жидкости подключите к пину .
Теперь подведите питание к компонентам устройства. Возьмите удлинитель с вилкой на конце и зафиксируйте контакты в клеммнике.
Аккуратно разберите блок питания на 5 Вольт. Подключите проводами питание 220 Вольт, а USB-кабель USB — к Iskra JS.
Возьмите настенную розетку. Разберите её, подведите к одному гнезду розетки провод от клеммника. Второй провод подключите через реле. Один провод на реле подключите к центральной клемме, а второй к клемме NC, что означает «нормально разомкнутый» — напряжение на розетке будет при установленном высоком логическом уровне на Iskra JS.
Закройте крышку герметичной коробки и закрепите её на бочке.
Подключите вилку насоса к розетке.
Дополнительные улучшения системы
Когда автополив для комнатных растений будет настроен и готов к работе, следует воспользоваться следующими рекомендациями:
Хотя контакты датчика влажности позолочены, по мере эксплуатации они повергаются коррозии. Наиболее интенсивное коррозирование происходит во время подключенного напряжения. Однако срок эксплуатации сенсора возможно продлить в несколько раз, подключив в нему напряжение посредством силового ключа. Если требуется снять показатели — на датчик поступает питание, затем значения сохраняются и питание сразу же выключается.
Бывают ситуации, когда ирригатор работает продолжительное время, никто за ним не присматривает, а в емкости заканчивается вода. Если насос работает вхолостую, возникает высокая вероятность его поломки. Проблему можно решить, если настроить автораспознавание отсутствия воды в емкости.
Выбирать датчик следует с учетом типа емкости. Если она не слишком глубокая, его одного будет достаточно. Если высоты оказывается недостаточно, подойдет ультразвуковой дальномер, оснастив его поплавком с прикрепленным сенсором наклона. Можно просто положить на дно резервуара 2 провода.
Безопасность автополивщика, который питается через батарейки, намного выше по сравнению с работающим от сети. В идеале будет обеспечить напряжение от батареек, однако потребление Arduino Uno даже в спящем режиме выше 0.36мА
Как вариант, стоит обратить внимание на плату Arduino Mini, которая в спящем режиме умеет снижать свое потребление энергии до нескольких сотен мкА.
При поливе комнатной растительности следует учитывать множество правил и рекомендаций. Например, их нельзя поливать зимними вечерами
Можно оснастить поливщик датчиками света или обычными часами, а затем отредактировать программу, чтобы устройство работало в требуемое время.
Пример кода для Arduino для проекта «Автополив»
Переходим к программированию кода:
//Скачиваем библиотеку для работы дисплея и подключаем к программе #include "QuadDisplay2.h"; //Создаем константу, обозначающую контакт, к которому подключена водяная //помпа #define VODPOMPA_PIN 4; // Создаем константу, обозначающую контакт, к которому подключили //анализатор влаги земли #define HUM_PIN A0; //Min по влажности #define HUM_MIN 200; // Max по влажности #define HUM_MAX 700; //Время между проверками полива #define INTER 60000 * 3; //Объявляем переменную, в которой будет храниться значение влажности unsigned int hum = 0; //В этой переменной будем хранить временной промежуток unsigned long Time = 0; // Объявляем объект из класса QuadDisplay, затем передаем номерной знак //контакта CS QuadDisplay dis(9); //Создаем метод, отвечающий за работу дисплея void setup(void) { //Запуск метода begin(); // Объявляем функцию, которая будет отвечать за выход водяной помпы из //контакта pinMode(VODPOMPA_PIN, OUTPUT); //На дисплее загорается число - 0 dis.displayInt(0); } //Создаем метод, отвечающий за показатель влажности на данный момент void loop(void) { //Рассчитываем показатель увлажнения на данный момент int humNow = analogRead(HUM_PIN); // Если значение показателя не равно предыдущему, то... if(humNow != hum) { //Сохраняем полученные сейчас значение hum= humNow; //Вывод значения на экран displayInt(humNow); } //Задаем условия: если прошел заданный пользователь промежуток времени и //статус влаги в почве меньше необходимого, то... if ((Time == 0 || millis() - Time > INTER) && hum < HUM_MIN ) { // Даем сигнал о начале работы водяной помпы digitalWrite(VODPOMPA_PIN, HIGH); //Объявляем потом, длящийся 2 секунды delay(2000); // Завершаем работу помпы digitalWrite(POMP_PIN, LOW); // Ставим в значение переменной Time текущее время и добавляем 3 минуты Time = millis(); } }
Дополнительно вы можете посмотреть пару интересных видео от наших коллег:
На этом на сегодня всё. Отличных вам проектов!
Необходимые инструменты и периферия для реализации проекта «Автополив» на базе микроконтроллера Arduino
Ирригатор – устройство, контролирующее влажность почвы. Приспособление передает данные на датчик влажности, который укажет сконструированному автополиву на начало работы. Для составления программы используется язык программирования С++.
Таблица с требуемыми материалами:
Компонент | Описание |
Микроконтроллер Arduino Uno | Платформа соединяет периферийные устройства и состоит из 2 частей: программная и аппаратная. Код для создания бытовых приборов программируется на бесплатной среде – Arduino IDE.
Чтобы составить и внедрить программу на микроконтроллер, необходимо приобрести usb-кабель. Для автономной работы следует купить блок питания на 10 В. На платформе располагаются 12 пинов, роль которых заключается в цифровом вводе и выводе. Пользователь индивидуально выбирает функции каждого пина. |
USB-кабель | Обязателен в конструировании системы «автополив на ардуино» для переноски кода. |
Плата для подключения сенсора – Troyka Shield | С помощью платы подключается сенсорная периферия посредством обычных кабелей. По краям располагаются контакты по 3 пина — S + V + G. |
Нажимной клеммник | Служит фиксатором для пучковых проводов. Конструкция фиксируется с помощью кнопки на пружине. |
Блок питания, оснащенный usb-входом
Анализатор влажности почвы |
Идеальное средство для подключения платформ. В конструкции предусмотрен фонарик, который говорит о начале работы.
Приспособление подает сигналы, если почва чрезмерно или недостаточно увлажнена. Подключение к плате производится с помощью 3 проводков. ● MAX глубины для погружения в землю – 4 см; ● MAX потребление электроэнергии – 50 мА; ● Напряжения для питания – до 4 В. |
Помпа с трубкой для погружения в воду | Управление осуществляется с помощью коммутатора. Длина кабеля достигает 2 метров. |
Силовой ключ | Создан для замыкания и размыкания электрической цепи. Если использовать приспособление при конструировании автополива ардуино, не потребуется дополнительных спаек. Подключение к основной панели осуществляется также 3 проводами. |
Соединительный провод – «отец-отец» | Несколько проводов соединяют периферийные устройства. |
Соединительный провод – «мать-отец» | Проводки также соединяют устройства периферии. |
Комнатный цветок | Система пригодна для разного типа комнатных растений. |
ИНСТРУКЦИИ ПО ЭКСПЛУАТАЦИИ
- Нажатие на ручку энкодера – переключение выбора помпы/периода/времени работы
- Поворот ручки энкодера – изменение значения
- Кнопка энкодера удерживается при включении системы – сброс настроек
Версия 2.* ПЕРЕД ПРОШИВКОЙ ВТОРОЙ ВЕРСИИ ЗАМЕНИТЕ ВСЕ БИБЛИОТЕКИ НОВЫМИ (ИДУТ В АРХИВЕ ПРОЕКТА, В ПАПКЕ НОВАЯ ВЕРСИЯ). Поворачивая рукоятку энкодера мы перемещаем стрелочку выбора по экрану
Обратите внимание на то, что настройка времени работы помпы находится правее «за экраном», нужно пролистать стрелочку направо чтобы её активировать. Чтобы изменить выбранный стрелочкой параметр, нужно повернуть рукоятку энкодера, удерживая её нажатой
Таким образом можно настроить время периода и работы помпы в формате ЧЧ:ММ:СС. Логика работы настроек PUPM_AMOUNT, START_PIN, SWITCH_LEVEL и PARALLEL такая же как для версии 1.*
- Поворот ручки энкодера – изменение позиции стрелки
- Поворот ручки энкодера удерживая её нажатой – изменение значения
- Кнопка энкодера удерживается при включении системы – сброс настроек
Хочу поделиться своей самоделкой, которая служит мне уже больше года. Начав осваивать Arduino, думал над тем, какой бы проект реализовать. Вспомнил, что у меня много комнатных растений, которые периодически забывают поливать, да и вопрос полива во время отпусков и командировок имеет место быть.
Система состоит из следующих компонентов:
Блок управления – сердце системы. Здесь находится Аккумуляторы, Arduino, модуль времени DS3231, дисплей, преобразователи напряжения и органы управления.
Рядом с растениями расположена канистра с водой. В канистре находятся погружные помпы, которые перекачивают воду по трубкам в растения.
Распределение воды между растениями можно дополнительно отрегулировать с помощью гребенки с кранами
1. Автономная работа от аккумуляторов около 5 месяцев 2. Система поддерживает управление 3-мя помпами. К каждой помпе можно подключить гребенку с 2-4 кранами и дополнительно регулировать потоки воды. Итого получаем возможность подключить до 12 растений 3. Время снимается с отдельного независимого модуля часов DS3231. Помпа срабатывает при наступлении часа, указанного в настройке (например 8:00) . 4. На дисплей выводится информация 5. Настройки полива указываются в коде программы, их можно поменять, перепрошив Arduino
Подготовка к сборке
Очевидно, что платы Адруино для сборки будет недостаточно. Для работы потребуется подготовить следующие компоненты:
- Плата Arduino Uno (Arduino Rev3) — оригинальная платформа.
- Troyka Shield — плата для подключения датчиков. Избавит от необходимости припаивать датчики или пользоваться макетными платами.
- Водяной насос и датчик влажности (с которым идет шлейф для подключения).
- Силовой ключ (на базе полевого транзистора) также с готовым шлейфом.
- Нажимной клеммник (для надлежащего крепления проводков).
- Проводы типа «папа-папа» и «мама-папа» по одной единице.
- Импульсный адаптер (ток 1000 мА) и USB-провод.
Для тестирования прибора и последующей эксплуатации также потребуется одно или несколько растений либо в горшках, либо вам придется перед этим их посадить. Единственное, о чем стоит помнить — земля в них должна быть сухой. Также не лишним будет приготовить четырёхразрядный индикатор со шлейфом, который облегчит индикацию.
Автоматический полив
После организации считывания данных с датчика уровня влажности и их отображения, проект можно развить дальше, организовав систему автоматического полива.
Датчик уровня влажности в составе автоматической системы полива на основании Arduino:
Для автоматизации полива нам понадобятся дополнительные детали: возможно, шкивы, зубчатые шестерни, двигатель, муфта, транзисторы, резисторы. Список зависит от вашего проекта. Ну все, что может попасться под руку в быту. Более детально один из примеров показан ниже:
Это один из множества вариантов установки двигателя для системы автоматического полива. Колесо можно установить непосредственно в воде. В таком случае при его быстром вращении, вода будет подаваться к растению. В общем, можете проявить фантазию.
Схема подключения двигателя постоянного тока (статья с более подробным примером подключения двигателя к Arduino) на примере копии Arduino от SparkFun приведена ниже:
Ниже приведен скетч для Arduino (по сути он такой же как и приведенный выше с небольшим дополнением для управления двигателем):
// В скетче считываются данные с датчика и отображается уровень влажности почвы
// если почва сухая, начинает работать двигатель
// Для работы с дисплеем используется библиотека softwareserial library
#include <SoftwareSerial.h>
// Подключите пин для обмена данными с использованием LCD дисплея по серийному протоколу RX к цифровому пину 2 Arduino
SoftwareSerial mySerial(3,2); // pin 2 = TX, pin 3 = RX (unused)
// Управляем двигателем с помощью пина 9.
// Этот пин должен обязательно поддерживать ШИМ-модуляцию.
const int motorPin = 9;
// Тут мы настраиваем некоторые константы.
// Настройка констант зависит от условий внешней среды, в которой используется датчик
int thresholdUp = 400;
int thresholdDown = 250;
// Настраиваем пин A0 на Arduino для работы с датчиком:
int sensorPin = A0;
void setup(){
pinMode(motorPin, OUTPUT); // устанавливаем пин, к которому подключен двигатель в качестве выхода
mySerial.begin(9600); // устанавливаем скорость обмена данными на 9600 baud
delay(500); // ждем пока дисплей прогрузится
}
void loop(){
// Здесь мы объявляем строку, в которой хранятся данные для отображения
// на жидкокристаллическом дисплее. Значения будут изменяться
// в зависимости от уровня влажности почвы
String DisplayWords;
// В переменной sensorValue хранится аналоговое значение датчика с пина А0
int sensorValue;
sensorValue = analogRead(sensorPin);
// перемещение курсора к началу первой строки LCD дисплея: mySerial.write(254);
mySerial.write(128);
// очистка дисплея:
mySerial.write(» «);
mySerial.write(» «);
// перемещение курсора к началу первой строки LCD дисплея: mySerial.write(254);
mySerial.write(128);
// запись необходимой информации на дисплей:
mySerial.write(«Water Level: «);
mySerial.print(sensorValue); //Использование.print вместо .write для значений
// Теперь мы проведем проверку уровня влажности по сравнению с заданными нами предварительно числовыми константами.
// Если значение меньше thresholdDown, отображаем слова:
// «Dry, Water it!»
if (sensorValue
// перемещение курсора к началу второй строки дисплея:
mySerial.write(254);
mySerial.write(192);
DisplayWords = «Dry, Water it!»;
mySerial.print(DisplayWords);
// запуск двигателя на небольших оборотах (0 – остановка, 255 – максимальная скорость):
analogWrite(motorPin, 75);
// Если значение не ниже thresholdDown надо провести проверку, не будет
// ли оно больше нашего thresholdUp и, если, больше,
// отобразить надпись «Wet, Leave it!»:
} else if (sensorValue >= thresholdUp){
// перемещение курсора к началу второй строки дисплея:
mySerial.write(254);
mySerial.write(192);
DisplayWords = «Wet, Leave it!»;
mySerial.print(DisplayWords);
// выключение двигателя (0 – остановка, 255 – максимальная скорость):
analogWrite(motorPin, 0);
// Если полученное значение в диапазоне между минимальным и максимальным
// и почва была раньше влажной, а теперь сохнет,
// отображаем надпись «Dry, Water it!» (то есть, когда мы
// приближаемся к thresholdDown). Если почва была сухой, а теперь
//быстро увлажняется, отображаем слова «Wet, Leave it!» (то есть, когда мы
// приближаемся к thresholdUp):
} else {
// перемещение курсора к началу второй строки дисплея:
mySerial.write(254);
mySerial.write(192);
mySerial.print(DisplayWords);
}
delay(500); //Задержка в пол секунды между считываниями
}
Удачи вам в реализации автоматического полива ваших растений!
Проведение калибровки
На датчике будут отображаться значения, которые напрямую связаны с кислотностью земли. Соответственно, перед запуском автополивщика необходимо выполнить простую калибровку. Она проводится таким образом:
- Сначала записываются цифры, полученные после того, как датчик воткнут с сухую почву. Это минимальная влажность.
- Затем нужно полить растение и подождать момента, когда вода впитается в землю. Показатели должны оставаться на стабильном уровне, зачастую это в районе 60%, но все растения разные, поэтому предварительно узнайте, насколько ваш зеленый друг требователен к этому параметру. Их также следует сохранить, поскольку это максимальная влажность.
- С готовыми результатами следует отредактировать наш скетч (код в среде Arduino IDE), изменяем значение минимальной влажности, в нашем коде это — MIN _HUM и MAX_HUM на параметр нормальной влажности.
- Остается перепрошить Arduino Uno, для этого подключает через кабель к пк, выбираем порт, плату, жмем в правом углу кнопку загрузить.
- Расширение функциональности автополивщика
Выше была предложена система для одного горшка. На практике, автополив на Адруино эффективнее применять для нескольких растений. Для этого к Адруино можно подключить дополнительные насосы и сенсоры влажности. Однако можно поступить намного проще. В поставляемом с насосом шланге можно сделать дырочки с учетом расстояния, на котором расположены растения. В полученные отверстия можно воткнуть стержни простых ручек. Результат получится примерно такого вида:
Часто в помещениях растения в горшках располагают на подоконнике одним рядом. Это облегчает задачу, поскольку трубка крепится к горшкам таким образом, чтобы распределить выводы с водой по одному на растение. Единственное — с таким решением, настройка автоматического полива выполняется с учетом одного растения. Если горшки более-менее одинаковые по габаритам, скорость высыхания в них почвы должна быть равной. Как вариант, можно совместить оба способа масштабирования, что позволит поделить всю растительность на примерно одинаковые по габаритам горшки.
Компоненты и их описания
Arduino Uno
Arduino взаимодействует через датчики с окружающей средой и обрабатывает поступившую информацию в соответствии с заложенной в неё программой. Подробнее с платой Ардуино Уно можно ознакомиться здесь.
Ардуино Уно
Датчик влажности почвы
Измерение влажности почвы на базе Arduino производится с помощью датчика влажности. Датчик имеет два контакта. Через эти контакты при погружении их в грунт протекает ток. Величина тока зависит от сопротивления грунта. Поскольку вода является хорошим проводником тока, наличие влаги в почве сильно влияет на показатель сопротивления. Это значит, чем больше влажность почвы, тем меньше она оказывает сопротивление току.
Датчик влажности почвы
Этот датчик может выполнять свою работу в цифровом и аналоговом режимах. В нашем проекте используется датчик в цифровом режиме.
На модуле датчика есть потенциометр. С помощью этого потенциометра устанавливается пороговое значение. Также на модуле установлен компаратор. Компаратор сравнивает данные выхода датчика с пороговым значением и после этого даёт нам выходной сигнал через цифровой вывод. Когда значение датчика больше чем пороговое, цифровой выход передаёт 5 вольт (HIGH), земля сухая. В противном случае, когда данные датчика будут меньше чем пороговые, на цифровой вывод передаётся 0 вольт (LOW), земля влажная.
Этим потенциометром необходимо отрегулировать степень сухости почвы, когда как вы считаете нужно начать полив.
Фоторезистор
Фоторезистор (LDR) — это светочувствительное устройство, которое используются для определения интенсивности освещения. Значение сопротивления LDR зависит от освещённости. Чем больше света, тем меньше сопротивление. Совместно с резистором, фоторезистор образует делитель напряжения. Резистор в нашем случае взяли 10кОм.
Делитель напряжения
Подключив выход делителя Uin к аналоговому входу Ардуино, мы сможем считывать напряжения на выходе делителя. Напряжение на выходе будет меняться в зависимости от сопротивления фоторезистора. Минимальное напряжение соответствует темноте, максимальное – максимальной освещённости.
В этом проекте полив начинается в соответствии с пороговым значением напряжения. В утренние часы, когда считается целесообразным начать полив, напряжение на выходе делителя равно 400. Примем это значение как пороговое. Так если напряжения на делителе меньше или равно 400, это означает, что сейчас ночь и насос должен быть выключен.
Меняя пороговое значение можно настроить период работы автополива.
Релейный модуль
Реле представляет собой переключатель с электромеханическим или электрическим приводом.
Релейный модуль
Привод реле приводится в действие небольшим напряжением, например, 5 вольт от микроконтроллера, при этом замыкается или размыкается цепь высокого напряжения.
Схема реле
В этом проекте используется 12 вольтовый водяной насос. Arduino Uno не может управлять напрямую насосом, поскольку максимальное напряжение на выводах Ардуино 5 вольт. Здесь нам приходит на помощь релейный модуль.
Релейный модуль имеет два типа контактов: нормально замкнутые и нормально разомкнутые контакты. Нормально замкнутые без управляющего напряжения замкнуты, при подаче напряжения размыкаются. Соответственно нормально разомкнутые без напряжения разомкнуты, при подаче управляющего напряжения замыкаются. В проекте используются нормально разомкнутые контакты.
Водяной насос
В проекте используем 12-и вольтовый погружной насос с 18-ваттным двигателем. Он может поднимать воду до 1,7 метра.
Водяной насос
Этот насос можно эксплуатировать только тогда, когда он полностью погружен в воду. Это налагает некие обязательства по контролю уровня воды в ёмкости. Если водяной насос будет работать без воды, он просто-напросто сгорит.
Макетная плата
Макетная плата представляет собой соединительную плату, используемую для создания прототипов проектов электроники, без пайки.
Шаг 3. Код системы полива
Для этого шага вам нужно скачать прикрепленный ниже файл и открыть код в редакторе Arduino IDE. Наряду с кодом вы найдете комментарии, которые разъясняют каждую часть кода. Например: вы можете легко изменить текст на ЖК-дисплее на свой собственный текст. Также в разделе Библиотеки нужно скачать и установить библиотеку , это нужно сделать до начала работы с кодом.
#include <LiquidCrystal.h> // импорт LCD библиотеки LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // LCD соединения byte heart = { 0b00000, 0b01010, 0b11111, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000 }; // Специальный символ сердца для дисплея int sensorPin = A0; // датчик почвы int sensorValue = 0; int percentValue = 0; int TouchSensor = 13; // сенсорный датчик int pomp = 12; // 5В водяной насос void setup() { Serial.begin(9600); lcd.begin(16, 2); // LCD lcd.createChar(1, heart); // Специальный символ для дисплея pinMode(pomp, OUTPUT); pinMode(TouchSensor, INPUT); } void loop() { if(digitalRead(TouchSensor)==HIGH) //Считать сигнал сенсорного датчика { digitalWrite(pomp, HIGH); // если сенсорный датчик HIGH (ВЫСОКИЙ), то включить помпу Serial.println("Pomp ON"); // Это для проверки показаний элемента lcd.clear(); lcd.setCursor(4, 0); // курсор 1-я строка вверху слева lcd.print("WATERING"); //Печать на ЖК-дисплее при нажатии сенсорного датчика (растение получает воду) lcd.setCursor(4, 1); // курсор 2-я строка слева lcd.write(1); // Специальный значок сердца для ЖК-дисплея lcd.print("SERGE"); //Печать на ЖК-дисплее при нажатии сенсорного датчика (растение получает воду) lcd.write(1); // Специальный значок сердца для ЖК-дисплея delay(100); lcd.clear(); // После того, как сенсор запущен, очистить текст на ЖК-дисплее } else { digitalWrite(pomp, LOW); // если сенсорный датчик LOW (НИЗКИЙ, не нажат), помпа выключена Serial.println("Pomp OFF"); // Это для проверки показаний элемента sensorValue = analogRead(sensorPin); // прочитать датчик почвы Serial.print("\n\nAnalog Value: "); // Это для проверки показаний элемента Serial.print(sensorValue); // Это для проверки показаний элемента percentValue = map(sensorValue, 1023, 200, 0, 100); // Калибровка датчика почвы Serial.print("\nPercentValue: "); // Это для проверки показаний элемента Serial.print(percentValue); // выводить Значение влажности в % Serial.print("%"); //Это для проверки показаний элемента lcd.setCursor(0, 0); // курсор установлен на первой строке lcd.print("Serge's grond"); // Вывод на ЖК-дисплей LCD lcd.setCursor(0, 1); // курсор установлен на второй строке lcd.print("bevat:"); // Вывод на ЖК-дисплей LCD lcd.print(percentValue); // Вывод на ЖК-дисплей LCD значение влажности в % lcd.print("%"); // Вывод на ЖК-дисплей LCD lcd.print(" water"); // Вывод на ЖК-дисплей LCD delay(500); //задержка перед началом цикла lcd.clear(); // в конце цикла очистить текст на LCD } }
Необходимые компоненты
- Реле на 12v.
- Источник питания 12v 1A.
- Соединительные провода и концевой соединитель.
GSM модуль
В этом проекте мы использовали TTL SIM800 GSM модуль. SIM800 представляет собой четырех диапазонный GSM/GPRS модуль, способен работать в диапазонах частот 850/900/1800/1900 МГц и обеспечивать передачу голоса, SMS, данных с низким энергопотреблением. Внешний вид SIM800 показан на рисунке ниже – он достаточно компактный и не займет много места в ваших устройствах. Модуль SIM800 включает:
- четырех диапазонный GSM/GPRS модуль компактного размера;
- возможность задействования GPRS;
- выход TTL.
Более подробно изучить работу с GSM модулем можно в статье про автоматическую доску объявлений на Arduino. Также можно посмотреть все статьи на нашем сайте, использующие технологию GSM.
Масштабирование решения
Мы описали решение для одного растения. Но обычно требуется поливать несколько растений. Помимо очевидного решения — подключения к Arduino нескольких помп и датчиков влажности — существует более простое и дешёвое. Достаточно в трубке, которая идёт в комплекте с помпой проделать шилом дырочки на расстоянии около 30 см и воткнуть в эти дырочки куски стержней от обычных шариковых ручек. Выглядеть это будет так:
Горшки с цветами дома часто стоят в ряд на подоконнике. Вам достаточно просто положить трубку на горшки так, чтобы отверстия в ней приходились по одному на горшок. Теперь наше устройство может поливать сразу несколько горшков. Однако в таком случае принимать решение о необходимости полива можно только по одному горшку. Однако обычно горшки примерно одинаковые по размерам и, соответственно, сохнут с примерно равной скоростью. Можно так же комбинировать два решения, разделяя все горшки на группы примерно равных по размерам.
Исходный код программы
В программе нам сначала необходимо подключить библиотеку последовательной связи (SoftwareSerial library) чтобы задействовать последовательную связь на контактах 2 и 3 платы Arduino, а также подключить библиотеку для работы с ЖК дисплеем.
Затем в функции void setup () последовательная связь инициализируется на скорость 9600 бод/с и задаются режимы работы (на ввод или вывод данных) для используемых контактов. Функция gsmInit вызывается для инициализации GSM модуля.
Serial1.begin(9600); Serial.begin(9600); pinMode(led, OUTPUT); pinMode(motor, OUTPUT); pinMode(sensor, INPUT_PULLUP); lcd.print(«Water Irrigaton»); lcd.setCursor(4,1); delay(2000); lcd.clear(); lcd.print(«Circuit Digest»); lcd.setCursor(0,1); lcd.print(«Welcomes You»); delay(2000); gsmInit();
Функция gsmInit () играет важную роль в нашей программе и, к сожалению, ряд пользователей считают ее достаточно трудной для программирования. Эта функция используется для инициализации GSM модуля. Сначала проверяется соединен ли GSM модуль с сетью при помощи передачи ему соответствующей ‘AT’ команды. Если модуль ответил OK, это значит что он готов к работе. Система будет проверять модуль до тех пор пока не получит от него ответ ‘OK’. Затем выключается режим ECHO (чтобы модуль не повторял в ответе написанную ему команду) с помощью команды ATE0. Затем проверяется доступность сети при помощи команды ‘AT+CPIN?’. Если вставленная карта является SIM картой и PIN присутствует, модуль формирует ответ READY. Эта проверка также осуществляется непрерывно до тех пор пока сеть не будет найдена. Более подробно эти процессы показаны в видео в конце статьи.
Шаг 5: Подключаем плату Arduino
Плата Arduino – «мозг» всей системы. Вам будет удобнее взять провода тех же цветов, что и в моей инструкции, чтобы при дальнейшей работе со схемой не возникало путаницы.
- Соедините конец красного провода «Папа-Папа» с точечным разъемом на плате, помеченным 5В. Второй конец пока нам не нужен.
- Соедините конец серого провода «Папа-Папа» с точечным разъемом, помеченным А1, второй конец пока не нужен.
- Соедините один из голубых проводов, идущих от клеммного блока, с точечным разъемом GND (земля).
- Соедините один из коричневых проводов, идущих от клеммного блока, с точечным разъемом, помеченным VIN.
- На другой стороне платы Arduino соедините красный провод с точечным разъемом, помеченным 5В. Другой конец нам пока не нужен.
Насос для автомата полива растений
Из вышеперечисленного все, кроме насоса, изготовим самостоятельно. Насос подойдет любой маломощный. Можно поискать в старых и сломанных струйных принтерах или купить в автозапчастях насос для стеклоомывателя, самый простой я нашел за 90 рублей.
Важно: прежде чем подключать насос к готовому устройству, проверьте его в работе. Автомобильный насос может выдать фонтан в несколько метров; дома такое «поливание» могут не понять и запретить на корню
Подберите опытным путем оптимальное напряжение. Автонасос рассчитан на питание от бортовой сети 12 В, на моем экземпляре достаточный напор появляется уже при напряжении 8…9 В. Насос от принтера напора в несколько метров не даст, но с ним другая проблема: в принтере он качал чернила, а они очень трудно отмываются, и такой насос аккуратнейшим образом необходимо будет промыть.
Заключение
Организация автоматического полива — не такая сложная задача. Для простой системы не нужны сложные приборы, достаточно обычных подручных материалов. Весьма эффективно показывает себя капельный или фитильный автополив растений, хорошо зарекомендовали себя и гидрогель с гранулированной глиной. Весьма удобные приспособления с регулировкой скорости подачи получаются из капельницы, а специальные кашпо способны надолго обеспечить произрастающую в них зелень водой.
А специалисты и энтузиасты могут организовать продвинутые и мощные системы автоматического полива на микроконтроллерах и датчиках влажности. Для создания таких модулей нужно некоторое специальное оборудование и навыки, но усилия компенсируются высокой автономностью готового автополива, его обширными возможностями и пространством для доработок.
Существуют и дополнительные способы продления срока жизни домашних цветов с помощью ряда специальных приемов. Но они становятся стрессом для растений, а неправильное их применение способно даже их погубить. Поэтому к ним желательно прибегать лишь в самых крайних случаях и отдавать предпочтение простым методам автоматического полива.
Заключение
На самом деле, существует множество модификаций автополивщика на Адруино. Отличаются они между собой дополнительными возможностями и особенностями конструкции. Тем не менее, принцип их работы практически одинаков — программа считывает данные с датчика влажности и запускает водяную помпу, если обнаруживает их минимальное значение. Затем насос работает до того момента, пока датчик не покажет данные, соответствующие максимальным показателям.
В процессе сборки не должно возникнуть трудностей, однако предварительно следует постараться обезопасить датчик влажности. Предложенное программное обеспечение протестировано и после калибровки не нуждается в дополнительных настройках.