Автоматический капельный полив с датчиком влажности почвы

Автоматический капельный полив с датчиком влажности почвы

Что это такое?

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

Что для этого необходимо?

irrigator_all_in.jpg

Мы собрали все необходимые детали в сет компонентов. В набор входят:

  1. Растение в горшке с сухой землёй

Так же удобно для индикации использовать:

Как это собрать?

  1. Установите Troyka Shield на Arduino Uno irrigator_1.jpg

  2. Подключите датчик влажности почвы через Troyka Shield к аналоговому пину A0 irrigator_2.jpg

  3. Подключите дисплей к управляющей плате через Troyka Shiled:

    1. Пин cs к 9 пину Toyka Shield.

    2. Пины SPI дисплея к разъёму SPI на Troyka Shiled irrigator_3.jpg

  4. Подключите силовой ключ к контакту 4 irrigator_4.jpg

  5. Подведите коммутирующее напряжение к силовому ключу в разъём P+ и P− irrigator_5.jpg

  6. Подключите помпу к силовому ключу через клеммник с разъёмами L+ и L−. irrigator_6.jpg В итоге должна получится схема.

  7. Воткните сенсор влажности почвы в землю.

  8. Другой конец шланга вставьте с водой в землю. Если горшок с землёй весит менее 2 кг, рекомендуется отдельно закрепить трубку, чтобы она не перевернула растение.

  9. Опустите помпу в ёмкость с водой. irrigator_7.jpg

  10. Подключите питание.

Калибровка

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

  1. Запишите показания на дисплее при воткнутом в сухой горшок сенсоре. Это — минимум влажности.

  2. Полейте цветок и дождитесь пока вода полностью впитается в землю и показания сенсора установятся на одном уровне. Запишите их. Это — максимум влажности.

  3. В скетче исправьте значения константы HUMIDY_MIN на значение минимальной влажности и HUMIDY_MAX на значение максимальной влажности. Заново прошейте Arduino Uno.

Масштабирование решения

Мы описали решение для одного растения. Но обычно требуется поливать несколько растений. Помимо очевидного решения — подключения к Arduino нескольких помп и датчиков влажности — существует более простое и дешёвое. Достаточно в трубке, которая идёт в комплекте с помпой проделать шилом дырочки на расстоянии около 30 см и воткнуть в эти дырочки куски стержней от обычных шариковых ручек. Выглядеть это будет так:

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

Исходный код

Для работы скетча вам понадобиться скачать и установить библиотеку для работы с дисплеем QuadDisplay2

irrigator.ino
// Подключаем библиотеку для работы с дисплеем
#include "QuadDisplay2.h"
// даём разумное для пина, к которому подключена помпа
#define POMP_PIN        4
// даём разумное для пина, к которому подключён датчик влажности почвы
#define HUMIDITY_PIN    A0
// минимальный порог влажности почвы
#define HUMIDITY_MIN    200
// максимальный порог влажности почвы
#define HUMIDITY_MAX    700
// интервал между проверкой на полив растения
#define INTERVAL        60000 * 3   
// переменная для хранения показания влажности почвы
unsigned int humidity = 0;
 
// статическая переменная для хранения времени
unsigned long waitTime = 0;
 
// создаём объект класса QuadDisplay и передаём номер пина CS
QuadDisplay qd(9);
 
void setup(void)
{
  // начало работы с дисплеем
  qd.begin();
  // пин помпы в режим выхода
  pinMode(POMP_PIN, OUTPUT);
  // выводим 0 на дисплей
  qd.displayInt(0);
}
 
void loop(void)
{
  // считываем текущее показания датчика влажности почвы
  int humidityNow = analogRead(HUMIDITY_PIN);
  // если показания текущей влажности почвы
  // не равняется предыдущему запросу 
  if(humidityNow != humidity) {
    // сохраняем текущие показания влажности
    humidity= humidityNow;
    // и выводим показания влажности на дисплей
    qd.displayInt(humidityNow);
  }
  // если прошёл заданный интервал времени
  // и значения датчика влажности меньше допустимой границы
  if ((waitTime == 0 || millis() - waitTime > INTERVAL) && humidity  HUMIDITY_MIN ) {
    // включаем помпу
    digitalWrite(POMP_PIN, HIGH);
    // ждём 2 секунды
    delay(2000);
    // выключаем помпу
    digitalWrite(POMP_PIN, LOW);
    // приравниваем переменной waitTime
    // значение текущего времени плюс 3 минуты 
    waitTime = millis();
  }
}

Демонстрация работы устройства

Особенности:

- Совместим с Grove интерфейсом;

- Прост в использовании.