Страница 1 из 2

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 08:49
AlexRyzh
На Arduino Nano делаю небольшую автоматику для контроля основных параметров микроклимата бройлерам. В этом устройстве запланировал реализовать и таймер включения и отключения освещения в нужное время. На первый взгляд казалось это просто, но в итоге не получается, и ничего придумать не могу. Может кто сталкивался, подскажите как правильно реализовать, чтоб работало как нужно.
Задача: Сделать 2 периода включения света.
Первый период это включение рано утром (например в 4:00 для увеличения светового дня) и выключение, когда уже светло (например в 9:00)
Второй период, включение в 17:00 и выключение в 2:00 (Время включения и отключения может меняться, в зависимости от возраста цыплят и времени года, эти диапазоны я меняю с пульта вручную, по ситуации, необходимости...)
Для реализации такого таймера, я считываю с часов время одним числом. Т.е если время 9:45, я считываю как число 945. Задаю переменную для включения утром и переменную для отключения утром. И еещ переменные для включения вечером и выключения ночью.
Получается Вкл в 4:00 Выкл 9:00
_________  Вкл в 17:00 Выкл 2:00
Хотел реализовать через блоки сравнения, но т.к происходит обнуление текущего времени при переходе на новые сутки сравнение будет работать не правильно
От и не пойму как реализовать такой простой таймер

Можно было бы сделать через сравнение текущего времени, например, если текущее время равно установленному для включения, то включить на 5 (или сколько нужно) часов. Но в таком случае, если произойдет перезагрузка конроллера (что не исключено), То Ардуино не будет знать, что сейчас время включенного освещения, и тем более не будет знать сколько этого времени осталось. Т.е. такой подход совсем некорректный

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 09:09
rw6cm
Вообще то при переходе через 00:00 время надо разбивать 17:00 - 23:59,  00:00 - 2:00.
При этом. от неприятностей использовать условие     17:00 < вкл < 23:59 и 00:00 < вкл < 2:00/

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 09:16
confiden
покажите то что вы уже сделали. И посмотрим что надо изменить тогда уже

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 09:18
Agafon
А я для этой цели использовал датчик света, он изначально стоит чтоб вечером или ночью по участку впотьмах не лазить. Собственно он и отключает внешний свет, а заодно и внутренний.
Делал на скорою руку, не успевали с переселением в новый курятник. Сейчас переделываю

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 09:19
confiden
Тут довольно много ньюансов и нужно более менее представлять вашу схему. Например датчик освещенности для отключения освещения. Это аналоговое устройство или двухпозиционное. Чувствительность для отключение програмная или это какой то резистор на плате датчика. Индикация текущего времени . Способ задания таймера. Количество уставок. 
Тут просто необходимо все понимать

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 09:49
Bogomil

Почему бы не использовать будильник, установите время включения и выключения

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 10:20
AlexRyzh
rw6cm писал(а):покажите то что вы уже сделали. И посмотрим что надо изменить тогда уже
ВОт как я делал, но видимо придется делать дополнительное условие для перехода на новые сутки
Изображение

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 10:45
slavas
Попробуйте мой блок, настоятельно рекомендую использовать DS3231. Она полностью совместима с 1307, а точность хода в разы лучше.

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 10:47
rw6cm
AlexRyzh писал(а):видимо придется делать дополнительное условие для перехода на новые сутки
При планировании на каждые сутки, команды должны рассматриваться с 00:00 до 23:59,
и путаницы не будет.

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 10:57
eugeneb
в блоке I1*I2 я бы умножал на 60. Тогда ВремяСуток получится
в минутах от полуночи. Уже удобнее.

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 11:04
rw6cm
eugeneb писал(а):в блоке I1*I2 я бы умножал на 60. Тогда ВремяСуток получитсяв минутах от полуночи. Уже удобнее.
Если нужно часто менять установки, удобней *100,
время вводится реальное, а *60 придется в уме постоянно пересчитывать для ввода.

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 11:19
eugeneb
программе удобнее непрерывная переменная, а для человека можно пересчитывать самой программой.
А впрочем, здесь это - по барабану. Просто некрасиво, когда у переменной провалы.

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 11:31
Vitez
Я бы сделал так.

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 11:46
slavas
Vitez, а Вы пробовали так делать? Этот блок срабатывает по совпадению, а если позже времени включения контроллер перезагрузится или был выключен событие будет пропущено. Это просто будильник.

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 12:28
AlexRyzh
slavas писал(а):При планировании на каждые сутки, команды должны рассматриваться с 00:00 до 23:59,и путаницы не будет.
Оно то так. Но если нужно включить в 17:00, а выключить в 1:00 или 2:00, или 3:00, то вот здесь и начинается проблема.
Вообще я решил обойти эту проблему, выключением света не в 1:00 не в 2:00, а в 23:59. Но утром включать раньше, чтоб набрать нужные часы освещения.

Добавлено (27.09.2016, 12:28)
---------------------------------------------
AlexRyzh писал(а):Попробуйте мой блок, настоятельно рекомендую использовать DS3231. Она полностью совместима с 1307, а точность хода в разы лучше.
Спасибо. Пока не понимаю как он работает, по свободке разберусь, может реально то что нужно

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 12:30
Vitez
slavas писал(а):Vitez, а Вы пробовали так делать? Этот блок срабатывает по совпадению, а если позже времени включения контроллер перезагрузится или был выключен событие будет пропущено. Это просто будильник.
Ок. Ваша правда.

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 14:37
AlexRyzh
Думаю вот так должно получиться. Не проверял, т.к. Ардуину подключил к работе, не хочу снимать для проверки.
Изображение
Получается так:
Переменную ВыклСветаН в каждом цикле передаю во временную переменную "Сутки". Далее проверяю, меньше времени включения и меньше текущего времени? Если меньше, значит идет переход через сутки, и чтобы небыло ложного срабатывания, временной переменной присваиваю значение, например 5000, что явно больше 2359. И далее проверка на  отключение идет по временной переменной.
Когда будет полночь, время будет 0000, условие не выполнится и переменная "Сутки" будет равна заданному значению времени отключения. И отключение произойдет в указанное время без ложных срабатываний.
Как-то так 

Добавлено (27.09.2016, 14:37)
---------------------------------------------
Вернее вот более правильная картинка включения и выключения света (таймера) по указанному времени, с переходом на новые сутки
Изображение

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 16:26
eugeneb
AlexRyzh, инвертируйте логику.

У вас в сутках два интервала, когда свет должен гореть и два - когда не должен.
Все они чередуются. один интервал, когда должен, переходит через границу суток.
Вы ищете сигнал, который включает свет. Это усложняет программу.
А вы ищИте сигнал, который выключает свет. Потом его инвертируете.
У темных интервалов нет перехода через полночь.
Поэтому программа упростится.

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 16:56
Слимпер
AlexRyzh, Я уже в двух своих проектах использую такую схему
[spoiler=Спойлер][/spoiler]Позволяет включать выключать нагрузку по времени, при том не важно было или нет отключение контролера. Время начала может быть больше времени окончания, то есть например включение в 23.00, выключить в 1.00.
Дискретность одна минута, можно и с секундами сделать, но тип уже будет Long.

Делал еще во времена когда не было пользовательских блоков, сейчас упаковал бы в блок.

Суточный таймер. Как сделать?

Добавлено: 27 сен 2016, 18:34
slavas
Так я блок выкладывал сдесь, там это уже сделано.