====== Автополив — дополнение к набору «Йодо» ====== Электронная версия инструкции из набора [[amp>product/yodo-automatic-watering?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Автополив]]. Здесь собраны все исходные коды экспериментов, подсказки и хаки по прохождению набора. {{ :water:frontpage.png?nolink&600 |}} ===== Электронная версия ===== * [[https://storage.googleapis.com/hq.amperka.ru/yodo_plant/plant-y_13.04.18-web.pdf|Книга]] в формате .pdf ===== Видеообзор набора «Автополив» ===== {{youtube>TCt3E7iWZ7w?large}} ===== Необходимые модули из набора «Йодо» ===== {{ :water:iotyodocomp.png?nolink&600 |}} Для проектов Автополива тебе потребуются платы и модули из базового набора «Йодо»: * [[amp>product/iskra-js?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Iskra JS]] * [[amp>product/troyka-potentiometer?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Потенциометр (Troyka-модуль)]] * [[amp>product/troyka-button?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Кнопка (Troyka-модуль)]] * [[amp>product/troyka-buzzer?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Зуммер (Troyka-модуль)]] * [[amp>product/troyka-light-sensor?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Датчик освещённости (Troyka-модуль)]] * [[amp>product/troyka-5mm-led-module?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Светодиод (Troyka-модуль)]] * [[amp>product/servo-fs90?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Микросервопривод FS90]] * [[amp>product/hc-sr04-ultrasonic-sensor-distance-module?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Ультразвуковой дальномер HC-SR04]] Если ты уже используешь эти модули и платы в своих крутых проектах, а разбирать их не хочется — закажи недостающие! ===== Эксперименты ===== ==== 2. Живой фонтан ==== Фонтан силе своей подчини. Через силовой ключ подключи и кнопку управления добавь. ** Схема сборки устройства ** {{ :water:yodo-automatic-watering-2.png |}} ** Код эксперимента** var button = require('@amperka/button').connect(A1); var pump = require('@amperka/power-control').connect(P11); button.on('press', function() { pump.toggle(); }); На нашей вики ты сможешь узнать подробнее о функциях библиотеки [[js:power-control|@amperka/power-control]]. ==== 3. Дренаж ==== Перегреется помпа и из строя выйдет, если без воды стоять будет долго. Датчик уровня установи, чтобы силы её сберечь. ** Схема сборки устройства ** {{ :water:yodo-automatic-watering-3.png |}} Используй переходники для соединения проводов. {{ :water:yodo-automatic-watering-32.png |}} ** Код эксперимента** var pump = require('@amperka/power-control').connect(P11); pump.turnOn(); var level = require('@amperka/water-level').connect(P0); level.on('down', function () { print('Water level is low'); pump.turnOff(); }); Библиотека [[js:water-level|@amperka/water-level]]. ==== 4. Автопополнение ==== Тонкой настройкой датчика уровня займёмся. Автопополнение воды практикой нам будет. ** Схема сборки устройства ** {{ :water:yodo-automatic-watering-4.png |}} var pump = require('@amperka/power-control').connect(P11); var level = require('@amperka/water-level') .connect(P0, {debounce: 0.5}); level.on('up', function () { pump.turnOff(); }); level.on('down', function () { pump.turnOn(); }); ==== 5. Калибровка ==== Азы датчика влажности почвы познаем и рабочий диапазон на Iskra JS увидим. ** Схема сборки устройства ** {{ :water:yodo-automatic-watering-5.png |}} setInterval(function() { var value = analogRead(A0); print(value); }, 200); ==== 6. Напоминальник ==== В помощь джедаю звуковое уведомление сделаем. Поливать растения напоминать будет, когда почва суха. ** Схема сборки устройства ** {{ :water:yodo-automatic-watering-6.png |}} var hyst = require('@amperka/hysteresis') .create({high: 0.5, highLag: 2, low: 0.4, lowLag: 2}); var led = require('@amperka/led').connect(A2); var buzzer = require('@amperka/buzzer').connect(A1); setInterval(function() { hyst.push(analogRead(A0)); }, 200); hyst.on('low', function() { buzzer.beep(1, 0.5); led.blink(1, 0.5); }); hyst.on('high', function() { buzzer.turnOff(); led.turnOff(); }); ==== 7. Автополив ==== Автополив создай. Если поча суха, пусть помпа включится и растение польёт. Датчик уровня помпе выйти из строя не даст. ** Схема сборки устройства ** {{ :water:yodo-automatic-watering-7.png |}} var hyst = require('@amperka/hysteresis') .create({high: 0.5, highLag: 2, low: 0.4, lowLag: 2}); var pump = require('@amperka/power-control').connect(P11); var level = require('@amperka/water-level').connect(P0); setInterval(function() { hyst.push(analogRead(A0)); }, 200); hyst.on('low', function() { pump.turnOn(); }); hyst.on('high', function() { pump.turnOff(); }); level.on('down', function () { pump.turnOff(); }); ==== 8. Пушистая оборона ==== Домашних животных своих отучи растительность уничтожать. Демотиватор для них сделаем. ** Схема сборки устройства ** {{ :water:yodo-automatic-watering-8.png |}} var sonic = require('@amperka/ultrasonic') .connect({trigPin: P10, echoPin: P13}); var pump = require('@amperka/power-control').connect(P11); var buzzer = require('@amperka/buzzer') .connect(A1) .frequency(440); setInterval(function() { sonic.ping(function(err, value) { if (err) return; if (value < 20) { buzzer.beep(0.5, 0.2); } else if (value < 50) { buzzer.beep(1, 0.5); } else { buzzer.turnOff(); } if (value < 5) { pump.turnOn(); } else { pump.turnOff(); } }, 'cm'); }, 200); ==== 9. Таймер ==== Галактическое время почувствуй, чтобы растения по расписанию поливать. ** Схема сборки устройства ** {{ :water:yodo-automatic-watering-9.png |}} var rtc = require('@amperka/rtc').connect(); rtc.setTime(); var pump = require('@amperka/power-control').connect(P11); var lastWatering = -1; setInterval(function () { var date = rtc.getTime(); print(date.toString()); if (lastWatering === date.getDate()) return; if (date.getHours() === 13) { lastWatering = date.getDate(); pump.pulse(3); } }, 5000); Внимание! Если прошивка твоей Iskra JS старше 1.93, значит она уже умеет работать с часовыми поясами! Просто добавь самой первой строкой в коде: E.setTimeZone(+3); Важно! Обновить прошивку поможет раздел вики [[js:ide#%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B8|Обновление прошивки]]. На нашей вики ты сможешь узнать подробнее о функциях библиотеки [[js:rtc|@amperka/rtc]]. ==== 10. Дождеватор ==== О растениях на даче забывать не стоит. Дождеватор для газона сделаем. Сервопривод большую площадь охватить поможет. ** Схема сборки устройства ** {{ :water:yodo-automatic-watering-10.png |}} var rtc = require('@amperka/rtc').connect(); rtc.setTime(); var pump = require('@amperka/power-control') .connect(P11); var servo = require('@amperka/servo').connect(P12); var swing = require('@amperka/animation').create({ from: 30, to: 150, duration: 5, updateInterval: 0.02 }).queue({ from: 150, to: 30, duration: 5 }); swing.on('update', function(val) { servo.write(val); }); var lastWatering = -1; setInterval(function () { var date = rtc.getTime(); if (lastWatering === date.getDate()) return; if (date.getHours() === 6) { lastWatering = date.getDate(); swing.play(); pump.pulse(10); } }, 1000); ==== 11. Дождеватор 3000 ==== Дождеватор усовершенствуем, ультразвуковой дальномер добавив. Чтобы других джедаев водой не облить. ** Схема сборки устройства ** {{ :water:yodo-automatic-watering-11.png |}} var rtc = require('@amperka/rtc').connect(); var pump = require('@amperka/power-control').connect(P11); var servo = require('@amperka/servo').connect(P12); var sonic = require('@amperka/ultrasonic') .connect({trigPin: P10, echoPin: P13}); var angle = 90; var delta = 1; var lastWatering = -1; var portions = 50; var wateringIntervals = portions; setInterval(function () { var date = rtc.getTime(); if (lastWatering === date.getDate()) return; if (date.getHours() === 6) { wateringIntervals = 0; lastWatering = date.getDate(); } }, 1000); setInterval(function() { if (wateringIntervals > portions) { pump.turnOff(); return; } sonic.ping(function(err, value) { if (value < 100 || wateringIntervals > portions) { pump.turnOff(); } else { wateringIntervals = wateringIntervals + 1; servo.write(angle); pump.turnOn(); if (angle === 150 || angle === 30) { delta = -delta; } angle = angle + delta; } }, 'cm'); }, 100); ===== Идеи проектов ===== На достигнутом не останавливайся, свои проекты создавай и мудрость джедая постигай. ==== Телеграм-бот и IFTTT ==== Автоматизируй полив и общайся со своим садом с помощью Телеграм-бота. Установи программные триггеры с сервисом IFTTT. Всему этому ты научишься с эпизодом 2: [[amp>product/yodo-iot?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Йодо. Интернет вещей]]. {{ :water:wiki-ifttt.png?nolink |}} ==== Автополив 2.0 ==== Добавь датчик влажности воздуха для качественного ухода за растениями. Отслеживай параметры на сайте dweet.io. Для этого потребуется модуль [[amp>product/troyka-wi-fi?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Wi-Fi]] или [[amp>product/arduino-ethernet-shield?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Ethernet Shield]]. {{ :water:wiki-water-dot-o.png?nolink |}} ==== Увлажнитель воздуха ==== Приспособь бытовой увлажнитель воздуха. Управляй им через модули [[amp>product/troyka-nano-switch?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Nano Switch]]. Используй часы реального времени для работы по расписанию. {{ :water:wiki-dispencer.png?nolink |}} ==== #Структор ==== Устройства на Troyka Slot Shield можно удобно оформлять в корпус из #Структора с помощью набора плашек [[amp>product/structor-slot-box?utm_source=man&utm_campaign=yodo-automatic-watering&utm_medium=wiki|Slot Box (#Структор)]]. {{ :water:wiki-scructor.png?nolink |}}