Автоматизируем систему капельного полива

  • Платформа: Iskra JS
  • Язык программирования: JavaScript
  • Тэги: Iskra JS, бочка, капельный полив, сад, огород, дача.

Что это?

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

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

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

Что нам понадобится?

  1. Герметичный бокс, например 160×160×60
  2. Провод с вилкой на конце
  3. Розетка на стену
  4. Винтовые клеммники
  5. Бочка для отстаивания воды
  6. Насос для подкачки

Как собрать?

  1. Возьмите бочку и сделайте в ней 2 отверстия для датчиков уровня воды. Датчик максимального уровня должен находится в 10–15 сантиметрах от верхнего края, датчик минимального – примерно на середине бочки. Установите датчики в отверстия.
  2. Нижний датчик будет включать насос при низком уровне воды. Верхний датчик будет отключать насос. Так вы сможете поддерживать постоянный уровень воды и продлите срок службы насоса.
  3. Возьмите датчик скорости потока жидкости и подключите к нему шланг от насоса. Шланг должен иметь на конце гайку с трубной резьбой ½ дюйма. Обратите внимание, на корпусе датчика изображена стрелка, показывающая направление движения воды. В данном случае стрелка должна показывать в направлении от насоса к бочке. К другой стороне датчика присоедините такой же шланг с гайкой на конце.
  4. Возьмите Iskra JS и установите на неё Troyka Shield.
  5. Подключите реле в форм-факторе тройка модуль через трехпроводной шлейф мама-мама к Troyka Shield к пину P5.
  6. Возьмите герметичный короб, разместите в нем Iskra JS и реле. Для подключения насоса и датчиков вам потребуется сделать отверстия в коробке. Сделайте их минимально возможного размера. Сделайте отверстия для шлейфов двух датчиков уровня, датчика скорости потока жидкости и розетки питания насоса.
  7. Проденьте в отверстия шлейфы от каждого датчика. Подключите шлейф от нижнего датчика уровня к пину P1, а верхнего — к пину P2. Шлейф датчика скорости потока жидкости подключите к пину P3.
  8. Теперь подведите питание к компонентам устройства. Возьмите удлинитель с вилкой на конце и зафиксируйте контакты в клеммнике.
  9. Аккуратно разберите блок питания на 5 Вольт. Подключите проводами питание 220 Вольт, а USB-кабель USB — к Iskra JS.
  10. Возьмите настенную розетку. Разберите её, подведите к одному гнезду розетки провод от клеммника. Второй провод подключите через реле. Один провод на реле подключите к центральной клемме, а второй к клемме NC, что означает «нормально разомкнутый» — напряжение на розетке будет при установленном высоком логическом уровне на Iskra JS.
  11. Закройте крышку герметичной коробки и закрепите её на бочке.
  12. Подключите вилку насоса к розетке.

Алгоритм

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

Исходный код

barrel.js
// подключаем модуль датчика уровня воды
var level = require('@amperka/water-level');
// подключаем датчик на дне бочки
var onBottom = level.connect(P1, {debounce: 3});
// подключаем датчик на крышке бочки
var onTop = level.connect(P2, {debounce: 3});
// подключаем реле
var pump = require('@amperka/relay').connect(P5);
// ожидаемая скорость потока воды в литрах в минуту
var normalSpeed = 10;
// создаем объект датчика потока жидкости
var flowSensor = require('@amperka/water-flow').connect(P3);
var flowSensorTimer = null;
 
var switchOn = function() {
  // включаем насос
  pump.turnOn();
  if (flowSensorTimer === null) {
    // каждые 2000 миллисекунд проверяем скорость воды
    flowSensorTimer = setInterval(function() {
      // если скорость потока меньше обычной
      var speed = flowSensor.speed('l/min');
      if (speed < normalSpeed) {
        // выключаем насос во избежание перегрева
        switchOff();
        print('overheat');
      }
    }, 2000);
  }
};
 
var switchOff = function() {
  // выключаем насос
  pump.turnOff();
  // выключаем опрос скорости потока
  if (flowSensorTimer !== null) {
    clearInterval(flowSensorTimer);
    flowSensorTimer = null;
  }
};
 
// если датчик на дне бочки опустился
if (onBottom.read() === 'down') {
  // включаем устройство
  switchOn();
  print('barrel is empty');
}
 
// событие: датчик на крышке бочки поднялся
onTop.on('up', function () {
  print('water level is high');
  // выключаем устройство
  switchOff();
});
 
// событие: датчик на дне бочки опустился
onBottom.on('down', function () {
  // включаем устройство
  switchOn();
  print('water level is low');
});

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

Что дальше?

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