====== Автоматизируем систему капельного полива ====== {{ :projects:barrel:wiki-poliv.jpg?nolink |}} * Платформа: Iskra JS * Язык программирования: JavaScript * Тэги: Iskra JS, бочка, капельный полив, сад, огород, дача. ===== Что это? ===== Системы капельного полива — удобный и экономичный способ обеспечить должный уход растениям в садах и огородах. Вода из расходной ёмкости самотёком подводится к корням, увлажняя почву на грядках и в теплицах. Однако, чтобы система работала эффективно, уровень воды в резервуаре должен постоянно поддерживаться в чётко определенных границах. Специально для этого мы придумали и испытали устройство контроля уровня воды в бочке. ===== Что нам понадобится? ===== {{ :projects:barrel:party.png?nolink&700 |}} - [[amp>product/iskra-js?utm_source=proj&utm_campaign=barrel&utm_medium=wiki | Iskra JS]] - [[amp>product/arduino-troyka-shield?utm_source=proj&utm_campaign=barrel&utm_medium=wiki | Troyka Shield]] - [[amp>product/water-level-sensor-angle?utm_source=proj&utm_campaign=barrel&utm_medium=wiki | Датчик уровня воды угловой]] - [[amp>product/water-flow-sensor?utm_source=proj&utm_campaign=barrel&utm_medium=wiki | Датчик скорости потока жидкости ]] - [[amp>product/troyka-relay?utm_source=proj&utm_campaign=barrel&utm_medium=wiki | Реле (Troyka-модуль)]] - [[amp>product/usb-power-plug-2a?utm_source=proj&utm_campaign=barrel&utm_medium=wiki | Импульсный блок питания с USB-разъёмом (5 В, 2100 мА)]] - Герметичный бокс, например [[amp>product/sealed-enclosure-160x160x60?utm_source=proj&utm_campaign=barrel&utm_medium=wiki | 160×160×60 ]] - Провод с вилкой на конце - Розетка на стену - Винтовые клеммники - Бочка для отстаивания воды - Насос для подкачки ===== Как собрать? ===== - Возьмите бочку и сделайте в ней 2 отверстия для датчиков уровня воды. Датчик максимального уровня должен находится в 10–15 сантиметрах от верхнего края, датчик минимального – примерно на середине бочки. Установите датчики в отверстия.{{ :projects:barrel:wiki-datchiki.jpg?nolink&700 |}} - Нижний датчик будет включать насос при низком уровне воды. Верхний датчик будет отключать насос. Так вы сможете поддерживать постоянный уровень воды и продлите срок службы насоса.{{ :projects:barrel:level.png?nolink&400 |}} - Возьмите датчик скорости потока жидкости и подключите к нему шланг от насоса. Шланг должен иметь на конце гайку с трубной резьбой ½ дюйма. Обратите внимание, на корпусе датчика изображена стрелка, показывающая направление движения воды. В данном случае стрелка должна показывать в направлении от насоса к бочке. К другой стороне датчика присоедините такой же шланг с гайкой на конце.{{ :projects:barrel:160519_lin_0921.jpg?nolink&700 |}} - Возьмите Iskra JS и установите на неё Troyka Shield.{{ :projects:barrel:160519_lin_0919.jpg?nolink&700 |}} - Подключите реле в форм-факторе тройка модуль через трехпроводной шлейф мама-мама к Troyka Shield к пину ''P5''.{{ :projects:barrel:relay.png?nolink&700 |}}{{ :projects:barrel:160519_lin_0917-_2_.jpg?nolink&700 |}} - Возьмите герметичный короб, разместите в нем Iskra JS и реле. Для подключения насоса и датчиков вам потребуется сделать отверстия в коробке. Сделайте их минимально возможного размера. Сделайте отверстия для шлейфов двух датчиков уровня, датчика скорости потока жидкости и розетки питания насоса.{{ :projects:barrel:160519_lin_0913.jpg?nolink&700 |}}{{ :projects:barrel:160519_lin_0910.jpg?nolink&700 |}} - Проденьте в отверстия шлейфы от каждого датчика. Подключите шлейф от нижнего датчика уровня к пину ''P1'', а верхнего — к пину ''P2''. Шлейф датчика скорости потока жидкости подключите к пину ''P3''.{{ :projects:barrel:fully_assembled.png?nolink&700 |}} - Теперь подведите питание к компонентам устройства. Возьмите удлинитель с вилкой на конце и зафиксируйте контакты в клеммнике.{{ :projects:barrel:160519_lin_0907-_2_.jpg?nolink&700 |}} - Аккуратно разберите блок питания на 5 Вольт. Подключите проводами питание 220 Вольт, а USB-кабель USB — к Iskra JS.{{ :projects:barrel:160519_lin_0905.jpg?nolink&700 |}} - Возьмите настенную розетку. Разберите её, подведите к одному гнезду розетки провод от клеммника. Второй провод подключите через реле. Один провод на реле подключите к центральной клемме, а второй к клемме NC, что означает «нормально разомкнутый» — напряжение на розетке будет при установленном высоком логическом уровне на Iskra JS.{{ :projects:barrel:160519_lin_0903.jpg?nolink&700 |}} - Закройте крышку герметичной коробки и закрепите её на бочке.{{ :projects:barrel:160519_lin_0900.jpg?nolink&700 |}} - Подключите вилку насоса к розетке. ===== Алгоритм ===== * Проверяем начальные показания датчиков. Если воды мало, включаем насос. * Если сработал верхний датчик уровня воды, отключаем насос. * Если сработал нижний датчик уровня воды, включаем насос. * Если насос включен, но скорость потока воды меньше ожидаемой, значит насос работает вхолостую. Отключаем насос во избежание перегрева и преждевременного выхода из строя. ===== Исходный код ===== // подключаем модуль датчика уровня воды 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'); }); ===== Демонстрация работы устройства ====== {{youtube>v3zp2mXvNrc?large}} ===== Что дальше? ===== К этому проекту можно легко добавить небольшой экран, отображающий время работы насоса и количество прокачанных литров воды. А ещё можно добавить датчик влажности почвы из проекта [[projects:irrigator|автополива растений]] или датчики освещенности и температуры — для реализации более сложных алгоритмов полива.