Собираем автополив на Arduino. Часть 2: написание кода и возможные проблемы

02 апреля 2018

Приветствую! Что-то давненько у нас не было новых статей. Более того, многие из вас прочитали первую часть статьи про автополив на 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. При перепечатке данного материала активная ссылка на первоисточник, не закрытая для индексации поисковыми системами, обязательна.


Поделиться: