Pull to refresh

Comments 76

Делал чуть менее года назад четырехканальный таймер для управления освещением птичьих клеток. Логика немного другая — просто у каждого канала есть один интервал включения в сутки. Возможно, автору будет интересно ознакомиться, т.к. использованное железо похоже. github.com/eta4ever/arduino_timer
Насколько я понял, Вы с «дребезгом» кнопок справились засекая время удержания от 10 до 300 мс?
А есть видео управления контроллером? Хотелось бы на будущее использовать Вашу наработку для автоматизации полива в теплице.
Про дребезг — верно. Видео, к сожалению, нет. Попробую пантомимой.

Из дежурного экрана: нажатие кнопки Set (самая левая) отправляет в настройку даты-времени. Кнопки влево-вправо-вверх-вниз — в настройку интервала включения каждого из четырех каналов.
image

В режиме настройки чего-либо кнопки влево-вправо переключают позицию курсора, вверх-вниз — соотв., значение. Set — сохранение и выход.

Интервалы включения пишутся в EEPROM. RTC с батарейкой.

По результатам эксплуатации (скоро год) отмечу: пару раз система зависала при непосредственной близости слабого электрического разряда (втыкание зарядки ноутбучной в розетку). Модуль RTC уныл, убегает вперед на несколько минут в месяц. В остальном — я доволен.

Модуль RTC аналогичен моему? Я сделал запас в 5 минут, чтобы не перепрыгнуть в другой тариф.
Также возникала мысль по поводу количества операций чтения\записи в EEPROM, которое указано в даташите в количество 100 000 операций. ТУТ провели тест и получили больше 6 млн операций чтения\записи в одну ячейку.
Я задумался: у меня ведь каждый цикл происходит чтение ячеек, в которых хранится запись. А как узнать время одного цикла, чтобы примерно рассчитать, через сколько ячейки занятые дадут сбой?
RTC очень похож. Какой-то очень китайский TinyRTC. Время подвожу примерно раз в месяц-два.
Если я правильно помню, чтение флеш-ячейки практически не влияет на ее ресурс, только запись.
Ну и, у меня какая-то работа с флешем происходит только при загрузке контроллера и установке параметров. Так что, не парюсь.

Есть просто отличная идея, так сказать костыльная. Повесь на таймер еще одну задачу — каждые сутки в заданное время(когда удобней всего) откручивай время на нужную величину, чтобы скорость ухода за месяц компенсировать.
А вот это, я бы сказал, гениально. Костыльно, но гениально. А я не догадался. Надо запилить.
Чего только люди не делают, лишь бы не ставить нормальный кварц за 25 рублей :-D

Либо поставить модуль DS3231 с высокоточным кварцем внутри микросхемы и с температурной стабилизацией.
Когда устройство уже работает, вносить изменения в его конструкцию бывает накладно.

Один умный сисадмин сказал: Работает? Не трогай! (с) народное
Добавлять костыльный код в прошивку — это как-то более стрёмно (в программной коррекции огромное раздолье для ошибок), чем выпаять один кварц и впаять другой.
А другой тоже надо будет корректировать, их точность изначально достаточна только для +-30 сек в месяц, при условии термостатирования. Для лучшей точности надо корректировать либо программно либо подбором опорной емкости(тут уже частотомер нужен с 7-8 значащими разрядами).
Ну если нужна суперточность, то проще поставить GPS модуль с хорошей антенной и не париться с калибровкой :-)

Вот только намаятся с подключением GPS модуля придется еще больше, и в особо пасмурные дни даже хорошая антенна не поможет — это всё факторы риска.

Лучше уж локальные часы с термостатированым кварцем, прописать коррекцию времени в коде куда проще чем приклеить к схеме GPS-модуль. Надо будет только раз в год предупреждать старение кварца.
Проблема же в том что при этом переделывать все надо. И не факт что саму микросхему не уронят в процессе транспортировки или эксплуатации и у неё тоже точность поплывёт.
UFO just landed and posted this here
Спасибо. Значит, в моем случае, контроллер окажется почти вечным. Думаю, что раньше релюшки помрут. Хотя, если у них ресурс 10 000, то выходит, что при моем режиме работы они проработают 10000 \8(раз в день) = 1250 дней или почти 3.5 года, а если учесть увеличение частоты включения, когда пойдет привязка к включению света в ванной, то и того раньше. Хорошо, что я подключил реле без пайки.
Если что — можно добавить карту памяти и писать на неё.
Была такая мысль, но хранить надо всего 7 значений, а ради этого громоздить дополнительный шилд и накладно и громоздко. В этом случае можно воспользоваться памятью, встроенной в модуль RTC. Если не ошибаюсь, там 54 байта энергонезависимой памяти.
А зачем шилд? Вот такая фигня стоит всего полтора доллара с доставкой. Там же практически напрямую припаяться к карте можно.
image
Я не жадный, я экономный :) Полтора бакса модуль, плюс столько же за флешку ради 7 байт данных. Если бы они записывались с частотой каждую минуту или секунду-имело бы смысл. Такой модуль у меня есть и я думаю его использовать в дальнейшем, когда буду вести учет добытой от солнечных батарей энергии.
давным давно, если видели, по стране стояли т.н. столбы — 5-ти рублевые игровые автоматы. В них использовалась eeprom для рассчёта вероятности и хранения ключевой информации. так вот. чтобы повысить ресурс записи — в eeprom писалось по кругу во все ячейки. т.е. номер записи, сама запись. следующая запись — в следующую ячейку.
Такое циклирования действительно продлит время службы, но код становится более запутанным и увидеть в самом коде, куда пишется то или иное значение в данный момент времени затруднительно.
Как выяснилось, при текущем коде, время жизни ячеек практически бесконечно.
согласен. если нет задачи частой записи, то нет и смысла усложнять код
Скорей всего батарейка села. Если на свежей уходит, значит менять кварц на 32768Гц который, скорей всего он «удареный», они очень сильно бояться ударов.
Батарейка живая. Может быть, дело действительно в кварце. Перепаивать не полезу, лучше действительно замеряю уход и сделаю программную коррекцию.
И если энергетические ресурсы позволяют, неплохо было бы термостатировать кварц, так можно выиграть еще один порядок точности, дальше уже от старения зависеть будет. И в виду повышения точности ввести еще дополнительную ежемесячную коррекцию, может тогда за время жизни батарейки вообще подстраивать не придется, правда проблемы будут с быстрым определением этого коэффициента — нужен будет источник точного времени уровня STRATUM-2 или 3. Подстраиваться по другим источникам точного времени может выйти боком, они хоть и точные в пределах года но в разное время показания могут отличаться довольно серьёзно. По телевизору и радио — так там вообще точность +-30 секунд, как и у стандартного сервиса синхронизации времени в виндовс.
Лучше всего брать за источник времени GPS, когда он надёжно видит не менее 6 спутников.
Мне плюс-минус 10 минут погоды не делают, так что ни NTP, ни GPS тут не надо :) В критичных приложениях, понятно, все будет по-другому.
Это нужно будет для того чтобы максимально точно определить необходимую коррекцию, иначе смысл? все равно будут со временем расходится.
Коэффициент точности времени применим в тех случаях, когда от этого зависит надежность работы самой системы или есть жесткая необходимость в соблюдении времени. К примеру, у меня в проекте необходимо выдерживать время, чтобы не перескочить в дорогой тариф на электроэнергию. Но я обеспечил это простым выставлением таймера на 10 минут от времени включения тарифа. Если это будет теплица или подсветка клеток, то критичность к точности времени снижается. Ведь какая раница, будут политы помидоры в 16.00 или в 16.20. Понятно, что их надо поливать в 16 часов, а не в 20, но порядок точности не обязывает обеспечить привязку к атомным часам.
Не привязку к атомным часам, а измерить ТОЧНО скорость хода твоих часов, чтобы правильно их компенсировать за небольшой промежуток времени(неделю) не прибегая к спецоборудованию. Если будешь измерять точность хода по сигналам точного времени по радио, к примеру, или телевизору — можешь сильно ошибиться в расчете коррекции.
Конечно, можно измерить скорость хода и с помощью сигналов по радио/телевизору, но для достижения приемлемой точности в +-1 минуту в год нужно измерять уход времени за пол года.
После этого никакая привязка к источникам точного времени не нужна.
Теперь понял. Я подумал, что речь о непосредственном припиливании к таймеру источника сигнала точного времени (что тоже не самая плохая идея).
Против зависания надо обязательно применять watchdog. Только проблема в том, что в Arduino Nano надо прошивать альтернативный загрузчик, чтобы watchdog корректно работал…
Есть два типа реле — твердотельные и обычные. Первые от большого тока перегреваются, а у вторых пригорают контакты. Я сам сталкивался с такой проблемой, особенно если потребитель какой-то мотор (с большим пусковым током) или тен. Реле вроде по номиналу и проходит (даже с запасом) но месяца через 3-4 умирает. Может и есть какие-то «золотые» реле с неубиваемыми контактами.

Решения я так и не нашел. Мысль: комбинировать два реле одновременно не покидает меня. Сначала включать твердотельное, потом замыкать контакты. И обратной в той же последовательности.
Свою же задачу решил, нагромоздив каскад из двух реле: первое замыкает цепь питания второго доброго «бабушкиного» советского реле с рынка, у которого 15 кратный запас мощности — работает.

А вы столкнулись уже с этим эффектом?
Наверное Вы хотели сказать, что замыкаем сначала обычные контакты, потом твердотельное реле. И размыкаем сначала твердотельное, а потом обычное, чтобы не возникала дуга?
В моем случае, первое реле замыкает слаботочную цепь с напряжением до 10 В и током в миллиамперы, а второе реле замыкает цепь 220В и запускает двигатель мощностью 550 Вт, то есть ток протекает порядка 2.5 А. Стартовый ток движка наверняка в районе 5х, так что 10-12 А замыкается реле. На размыкание ток уже гораздо меньше и дуги возникнуть не должно. Месяц испытания прошел успешно и система доказала жизнеспособность. Вскоре будет щелкать чаще и будет ясно, насколько это надежное решение.
Нет, как раз твердотельные работают без искры, но они сильно греются, по-этому оно и включается первым, а потом уже при замкнутой цепи дополнительно (параллельно) замыкается цепь через обычное реле. Потом твердотельное можно отключить или оставить — разницы особой нет. (Твердотельное реле все равно обладает каким-то малым сопротивлением, а у обычного реле — сопротивление близко к нулю). Выключается все в обратной последовательности: сначала размыкаем контакты, потом отключаем твердотельник.

Кстати, у меня реле «пригорело» в замкнутом состоянии — было неприятно :))
Ну раз реле установлены параллельно, то идея понятна. Только дублирование все-равно накладно. Проще обеспечить твердотельники охлаждением — взять радиатор от старого процессорного кулера.
У меня если и пригорит, то просто будет работать вытяжка без остановки-не критично.
А Вы какие токи коммутируете?
У меня было реле на 25А, то есть это 5500 Вт мощность, на нем было освещение около 3 кВт. Выходит, что у меня был почти двукратный запас по мощности. Когда первый раз сломалось, я подумал — брак и заменил реле. Новое, проработав все те же месяца 3-4, перестало работать. (Это я все про механические реле пишу)
Они как правило рассчитаны на номинальный ток во время работы, но не предназначены для коммутации цепей под нагрузкой. т.е. конструкция держит номинальный ток, а непосредственно контактные площадки — нет.
В таком случае, нужны более серьезные реле с нормальными контактами.
Что касается твердотельных реле, то на форуме по солнечной энергетике уже сталкивался с этим вопросом: твердотельные реле куда более надежные на замыкание нагруженных цепей, позволяют избежать искры при коммутации, но греются — необходим хотя бы пассивный радиатор, чтобы продлить срок службы устройства.
У вас, судя по всему, индуктивная нагрузка (электродвигатель). При размыкании такой нагрузки индуктивность стремится поддерживать ток, в результате возникает бросок напряжения, величина которого может достигать нескольких киловольт и даже десятков киловольт. Возможен пробой реле — как механического, так и твердотельного. Я думаю, нужно принимать меры к «облагораживанию» индуктивной нагрузки, например — еще одно реле, которое точно в момент размыкания цепи питания замыкало бы нагрузку накоротко. Или какой-нибудь разрядник, или полупроводниковый саппрессор.
Если взять первый способ, когда будет замыкаться нагрузка накоротко, после размыкания цепи питания, то можно столкнуться с КЗ: то есть реле питания залипло, а контакты сплавились и тут второе реле замыкает нагрузку, которая находится под напряжением. У меня этот двигатель на отдельном автомате, но не хотелось бы так рисковать.
В таком случае, надежнее будет использовать твердотельное реле или контактор. Любопытно хотя бы 3-4 месяца реле погонять, а потом разобрать его и посмотреть состояние контактных площадок.
Разумеется, должна быть защита от КЗ. И еще один момент: если вторым реле замыкать нагрузку накоротко — то второе реле может замкнуться слишком рано (и устроить КЗ сети), или слишком поздно (уже после того, как произойдет бросок напряжения). Поэтому лучше применять быстродействующие устройства борьбы с бросками напряжения: разрядники, сапрессоры (Transient Suppressor).
Тут только опытная эксплуатация покажет. Я выждал месяц после запуска контроллера, прежде чем написать. На данный момент работает. К концу весны можно разобрать реле и посмотреть состояние контактов. Правда, как я понимаю, после разбора реле можно выбросить.
Магнитный пускатель вам в помощь wiki
Коммутировать большие токи можно симисторами с радиаторами. Если электричество всё равно идёт на обогрев, то снижение КПД из-за падения напряжения можно не учитывать.
Обсуждение реле и коммутации электродвигателей просто обязано докатиться до использования частотного преобразователя и тормозного резистора, не?
Я приверженец простых и экономичных решений, но не в угоду надежности. Каждый элемент, усложняющий конструкцию вносит снижение этой самой надежности. В данном случае, самый «слабый» элемент — механическое реле. Если соотнести ущерб от его внезапной смерти со стоимостью альтернативного метода подключения (твердотельное реле, контактор, устройство плавного запуска), то становится ясно, что максимум, что можно потерять — это энергию на безостановочную работу вытяжки, пока я не замечу сбой. Ну или еще сколько-нибудь денег на создание системы коммутации, надежность которой будет стремиться к 99,9%.
С другой стороны, можно подумать об обратной связи. Например, датчик тока. Можно три нештатных ситуации отследить: незапуск двигателя при подаче команды, продолжение работы при подаче команды на остановку, превышение номинального тока (заклинивание).
На последний вариант стоит отдельный автомат тип С на 10А, который обслуживает только линию с вытяжкой. Первые два варианта бeдут интересны в промышленных системах, где необходимо удаленно отслеживать работу нескольких аналогичных систем. Идея отличная! А что за тормозной резистор?
Используется как раз в промышленных установках. Двигатель управляется преобразователем частоты. Когда с двигателя снимается напряжение, он, продолжая вращаться, работает в генераторном режиме. Вот для рассеивания этого дела и ставится мощный резистор, который частотник коммутирует на двигатель при снятии питания. Но это уже, скорее, схема для мощных (несколько кВт и далее) двигателей с инерционной нагрузкой (не легкая крыльчатка, а какая-нибудь тяжелая байда типа шпинделя).

Например www.owen.ru/catalog/36482892
Ну а так, отслеживание тока, плавный пуск и прочие плюшки в промышленных установках — это преобразователь частоты. Для самопала вообще ни разу не бюджетно, конечно.
UFO just landed and posted this here
У меня по дому теплые водяные полы. Стяжка играет роль огромного теплоаккумулятора. С 7 до 23 часов, когда действует дневной тариф, котел не работает и дом охлаждается на 3-4 градуса. Таким образом, ко времени сна, дом становится как раз холоднее, чем утром. А большая инертность бетонной подушки не дает сразу поднять температуру в комнатах.
Для квартирных стиралок есть вариант уменьшения звука — резиновый коврик: image
Один хороший программист как-то сформулировал правило: неправильно выравненный код работать не может. Проект у вас хороший, а вот код оформлен ужасно. По аналогии это как будто вы вместо красивой коробочки, кнопок и дисплея смонтировали все на макетной доске и прибили гвоздями к стене. Как еще говорят, качество одежды определяют по внутренним швам!
Благодарю за замечание. Мне в личку подсказали нужный тег- поправил. Учиться всегда приятно, спасибо за это хабр-сообществу.
Ну вот сейчас, например:

      if (digitalRead(button3)==HIGH) //нажимая верхнюю кнопку меняем часы
     {  
     hourOn++;
    if (hourOn >=24) hourOn=0;
        }
Подскажите, что за кнопки использовали? Насколько могу судить по видео, монтаж на корпус, достаточно мягкое нажатие, но, клик как у тактовых кнопок с монтажом на плату. Или это щёлкает кнопка об свой ободок?
Кнопки нашел в одном павильоне на Митинском радиорынке в цокольном помещении- там огромный лоток с кучей кнопок. Понравилось отсутствие щелчков и мягкость хода. Правда одна из кнопок просто развалилась во время монтажа. Как говорит мой знакомый — совсем китайский китай…
Думаю, что аналогичные кнопки можно найти в автозапчастях.
Или разобрать древние клавиатуры, те что еще не пленочные. там кнопки индивидуальные.
UFO just landed and posted this here
В планах расширять функционал, а Arduino Nano уже имеет всю необходимую обвязку и работать с ней комфортно. Не было цели сделать супер-дешево, надо было сделать удобно и недорого. Как аппетит приходит во время еды, так и расширение функционала идет после монтажа первой систему — так я поставил систему вентиляции через неделю после запуска управления котлом.
UFO just landed and posted this here
А что по затратам? За сколько это окупится?
Считаем:
Arduino Nano — 182 руб
2х реле — 297 руб
модуль часов — 62 руб
DC-DC 12v-5v преобразователь — 62 руб
Дисплей 20х4 с шиной i2c — 506 руб
Коробка, кнопки, провода, плата — порядка 600 руб

Итого: 1709 руб
Затраты на отопление снизились на 30% и составили порядка 4500 руб, то есть экономия составила около 1500 руб за первый месяц. Окупаемость чуть больше месяца. Опыт-бесценно!
Так нормальный контроллер так и работает. Поставь ему желаемое время подогрева, внутренний/внешний температурный датчик, отдельное управление насосом и пр. А потом настрой оптимальную отопительную кривую. Как кейс — обрати внимание — что если не запускать котел, а просто включить на несколько минут насос на циркуляцию — возможна передача тепла от более теплого бетонного «термоса» к более холодному. Еще лучше будет поставить тепловой бак на воде — залить 1 м3 в бак, который снаружи обложен полистиролом. (у воды удельная теплоемость почти в 2 раза выше чем бетон ) А вот совсем выключать систему, не учитывая температуру в помещении — я бы не советовал — жить будет крайне некомфортно

Если речь про форумхаус и пользователя, который запилил огромный бак и засунул туда батарею, то я изучал его топик. Мне не подойдет по нескольким причинам. Циркуляционны насосы у меня работают без остановки, выравнивая температуру между комнатами. Их суммарная мощность 70 Вт*ч, что в рублях эквивалентно ~100 рублей в месяц. Я думал их включать перманентно, но оно не стоит того.
> а с ростом температуры стала повышаться влажность.
Может наоборот? Зимой в теплом помещении влажность понижается до 20-30 процентов при комнатной температуре (17 л воды в 1м3). Это очень мало и сухо. А при нагревании или проветривании через окна холодным воздухом будет еще суше (на улице при -20 — менее 100 г в 1м3)
У меня идет отделка в доме, шпклевка, покраска и поклейка обоев связаны с выделением большого количества влаги. И если раньше, когда не было принудительной вытяжки, часто приходилось открывать окна и устраивать сквозняк, потому что по окнам буквально тек конденсат, то теперь в комнатах нормальная влажность.
На Alibaba купил вот такую штуку ru.aliexpress.com/item/USR-WP3-Home-Smart-Remote-Control-Switch-Wifi-Wireless-Socket-Wifi-Outlet/2039276083.html?recommendVersion=2
-удивительно качественная штука — 3 независимых канала с неограниченным числом таймеров на вкл/выкл, и через WiFi (ну очень правильный передатчик — мощный и многостандартный) цепляется к облаку — туда же смотрит и мобильное приложение на iOS, Android и даже Windows XP (с исходниками !)
Доволен как слон.
До кучи еще взял ru.aliexpress.com/item/USR-HTW-Wifi-Wireless-Temperature-and-Humidity-Transmitter-Remote-Control/2046096745.html?recommendVersion=2
По первому девайсу: мне никак не подходило, поскольку надо было запускать котел. Котел трехфазный, то есть имеем 380 Вольт и 4 провода(5й заземление и не коммутируется), да и нагрузка в 12 киловатт такие провода просто расплавит. Решение нашлось после переписки с официальным производителем котлов Valliant. Они мне подсказали, что котел может быть оснащен выносным датчиком температуры в помещении, который имеет нормальнозамкнутый контакт. При превышении установки, контакт размыкается и котел перестает греть. Таким образом, я свой контроллер подключил в цепь «датчика температуры» и руковожу работой котла. Маленькие токи — никаких искр и электрических дуг при размыкании, все решается копеечным реле.
Что касается второго девайса, то есть ответ для уже установленной ардуины в виде датчика температуры и влажности — 80 рублей и все работает.
Я тоже ратую за конечные устройства и изначально искал вариант попроще. Пересмотрел различные реле времени, но решил, что контроллер с кучей выходов, который можно гибко программировать под собственные нужды и наращивать его возможности с помощью модулей — это и интересно и доступно.
А Ваш контроллер позволяет управлять котлом не только по часам, но и по дням недели?
В принципе, можно запрограммировать, так как модуль DS1307 выдает не только время, но и дату, а самое главное — день недели в числе. То есть понедельник -1, вторник -2 и т.д. Так что, в принципе, реализуемо. Попробую сделать и дополнить статью.
Добавил эту функцию, новая версия кода добавлена в статью
Sign up to leave a comment.

Articles