Электронная версия инструкции из набора Автополив. Здесь собраны все исходные коды экспериментов, подсказки и хаки по прохождению набора.
Для проектов Автополива тебе потребуются платы и модули из базового набора «Йодо»:
Если ты уже используешь эти модули и платы в своих крутых проектах, а разбирать их не хочется — закажи недостающие!
Фонтан силе своей подчини. Через силовой ключ подключи и кнопку управления добавь.
Код эксперимента
var button = require('@amperka/button').connect(A1); var pump = require('@amperka/power-control').connect(P11); button.on('press', function() { pump.toggle(); });
На нашей вики ты сможешь узнать подробнее о функциях библиотеки @amperka/power-control.
Перегреется помпа и из строя выйдет, если без воды стоять будет долго. Датчик уровня установи, чтобы силы её сберечь.
Используй переходники для соединения проводов.
Код эксперимента
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(); });
Библиотека @amperka/water-level.
Тонкой настройкой датчика уровня займёмся. Автопополнение воды практикой нам будет.
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(); });
Азы датчика влажности почвы познаем и рабочий диапазон на Iskra JS увидим.
setInterval(function() { var value = analogRead(A0); print(value); }, 200);
В помощь джедаю звуковое уведомление сделаем. Поливать растения напоминать будет, когда почва суха.
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(); });
Автополив создай. Если поча суха, пусть помпа включится и растение польёт. Датчик уровня помпе выйти из строя не даст.
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(); });
Домашних животных своих отучи растительность уничтожать. Демотиватор для них сделаем.
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);
Галактическое время почувствуй, чтобы растения по расписанию поливать.
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);
Важно! Обновить прошивку поможет раздел вики Обновление прошивки.
На нашей вики ты сможешь узнать подробнее о функциях библиотеки @amperka/rtc.
О растениях на даче забывать не стоит. Дождеватор для газона сделаем. Сервопривод большую площадь охватить поможет.
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);
Дождеватор усовершенствуем, ультразвуковой дальномер добавив. Чтобы других джедаев водой не облить.
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. Всему этому ты научишься с эпизодом 2: Йодо. Интернет вещей.
Добавь датчик влажности воздуха для качественного ухода за растениями. Отслеживай параметры на сайте dweet.io. Для этого потребуется модуль Wi-Fi или Ethernet Shield.
Приспособь бытовой увлажнитель воздуха. Управляй им через модули Nano Switch. Используй часы реального времени для работы по расписанию.
Устройства на Troyka Slot Shield можно удобно оформлять в корпус из #Структора с помощью набора плашек Slot Box (#Структор).