jaluzi
jaluzi copied to clipboard
Выключение питания после определённого промежутка времени, а не только по кол-ву оборотов
Прошивке "жалюзи" не хватает универсальности для управления похожими устройствами как ролетами (рольставнями), гаражными воротами (может шлагбаумами), которые управляются подачей 220В на разные обмотки двигателя, т.о. в зависимости от того на какую обмотку подано питание они открываются или закрываются. Как правило, на таких изделиях есть концевики, которые при достижении крайних положений разрывают подачу питания. Так вот, для того чтобы управлять ролетами (в моём случае) через данную прошивку не хватает настройки отключать питание всех линий через определённый промежуток времени, а не по достижению кол-во оборотов, потому что нежелательно оставлять под питанием реле и не все подъёмные механизмы имеют концевики. Было бы супер если была возможность в настройках прошивки "жалюзи" выбирать по какому сценарию отключать питание на всех каналах после начала движения - по времени или по кол-ву оборотов.
Выключать по времени самый не удобный случай. Нужно, чтоб были нормальные концевики и мотор останавливался достигнув лимита. Время конечно добавим и с концевиками будет работать так. Например время подъема до лимита 30 сек таймер на 35. Поднялось до лимита, концевики обесточили двигатель и примерно через 5 секунд выключились реле. Без концевиков просто выставляем время. Но в этом случае механика должна организовать лимиты.
@tretyakovsa Спасибо! Буду ждать таймера для жалюзей. Выключать по таймеру нужно чтобы реле подключенные к ESP не находились под напряжением, понятное дело, крайние положения должны контролироваться концевиками.
Можно выпендриться и мерить нагрузку после реле: если есть нагрузка на обмотке "вверх" значит идёт подъём, как прекратилась нагрузка - значит подъём закончился и можно отключать реле. В таком случае и таймеров не надо и в интерфейсе можно показывать "прогресс" что идёт открытие/закрытие. Если дальше идти, то программно используя статистику через сколько концевики отключаются можно настоящий прогресс показывать. Это всё фантазии, в проект включать не надо, по крайней мере сейчас - есть более важные задачи которые ждут ваш проект.
P.S. так получилось что эту тему на два фронта пишу, вот параллельная ветка
Мы сейчас работаем над сценариями. Думаю к концу следующей недели уже добавим. И там будет возможность останавливать жалюзи. То есть вы сможете установить время открытия\закрытия и время остановки.
Сценарий это супер, спасибо! Просыпаться будет легче - не сразу всё окно откроется, а с 5-ти минутным шагом по 20-30 см. Тогда организм будет думать что солнце взошло ;) Сейчас когда просыпаюсь и открываю рольставни, минуту морщусь, да что я, даже кот. И внутренне перебираю слова русского фольклора, какой же стресс организм испытывает Но про таймер я писал выше между включением реле и его выключением когда оно выполнело своё действие. Т.е. если бы вместо "оборотов мотора" на странице конфигурации можно было поставить время через которое ESP'шка будет считать действием выполненным и выключит реле, поменяет статус кнопки...
@alxnovo что ни будь придумаем.
Чуть модифицировал код под свою задачу обесточивать реле после определённого времени от начала движения ролет. Как временное решение меня устраивает, мешает только использование delay когда ESP'шка ждёт и ничего не делает. Да и не феншую, как я понимаю, использовать delay, другого способа пока не придумал....с программированием, ESP и html знаком несколько дней, поэтому опыта кот наплакал.
void jalousieStop() {
digitalWrite(jsonReadtoInt(configLive, "pinMotor2"), HIGH);
digitalWrite(jsonReadtoInt(configLive, "pinMotor1"), HIGH);
-> delay(100); // n0v0 задержка чтобы реле успели полностью выключится перед дальнейшими действиями. Китайские реле выключаются в среднем за 5мск и включаются за 15мск, 100 должно хватить. Минус что используется delay
...
void jalousieNot() {
//configJson = jsonWrite(configJson, "mem", ESP.getFreeHeap());
-> int turn = 1000 * jsonReadtoInt(configJson, "turn"); // n0v0 использую переменную оборотов для таймера отключения в секундах
configJson = jsonWrite(configJson, "stateJalousie", !jsonReadtoInt(configJson, "stateJalousie"));
int state0 = jsonReadtoInt(configJson, "stateJalousie");
if (state0) {
digitalWrite(jsonReadtoInt(configLive, "pinMotor2"), HIGH);
digitalWrite(jsonReadtoInt(configLive, "pinMotor1"), LOW);
-> delay(turn); // n0v0 задержка на кол-во указанных секунд в поле оборотов - ESP заблокирована пока действует delay :(
-> jalousieStop(); // n0v0 как истекло время, выключил все реле
-> command = "jalousiestop"; // n0v0 не знаю что эта команда делает просто скопировал из другой процедуры, повёлся на значение команды "jalousiestop" ;)
}
else {
digitalWrite(jsonReadtoInt(configLive, "pinMotor1"), HIGH);
digitalWrite(jsonReadtoInt(configLive, "pinMotor2"), LOW);
-> delay(turn); // n0v0 задержка на кол-во указанных секунд в поле оборотов - ESP заблокирована пока действует delay :(
-> jalousieStop(); // n0v0 как истекло время, выключил все реле
-> command = "jalousiestop"; // n0v0 не знаю что эта команда делает просто скопировал из другой процедуры, повёлся на значение команды "jalousiestop" ;)
}
topicPub("/jalousie/status", String(state0), 1 );
}