====== Автополив — дополнение к набору «Йодо» ======
Электронная версия инструкции из набора [[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 |}}