Автоматическая оросительная система на Arduino Uno


Наверняка многие из вас любят выращивать какую-нибудь зелень у себя дома или на даче. При этом растения, в отличие от животных, достаточно неприхотливы и могут спокойно расти без вашего надзора в течение достаточно продолжительного времени. Но, тем не менее, растения могут погибнуть если уровень влажности почвы, на которой они растут, будет низким в течение продолжительного времени (неделя и более). Если вы находитесь постоянно дома, то поливать растения каждый день не представляет особого труда. Но что делать если вы уехали в отпуск или командировку на достаточно продолжительное время?

Внешний вид автоматической оросительной системы на Arduino Uno

В данной статье мы рассмотрим создание автоматической оросительной системы (Automatic Irrigation System) на основе платы Arduino Uno и датчика влажности (Moisture sensor) почвы, которая будет автоматически поливать ваши растения и поддерживать оптимальный уровень влаги в почве во время вашего отсутствия. Систему можно использовать как в домашних условиях внутри помещений, так и в вашем саду. Также на нашем сайте вы можете посмотреть аналогичный проект системы полива растений с самодельным датчиком влажности почвы, выводом сообщений на экран ЖК дисплея и оповещениями о работе системы с помощью SMS.

Принцип работы автоматической оросительной системы

Логика работы нашей оросительной системы будет достаточно проста. Датчик влажности будет измерять уровень влаги в почве и когда этот уровень будет достаточно низок, то с помощью платы Arduino Uno будет подаваться сигнал на водяной насос (water pump), который будет подавать воду в почву и тем самым орошать наши растения. После подачи воды уровень влаги в почве будет повышаться и когда он достигнет необходимого уровня, датчик влажности обнаружит это и будет подан сигнал на остановку водяного насоса.

Датчик влажности почвы (Soil Moisture Sensor)

Внешний вид датчика влажности почвы

Принцип работы датчика влажности почвы достаточно прост – он содержит 2 зонда с оголенными контактами, которые работают как резистор с переменным сопротивлением – их сопротивление изменяется в зависимости от уровня влаги в почве. Сопротивление данных зондов обратно пропорционально влажности почвы, то есть чем выше содержание влаги почвы, тем лучше ее проводимость и тем меньше ее сопротивление. Низкий уровень влаги в почве свидетельствует о ее плохой проводимости и, следовательно, ее большом сопротивлении. Датчик обеспечивает на своем выходе уровень аналогового напряжения, пропорциональный сопротивлению почвы.

Датчик поставляется вместе с электронным модулем, который упрощает его подключение к плате Arduino. Данный электронный модуль содержит компаратор с высокой точностью на основе микросхемы LM393, преобразующий аналоговый сигнал в цифровой, который в дальнейшем и подается на плату Arduino (или любой другой микроконтроллер).

Водяной насос

Внешний вид водяного насоса

В данном проекте мы использовали небольшой водяной насос, который вполне справится с орошением ваших домашних растений, его можно подключать напрямую к плате Arduino. Но в данном случае мы его подключили к плате Arduino с помощью модуля реле чтобы обеспечить универсальность схемы. Дело в том, что если вы захотите использовать подобную систему для орошения вашего сада, то в данном случае маленький насос, использованный нами, уже не справится с орошением больших объемов и почвы и вам будет необходим водяной насос значительно большего размера. Запитываться такой насос будет уже от сети переменного тока. В этом случае вам всего лишь будет необходимо заменить источник постоянного тока в нашей схеме (батарейку) на питание от сети переменного тока, а плату Arduino запитать от отдельного источника постоянного тока, а вся логика работы нашей оросительной системы останется точно такой же.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Модуль датчика влажности почвы (купить на AliExpress).
  3. Модуль реле 5v (купить на AliExpress).
  4. Маленький водяной насос (мini water pump with small pipe) с питанием от 6v (купить на AliExpress).
  5. Батарейка.
  6. Соединительные провода.

Внешний вид компонентов, необходимых для сборки проекта, показан на следующем рисунке.

Внешний вид компонентов, необходимых для сборки проекта

Схема проекта

Схема автоматической оросительной системы на основе платы Arduino Uno представлена на следующем рисунке.

Схема автоматической оросительной системы на основе платы Arduino Uno

Для питания схемы мы использовали внешний источник питания – батарейку. Можно использовать батарейку на 9v или 12v. Батарейка подключается к контактам Vin и ground платы Arduino. Водяной насос получает питание от батарейки через модуль реле. Выход датчика влажности почвы подключен к аналоговому контакту платы Arduino.

Сборка конструкции проекта

Подключите контакт VCC модуля реле к контакту 5v платы Arduino, а землю (ground) модуля реле – к земле платы. Затем подключите сигнальный контакт модуля реле к любому цифровому контакту платы Arduino кроме контакта 13. В нашем случае мы подключили его к контакту 3 как показано на рисунке ниже.

Подключение модуля реле к плате Arduino

На следующем шаге подключите датчик влажности почвы к плате Arduino. Соедините VCC и gnd датчика с контактами 5volt и ground платы. Аналоговый выход датчика подключите к любому аналоговому контакту платы Arduino, в данном случае мы его подключили к контакту A0.

Подключение датчика влажности почвы к плате Arduino

Затем подключите водяной насос к модулю реле. Модуль реле обычно имеет 3 точки подключения: общий провод, нормально замкнутый и нормально разомкнутый контакты. Нам необходимо подключить положительный вывод водяного насоса к общему контакту реле, а нормально разомкнутый контакт реле – к положительному выводу батареи. Далее необходимо подключить землю водяного насоса к земле Arduino и подключить небольшой шланг к водяному насосу.

После этого подключите батарейку к схеме и если водяной насос начнет работать, то значит все в порядке и можно приступать к загрузке кода программы в плату Arduino.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В данном проекте мы не будем использовать никаких подключаемых библиотек, только базовые функции. В начале кода программы объявим две переменные целого типа, одну для хранения значения влажности почвы, а вторую – для конвертированного в проценты значения влажности почвы.

Далее в функции setup() зададим режимы работы используемых контактов и инициализируем последовательную связь для целей отладки.

Основную часть программы мы начнем со считывания значения с датчика влажности почвы с помощью функции analogRead(A0). Считанное значение мы будем сохранять в переменной soilMoistureValue – оно будет в диапазоне от 0 до 1023.

Далее мы конвертируем это значение в проценты (то есть в диапазон от 0 до 100) с помощью функции map. То есть экстремально сухой почве будет соответствовать значение 0%, а экстремально влажной – 100%.

Калибровка датчика влажности почвы

В функции map для конвертирования значения влажности в проценты нам необходимо указать значения влажности, при которых мы будем, соответственно, считать почву сухой и влажной. Для этого нам необходимо произвести калибровку датчика влажности почвы. Напишем небольшую программу для мониторинга значений, считываемых с датчика влажности почвы, и загрузим ее в плату Arduino.

После загрузки этой программы в плату Arduino откройте окно монитора последовательной связи (serial monitor). Поместите датчик влажности в очень сухую почву или просто подержите его на воздухе – запишите полученное значение в окне монитора последовательной связи и поставьте его вместо значения 490 в функцию map в основной программе нашего проекта.

Затем поместите датчик влажности в очень влажную почву или воду, запишите полученное значение в окне монитора последовательной связи и поставьте его вместо значения 1023 в функцию map в основной программе нашего проекта. Эти значения и будут калибровочными для вашего датчика влажности почвы.

Считываемые значения с датчика влажности почвы

После получения значения влажности почвы в процентах мы можем на основе этого значения управлять водяным насосом. Если значение влажности почвы будет менее 10% мы будем включать водяной насос при помощи подачи низкого уровня напряжения (LOW) на контакт 3 платы Arduino и выводить соответствующее сообщение в окно монитора последовательной связи.

Когда измеренная влажность почвы окажется более 80% (это будет свидетельствовать о том, что почва в достаточной степени насыщена водой) плата Arduino будет выключать водяной насос и выводить сообщение ‘pump off’ в окно монитора последовательной связи.

Сообщения, свидетельствующие о включении водяного насоса

Тестирование работы оросительной системы

Мы поместили всю собранную конструкцию проекта кроме водяного насоса и датчика влажности почвы в пластиковый контейнер как показано на рисунке ниже.

Пластиковый контейнер для проекта нашей оросительной системы

После того как программная и аппаратная части проекта будут готовы можно приступить к тестированию работы проекта. Поместите датчик влажности почвы как можно ближе к корням растений для более высокой точности работы системы.

Установка датчика влажности почвы рядом с растением

На заключительном шаге поместите водяной насос в емкость, наполненную водой. Теперь ваша автоматическая система полива растений готова к работа и готова позаботиться о ваших растениях когда вас нет рядом.

Тестирование работы оросительной системы

Вы можете изменить границы влажности почвы, по которым принимается решение о поливе растений, на необходимые вам, поскольку различные виды растений имеют различающиеся требования к своему поливу.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
9 007 просмотров

Комментарии

Автоматическая оросительная система на Arduino Uno — 43 комментария

  1. Подскажите начинающему агроному, как подключить часы реального времени. Нужно к примеру делать опрос параметра влажности почвы в 7:00 утра, а так же в 19:00 вечера. Если почва сухая - включать полив. Часы реального времени нужны т.к. у нас иногда но выключают свет.

  2. Здравствуйте. А можно через плату Ардуино Уно управлять (написать программу) последовательно электромагнитными клапанами DC12вольт допустим 10 клапанов. Условия включения клапана размыкание (сухая почва) между двумя щупами (двумя проводами). Допустим одновременно разомкнуло шесть пар щупов, плата должна включить один клапан на линии сработавших щупов потом остальные пять клапанов. И выключить клапана когда пара щупов замкнуты (почва влажная)

    • Добрый вечер. Да, конечно такую логику запрограммировать с помощью платы Ардуино можно, но нужно предусмотреть другое питание (вместо батарейки) для клапанов и посмотреть потянет ли плата Ардуино питание нескольких пар датчиков почвы

  3. Программа работает так
    Помп он
    100
    - насос качает воду
    Помп офф
    2
    -насос качает воду
    При этом
    If percentage 80

  4. Написано только помп офф, но помпа включина, помп он вообще не появляется

    • А если в программе вам просто подавать команды digitalWrite(3,LOW) и digitalWrite(3,HIGH) (то есть не использовать условия), например, одну за другой с задержкой, то у вас что с помпой будет происходить? Может у вас модуль реле подключен не так как в схеме и тогда вам нужно просто в этих командах поменять местами LOW и HIGH чтобы схема правильно работала

  5. здравствуйте я немного переделал код до правильного (были перепутаны HIGH и LOW)вот поправленный скетч:

    int soilMoistureValue = 0;
    int percentage=0;
    void setup() {
    pinMode(3,OUTPUT);
    Serial.begin(9600);
    }
    void loop() {
    soilMoistureValue = analogRead(A0);
    Serial.println(percentage);
    percentage = map(soilMoistureValue, 490, 1023, 100, 0);
    if(percentage 80)
    {
    Serial.println("pump off");
    digitalWrite(3,LOW);
    }
    }

  6. Здравствуйте. Есть вопрос. Собрала я значит схему, насос работает, но когда я опускаю датчик влажности в воду, насос не перестаёт работать, как на видео, в чем может быть проблема?

    • Добрый вечер. А посмотрите какие значения влажности в окне мониторе последовательной связи выводятся? Если они не поднимаются больше 80, то насос никогда не выключится - так прописано в коде программы. Это будет свидетельствовать о том, что у вас что то не так с датчиком влажности

      • Здравствуйте, у меня работает без прекращения насос, хотя я укозал percentage>80

  7. Здравствуйте!
    Можно мне тоже скинуть доработанный скетч для 4-х канального полива, который доработал Александр?

    • Добрый день. К сожалению, у меня этого скетча нет, а Александр, доработавший этот скетч, не поделился им с нами

  8. А, если у меня 4-х канальный релейный модуль, тогда можно этот скетч использовать, добавив только в код программы только входы с датчиков и выходы сигнальных контактов?

    • Да, вы можете использовать только один из 4-х каналов вашего релейного модуля, только в коде программы правильно укажите контакт платы Ардуино, к которому вы его подключите.

    • Вот, у меня вопрос, такой, в этом проекте, получается нужно использовать два источника питания, а можно ли использовать только один, как тогда будет выглядеть схема? Или этот проект можно испльзовать только так, как указано выше

      • А где вы увидели два источника питания в схеме? Я вижу только один - батарейку

          • Нет, через него на плату Ардуино можно также подавать питание. Но в данном проекте он используется только для загрузки программы в плату Ардуино, после этого плата отключается от компьютера и устройство работает автономно, получая питание от батарейки

  9. Собрал я как у вас , если шнурок в компьютер вставлен то работает отлично , если с блока питания телефона или же с батареек , то реле постоянно щёлкает вкл/выкл не могу понять в чём дело .

    • А значения percentage, выводимые в окно монитора последовательного порта, у вас при этом какие? Программа предельно проста, ну если только с командой percentage = map(soilMoistureValue, 490, 1023, 100, 0) поиграться. У вас при смене источника питания, скорее всего, меняется порог срабатывания датчика относительно контакта Ардуино и его нужно откорректировать с помощью данной команды

  10. Что то схема не работает. Реле постоянно переключается с on на off. И так непрерывно.

    • А реле само исправно? Что у вас показывается в окне монитора последовательной связи при работе системы?

        • А добавьте тогда вывод в монитор последовательного порта значения переменной percentage. Тогда, я думаю, уж точно станет ясна причина этих ваших частых переключений насоса

          • В общем я переписал немного программу, и все заработало. Сделал все через sensorValue и analogRead, далее ввёл функцию map и принцип сравнения оставил как у Вас. Спасибо за программу, время потратил не зря.

            • Я рад что у вас все заработало, заходите к нам еще.

            • Здравствуйте, не могли бы скинуть свой код. Точно такая же проблема, никак не могу исправить проблему. Буду очень сильно благодарен.

            • А можете прислать свой скетч доработанный , а то у меня тоже эта проблема .

      • Модуль реле однозначно исправен, т.к. при подаче питания на S контакт модуля, все работает корректно.

        • Добрый день, можете пожалуйста скинуть программу, сын пытается сделать не получается. У него просто плата, насос, реле, датчик влажности. Монитора нет. Помогите если не затруднит, для школы надо, я сам не особо в программах).

          • Здравствуйте, код программы приведен в статье. Монитор у него должен быть иначе как он плату Ардуино программирует

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *