Приветствую! Что-то давненько у нас не было новых статей. Более того, многие из вас прочитали первую часть статьи про автополив на Arduino и заинтересовались выходом продолжения. Поздравляем, этот час настал! Продолжим разбираться, что к чему и наконец возьмемся за программный код. Поехали!
В первой части была описана схема подключения модулей, их описание, взаимодействие и принцип работы. Сегодня мы начнем писать код, чтобы это все должным образом функционировало. Писать будем код в среде разработки Arduino IDE. Но сначала давайте еще раз разберемся, что у нас будет происходить.
Проще всего будет написать код для взаимодействия небольшого числа модулей, а затем дополнять проект. К тому же многим из вас не все компоненты, присутствующие на картинке выше, будут необходимы.
Самая простая установка для автополива – это сама плата Arduino, датчик влажности, оповещающий о состоянии почвы (сухая или влажная), соединительные провода, модуль реле и водяной насос (помпа).
Кстати, все компоненты для успешной сборки и реализации системы автополива вы можете найти на нашем сайте! Амперкот.ру
Принцип работы: если земля сухая, то подается команда на включение реле – цепь замыкается, и подается питание на помпу, и вуаля! Насос включается, и происходит полив. После чего земля становится влажной – подается команда выключить реле, и полив прекращается. Включение и выключение реле происходит благодаря установке на контактах этого модуля низкого или высокого логического уровня. Использовать нужно тот модуль, который питается от 5 вольт. Это не означает, что другие не подойдут, просто в данном проекте это самый оптимальный и удобный вариант.
Вот эти модули у нас будут упоминаться при написании кода:
- плата Arduino (нужно задать необходимые настройки в среде разработки: раздел «инструменты»)
- реле
Получаем следующее:
int sensorPin = A0; int sensorValue = 0; int Relay = 4; void setup() { Serial.begin(9600); pinMode(Relay, OUTPUT); digitalWrite(Relay, LOW); // реле выключено } void loop() { sensorValue = analogRead(sensorPin); Serial.println(sensorValue); if(sensorValue <=700) { digitalWrite(Relay, HIGH); // реле включено delay(2000); } else { digitalWrite(Relay, LOW); // реле выключено } }
Сначала мы создаем три переменных типа integer. В первой указывается подключение датчика влажности к контакту А0, во второй мы будем хранить полученные значения с датчика, в третьей хранится номер контакта, к которому подключается реле (в нашем случае – цифровой контакт с номером 4).
Далее мы подключаем монитор порта для получения данных с датчика влажности (это нам нужно еще и для того, чтобы протестировать полученную схему и выявить при каком значении с датчика влажности почвы нам необходим полив), там же устанавливается и скорость передачи данных через последовательный порт – 9600 бит в секунду. Не забывайте, что такая же скорость должна стоять и в самом мониторе порта, который вы откроете для просмотра данных. Он выглядит так, как на картинке ниже:
Также мы указываем цифровой контакт с реле, как выход, потому что реле будет выполнять заданные в коде команды. Поставим логический уровень модуля реле на самый низкий, при котором подача питания равна 0 и ничего не происходит.
В цикле void loop() идет считывание значений влажности с датчика, и они выводятся на экран вашего компьютера через монитор порта. Я выбрал крайнее значение в 700. Если в данный момент времени оно будет меньше или равно такому, то включается реле (подается максимальный логический уровень, подача пяти вольт с платы Ардуино, что вызывает замыкание цепи в модуле реле и включается насос для полива.
Это реализовано в коде через конструкцию из условия по типу (if,else)
Соответственно если меньше 700 (if), то выполняется нужное нам действие, если иначе(else), то реле остается выключенным. Задержка в 2 секунды играет существенную роль, так как если почва сухая, то идет полив в течение некоторого времени и происходит замер показаний. Так как у нас это все происходит в цикле, то полив не будет останавливаться, пока почва не станет влажной на столько, на сколько нам это нужно.
Вот и весь код. Это базовая, основная часть для системы автополива. Остальное дополняется и модернизируется. Приведу несколько примеров.
К реле вы можете подключать любую нагрузку. Принцип работы останется тот же самый, а на код это тем более не повлияет. Это может быть простейший насос – помпа, или же система для полива, собранная вами лично.
Также есть проблема с датчиком влажности и вообще с измерениями влажности в почве. На то, нужен ли полив, влияет очень много факторов, и влажность почвы только один из них. Более того, датчик влажности, который использован в нашей схеме довольно дешевый, а его щупы легко способны окисляться под действием влаги и химических элементов в почве (происходит коррозия), поэтому использовать долго его не получится. Мы еще не проверяли как долго он протянет, но готовы этим заняться:)
Есть решение – покупка более дорогого, но уже емкостного датчика влажности почвы. Принцип его работы будет основан на изменении электрической емкости плоского конденсатора в модули из-за разной диэлектрической проницаемости вещества между его обкладками.
Начинающим такое будет реализовать сложнее, да и скорее всего придется собирать такие датчики самому, потому как стоят они действительно очень дорого.
На этом вторая часть нашего материала про автополив на Arduino подходит к концу, но серия статей на этом не заканчивается. Впереди вас ждет усложнение кода с подключением дополнительных модулей и датчиков, различные системы для удобного автополива и полноценное решение проблемы с датчиком влажности почвы! Не пропусти продолжения:) Всем успехов и удачной компиляции.
Данная статья является собственностью Amperkot.ru. При перепечатке данного материала активная ссылка на первоисточник, не закрытая для индексации поисковыми системами, обязательна.
Комментарии