Здравствуйте. В то время, когда мы использовали датчики влажности почвы, мы использовали вот такие:
И то мы “лажанули” и заказали не те, которые были нужны (без протокола RS-485).
Но они вполне себе работали. Была только проблема с калибровкой.
На данный момент мы поливаем по времени, а необходимость полива определяем вручную. Сценарий, по времени, может быть разный, в зависимости от растений и необходимой частоты. Мы поливаем по 10мин каждые 2 часа в дневное время. Но у нас есть дренаж. Возможно вам будет достаточно по чуть-чуть раз в день.
Для включения насоса используем модули WB-MR6CU v.2. Но можете посмотреть и подобрать что-то более подходящее из релейных модулей.
сценарий для полива по времени (может немного кривоватый в плане описания, но сделан на основе другого сценария и работает, а это, лично для меня, самое главное):
//Pump1.js (внести в название правила)
//'use strict';
var grow_box = "1"; // CHANGE_ME! имя устройства. Выводится в заголовок окна и служит для разделения устройств
log.info("light_"+grow_box+"START######################"); //Это лог.
var dimmer_relay = "wb-mr6cu_22/K1"; //CHANGE_ME! устройство-реле питания диммера (доработка, используемй диммер подтягивает свой вход к VCC)
var ps = new PersistentStorage("storage_"+grow_box, {global: true});// Определим объект-хранилище.
var pumpStartTime; //Время начала "полива"
var pumpStopTime; //Время конца "полива"
setTimeVariable();
//Элементы виртуального устройства
//управления
var deviceCells = {
//Начало рассвета hh:mm
"Pump (start) time": {
type: "text",
readonly: false,
value: ps["pump_start_time"],
},
//Длительность рассвета
"Pump duration": {
type: "text",
readonly: false,
value: ps["sun_start_duration"],
},
pumpON : {
type : "switch",
value : false,
},
pumpOFF : {
type : "switch",
value : false,
},
};
//Создадим виртуальное устройство и добавим в него элементы
defineVirtualDevice("pump_"+grow_box, {
title:"Pump "+grow_box,
cells: deviceCells
});
defineRule("Sunraise start time change", { //название правила
whenChanged: "pump_"+grow_box+"/Pump (start) time",
then: function (newValue, devName, cellName) { //выполняй следующие действия
log.info("pump_"+grow_box+"/Pump start time ", newValue); //Это лог. Он попадает в /var/log/messages
ps["pump_start_time"] = newValue;
setTimeVariable();
}
});
defineRule("Sunraise duration change", { //название правила
whenChanged: "pump_"+grow_box+"/Pump duration",
then: function (newValue, devName, cellName) { //выполняй следующие действия
log.info("pump_"+grow_box+"/Pump duration", newValue); //Это лог. Он попадает в /var/log/messages
ps["sun_start_duration"] = newValue;
setTimeVariable();
}
});
defineRule("dayProcess change", { //название правила
whenChanged: "pump_"+grow_box+"/pumpOFF",
then: function (newValue, devName, cellName) { //выполняй следующие действия
if (newValue){ //Включаем "день"
dev["pump_"+grow_box+"/pumpON"] = false;
}
}
});
defineRule("dayProcess change off", { //название правила
whenChanged: "pump_"+grow_box+"/pumpON",
then: function (newValue, devName, cellName) { //выполняй следующие действия
if ((dev["pump_"+grow_box]["pumpON"] == true)){
dev["pump_"+grow_box+"/pumpOFF"] = false;
}
}
});
//*Дополнение для реле диммера
defineRule("dimmer_relay_on", { //название правила
whenChanged: "pump_"+grow_box+"/pumpON",
then: function (newValue, devName, cellName) { //выполняй следующие действия
if ((dev["pump_"+grow_box]["pumpON"] == true)){
dev[dimmer_relay] = true; //включаем реле
}
}
});
defineRule("dimmer_relay_off", { //название правила
whenChanged:"pump_"+grow_box+"/pumpON",
then: function (newValue, devName, cellName) { //выполняй следующие действия
if ((dev["pump_"+grow_box]["pumpON"] == false)){
dev[dimmer_relay] = false;
}
}
});
//*Конец дополнения
defineRule("cron minute timer", { //Просто задание, которое выполняется каждую минуту
when: cron("00 * * * * *"),
then: function () {
//log.info(grow_box, "cron timer executed! DEBUG ONLY.");
d = new Date(); //Текущее время
//pumpStartTime
if ((dev["pump_"+grow_box]["pumpON"]==false) && (d > pumpStartTime) && (d<pumpStopTime)){
log.info(grow_box, "cron timer executed! Sunraise process START", "pumpStartTime",pumpStartTime,"pumpStopTime",pumpStopTime);
dev["pump_"+grow_box]["pumpON"] = true;
}
//dayProcess
if ((dev["pump_"+grow_box]["pumpOFF"]==false) && (d > pumpStopTime)){
log.info(grow_box, "cron timer executed! DAY process START","pumpStopTime",pumpStopTime);
dev["pump_"+grow_box]["pumpOFF"] = true;
}
}
});
defineRule("cron day timer", { //Просто задание, которое выполняется раз в сутки и меняет дату в переменных на текущую.
when: cron("01 00 00 * * *"),
then: function () {
setTimeVariable();
}
});
function string_to_time(srcString) {
//log.info("string_to_time_"+grow_box, srcString)
var d = new Date();
var datetime = new Date(d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate()+'T' + srcString + 'Z');
datetime.setMinutes(datetime.getMinutes() + datetime.getTimezoneOffset());//Приведем к локальному:
return datetime;
};
function setTimeVariable() {
pumpStartTime = string_to_time(ps["pump_start_time"]);
pumpStopTime = new Date(pumpStartTime);
pumpStopTime.setMinutes(pumpStopTime.getMinutes() + parseInt(ps["sun_start_duration"]));
};
defineRule("SunRaise_starter", { //название правила
whenChanged: "pump_"+grow_box+"/pumpON",
then: function (newValue, devName, cellName) { //выполняй следующие действия
log.info("pump_"+grow_box+" pumpON function", newValue, devName, cellName); //Это лог.
if (newValue){
dura = (pumpStopTime - pumpStartTime)/1000; //время в секундах
log.info("pump_"+grow_box+" pumpON", "dura", dura); //Это лог.
startTicker(grow_box+"raiseTicker", 1000); //Запуск таймера, отрабатывает раз в секунду.
} else {
timers[grow_box+"raiseTicker"].stop();
log.info("pump_"+grow_box+"Ticker STOP sunraise");
}
}
});
Получится такого плана штука:
Время начала (start) вводится вручную ввиде hh:mm (или h:mm)
Продолжительность (duration) вводится просто минутами.
Для уменьшения напора можно применить системы капельного полива. Плюс хочу обратить ваше внимание, что у вас насосы на 12в. Будьте внимательны при подключении!
Честно говоря не подскажу по поводу датчика и работы через датчик тк у нас работа в этом направлении не была завершена ввиду потери необходимости в этом.
Добрый день. По поводу датчиков, если у вас не более 4х и не задействованы аналоговые и дискретный входы на контроллере, то можете подключить к ним, иначе Модуль аналогового ввода WB-MAI6.
Датчиков собственно у меня всего два: один для рассады, второй для цветов.
аналоговые и дискретные порты пока не заняты.
Питание на датчики подал с порта контроллера:
На датчике есть цифровой и аналоговый выходы, куда их подключить - на разобрался.
пробовал подключить на порты W1 и W2 - но никаких показаний на контроллере не увидел.
Может надо подключать аналоговый выход датчика к порту А1 контроллера?
Да, вам требуется подобрать требуемую влажность и соответственно значение аналогового выхода датчика подобрать для включения и выключения. К примеру 2 В включение, 3 - выключение. Но это уже подбирать в процессе настройки системы. Контакты A1-A3.
Добрый день.
В выходные успешно подключил датчик влажности почвы в аналоговому порту контроллера, сразу поймал изменения значений датчика в зависимости от влажности почвы. Данный вопрос решен.
Возникли новые:
Если датчики будут отстоят от контроллера на расстоянии примерно 25 метров, можно ли подать на них питание 5В непосредственно от контроллера по экранированной витой паре? А по соседним парам в этом же кабеле вернуть показания с данных датчиков? Или лучше поставить отдельный источник питания 5В рядом с датчиками? Стабильный ли будет сигнал с датчиков на таком расстоянии?
Если параметры насосов таковы: напряжение 12 В, мощность 4 Вт, можно ли управлять ими с помощью модуля WBIO-DO-SSR-8?
Если можно, то с помощью какого кабеля лучше подать напряжение на насос, если учесть что расстояние между модулем WBIO-DO-SSR-8 и насосом будет пример но 25 метров? Можно ли использовать для этого экранированную витую пару?
Максимальный коммутируемый ток модуля 400 мА. При ваших параметрах ток насоса 333 мА. Т.е. в пределах нормы. Но у насоса может быть высокий пусковой ток, существенно превышающий 400 мА. Я бы не рисковал, использовал что-то более мощное.
Если насосы бесщеточные типа
то можно, у них пускового тока по сути нет.
У меня они успешно коммутируются вообще полевиками в sot23 корпусе.
Ну и экранирование “силовых” проводов к насосам - особого смысла не имеет. Оно уменьшит помехи на рядом проложенные кабеля, да. Но если кабель к датчику влажности, ку которого выходной сигнал - напряжение - то гораздо эффективнее кондансатор на этот сигнал поставить. Все равно влажность скачком не меняется.