Для многих далеко не секрет, что такие устройства как недельные термостаты помогают обеспечить оптимальную комнатную температуру в доме к тому же с экономией энергоресурсов, затрачиваемых на обогрев. Для корректной работы устройства его обычно размещают в самой дальней комнате, где наименьшая температура. Но большинство термостатов предполагают проводное подключение к котлу для управления и далеко не всегда есть возможность эти провода проложить. О решении подобной проблемы и пойдет речь в данной статье. Всем, кому интересно прошу под кат…
С подобной задачей пришлось столкнуться и мне. Конструкция моего дома довольно вытянута, и корректной установки термостата, мне необходимо было протянуть более 50 м кабеля по комнатам с уже сделанным ремонтом, альтернативой была прокладка по фасаду, но ее я сразу отбросил. Тем более завести кабель с улицы к котлу тоже было проблематичным, да и не хотелось портить вид фасада очередным проводом, без того хватает лишнего. Сам же котел установлен на кухне и размещение термостата рядом была кране дурной затеей. В результате я пришел к мысли, что термостат необходимо все же перенести в дальнюю комнату, а сигнал передать по радиоканалу. Процесс разработки очередной моей поделки начался как обычно с постановки задачи. Итак приступим…
ТЗ
Определимся с требованиями к устройству для решения поставленной задачи.
- Конструкция устройств должна быть малогабаритна и размещаться в эстетичном корпусе белого или черного цвета.
- Модуль приемника и передатчика должны питаться от пары батареек типа AA.
- Срок работы модулей от одного комплекта батареек должен составлять не менее одного года.
- Подключение к термостату и газовому котлу должны осуществляться штатными интерфейсами без внесения каких-либо изменений в конструкцию.
- Устройства должны быть собраны на доступной элементной базе от местных поставщиков.
Аппаратная часть
Когда с основными требованиями определились, перейдем к проектированию. Начнем с аппаратной части.
Исходя из ТЗ основными требованиями к элементной базе будут: возможность работы в диапазоне напряжений от 1.8 до 3 вольт. А также возможность перехода в режим сна, либо отключения периферии во время, когда она не нужна. Свой путь выбора я решил начать с подбора приемопередатчика. Рассматривал самые простые решения в виде модулей MX-FS-03V и MX-05V, цена конечно очень привлекательная, но качество работы по отзывам жуть, да и дальность связи не ахти. А в моем случае необходимо было передать сигнал через 4 стены. К тому же изначально предполагал сделать подтверждение отправки, так что связь нужна была двухсторонняя, что потребовало бы двух комплектов. Также были рассмотрены модули LoRa и различные модули серии HC. Ассортимент был еще ограничен тем, что продают по месту. В результате рассмотрев все доступные варианты, решил остановить свой выбор на готовых модулях SI4432. По соотношению цена-возможности на мой взгляд они были самые лучшие.
Данный модуль имеет широкие технические возможности, а также очень экономичен при корректно выбранных настройках. Возможность управлять мощностью выходного сигнала, тоже очень полезна, т.к. можно выбрать оптимальную, тем самым уменьшив потребление энергии от батареек. Вот таблица с характеристиками из документации.
Рассмотрим более детально показатели энергопотребления в различных режимах из таблицы. Эти данные нам позже понадобятся для расчета времени автономной работы устройств.
В нашем случае приемлемым уже является использование режима Sleep, не говоря о полном отключении функцией Shutdown.
В качестве центрального процессора изначально предполагал взять ATMega 8, но изучив более детально документацию, понял, что в мой диапазон напряжений питания она не попадает. В результате остановил свой выбор на ATMega 328P, т.к. она полностью соответствовала всем моим требованиям. Забегая вперед, скажу, в ее пользу также сыграл тот факт, что я нашел для нее готовый загрузчик, но об этом чуть позже.
Рассмотрим более детально выбранный контроллер в плане энергопотребления и тактирования ядра.
Давайте сначала разберемся с тактированием. Т.к. у нас диапазон рабочего напряжения до 3-х вольт, то и выбор кварцевого резонатора у нас также ограничен и об этом нам говорит следующий график
Как видим на 8 МГц устойчивой работы нам не получить, следовательно, будем применять кварц на 4 МГц.
Теперь давайте рассмотрим энергопотребление в различных режимах работы. Вот таблица из документации описывающая характеристики энергопотребления.
Таким образом, если перевести контроллер в режим Power-Down, то потребление самого микроконтроллера снижается до 44 uA с определенными оговорками конечно.
В дополнении к уже выбранным элементам добавим индикаторный светодиод красного цвета с рабочим током 1 мА.
На этом общие компоненты для приемника и передатчика заканчиваются.
Рассмотрим дополнительные компоненты для приемника.
На выходе у обычного комнатного термостата релейный контакт с хорошей коммутируемой способностью (250 В 5 А), таким образом ему не важно, чем управлять, следовательно, по условиям ТЗ, в нашем приемнике должен быть такой же релейный выход. Но как обеспечить малое энергопотребление реле во включенном режиме, ведь катушка даже самого малого реле потребляет десяток миллиампер, а заводской термостат от одного комплекта нормальных батареек работает без преувеличения минимум 2 отопительных сезона. Над этой задачей я раздумывал пару дней и вдруг во время ремонта одного из приборов меня осенило, там просто стоит бистабильное реле. А почему во время ремонта, да потому что они в ремонтируемом устройстве применяются. Данный вид реле способен сохранять свое состояние бесконечное время без потребления энергии. Чтобы реле изменило свое состояние достаточно подать импульс на необходимую катушку, в случае с двух обмоточным реле, или импульс в обратной полярности, в случае с реле с одной обмоткой. Таким образом, с типом реле определились, но что делать с конкретной моделью? Немного поискав в интернете пришел к выводу, что достать реле на малое напряжение для меня будет проблемой, пришлось остановиться на имеющихся у меня реле на 24 В компании Takamisawa ALD24W-K. Но данное решение порождало новую проблему – где взять 24 В?
Ответ был найден быстро, возможно он и не самый корректный, но все же. Я решил установить повышающий преобразователь и поднять напряжение до 20 В, его вполне достаточно для уверенного переключения реле. Преобразователь взял от довольно распространённого модуля на основе MT3608. Это работающее решение, проверенное мною не один раз, включая конструкцию электро-отвертки (о ней можно почитать тут на Хабре). Выход EN позволяет управлять работой преобразователя, что значительно снижает энергопотребление. Собственно, вот данные из документации.
Собрав все полученную информацию воедино, я вычертил схемы обоих устройств:
Передатчик
Приемник
Закончив с аппаратной частью проекта перейдем к алгоритмам и их программной реализации.
Алгоритм
Начнем с разработки общей концепции работы и алгоритма для наших устройств. На рисунке ниже изображена общая диаграмма последовательности для всех устройств, участвующих в процессе.
Как можно убедиться, алгоритм не сложен, я сделаю его повествовательное изложение (ну лень мне чертить блок-схему, уж простите). Начнем с передатчика, т.к. он наиболее прост с точки зрения алгоритма. Микроконтроллер передатчика выполняет следующую последовательность:
— проверяет состояние заряда батарей, если заряд низкий индицируем разряд встроенным светодиодом.
— опрашивает состояние входа.
— передает это состояние по радиоканалу.
— переводит передатчик в режим сна и сам засыпает на 1 минуту.
— цикл повторяется с начала.
С приемником все немного сложнее. Микроконтроллер работает по следующему алгоритму:
— проверяет состояние заряда батарей, если заряд низкий индицируем разряд встроенным светодиодом.
— ждем пакет от передатчика, если в течении 2-х минут сигнал не получен, засыпаем на 59 секунд, после чего цикл начинается с начала.
— если пакет пришел, получаем новое состояние реле.
— если новое состояние реле отличается от сохраненного ранее, тогда включаем повышающий преобразователь и переключаем реле в нужное состояние.
— засыпаем на 59 секунд
— повторяем цикл сначала
Таким образом при первом включении приемник ждет сигнал от передатчика, как только он его получает, то вносит изменение в состояние реле и засыпает на 1 секунду меньше чем передатчик. В результате к моменту новой посылки приемник уже в строю и ждет новой посылки, т.е. он как бы под синхронизирован передатчиком. В результате удалось хорошо сэкономить энергопотребление. Если же сигнал от передатчика не получен, то мы максимум ждем 2 минуты, такой интервал выбран, чтобы гарантированно поймать сигнал не зависимо от времени включения передатчика. Но он крайне неэкономичен и предусмотрен исключительно для синхронизации устройств.
Время жизни
Когда с алгоритмом стало понятно, попробуем рассчитать времени автономной работы.
Обратимся немного к теории, необходимой для получения точных цифр при расчёте времени работы датчиков от комплекта батареек.
Итак, сначала рассмотрим, когда и на что тратится электроэнергия.
Рассмотрим более детально процедуру отправки.
Для передачи состояния реле нам необходимо сформировать пакет и отправить его в эфир. В общем виде структура такого пакета выглядит следующим образом:
Я использовал параметры передатчика по умолчанию, т.е. FSK, No Manchester, Rb = 2.4kbs, Fd = 36kHz. Объем передаваемых данных в пакете составляет 3 байта. Размер преамбулы будет составлять 40 бит исходя из таблицы:
Дабы не углубляться в дебри настройки модуля и работы библиотеки примем остальные параметры как максимально допустимые. В результате получим общий размер пакета 5 байт + 4 байта + 4 байта + 1 байт + 3 байт + 2 байта = 19 байт, т.е. 152 бита. Что при скорости 2400 бит/с время передачи составит приблизительно 64 мс.
Обратимся к таблице потребления энергии модулем в начале статьи и возьмем оттуда значение тока при передаче с выходной мощностью в 13 dBm. Таким образом, при отправке данных модуль тратит 30 мА.
В режиме приема модуль будет статически потреблять 18,5 мА на основании все то же таблицы.
Модуль в режим Shutdown мне так и не удалось перевести, по какой-то причине я не смог его выводить из комы, в результате я ограничился режимом Sleep при котором модуль потребляет 1 uA.
Также на время приема и передачи пакета, я включаю красный светодиод, подключенный через резистор в 1 кОм к 3.3 вольтам, он потребляет порядка 1 мА.
Микроконтроллер в режиме бодрствования потребляет 2.4 мА, а в режиме сна с включенным WDT — 44 uA. Данные получены из приведенной выше таблицы.
У приемника так же есть паразитная утечка тока при замкнутом контакте термостата через подтягивающий резистор на землю (см. схему передатчика), таким образом через него утекает 3,3 В / 10 кОм = 33 uA. Это для меня показалась большой величиной, поэтому в схеме я изменил номинал резистора на 100 кОм, но в железе все же собранно с 10 кОм поэтому считать будем как есть на самом деле.
У приемника дополнительных потребителей больше. Во первых, это повышающий преобразователь на 20 вольт. В режиме сна он потребляет 1 uA. В рабочем режиме на холостом ходу потребление будет составлять 2,2 мА, в программе я жду 100 мс для запуска преобразователя. В качестве нагрузки у нас выступает катушка реле, ее характеристика указана ниже:
Таким образом получается, что катушка при питании 20 вольт будет потреблять 20 В/ 1920 Ом = 11 мА. Теперь обратимся к графику зависимости КПД от потребляемого тока нагрузкой для оценки общего потребления преобразователя с подключенной катушкой реле.
Как видим, с таким потреблением график не отражает КПД, но предположим, что он также линейно двигается в сторону уменьшения, и пусть в самом худшем случае КПД получим примерно 85 %. В итоге ток потребления будет составлять 11 мА / 0,85 = 13 мА. Стоит признать, что на самом деле пиковый ток при запуске преобразователя будет составлять не менее 1А, а процессы работы и запуска сложны, а я не тот человек, который способен их корректно изложить, поэтому я их упущу и немного упрощу процесс.
Время импульса формируемого на переключение реле составляет 20 мс.
Теперь, когда мы разобрались, кто и сколько потребляет энергии, сделаем расчет теоретического срока жизни от батареек типа АА. Опять же рассмотрим приемник и передатчик отдельно.
Начнем как всегда с передатчика. Возьмем за основу алгоритм работы, приведенный выше. Время бодрствования контроллера будет составлять чуть дольше времени передачи и с учетом затрат на настройку модуля, опрос входа и замер напряжения батареек будет составлять 70 мс, затем контроллер будет переведен в режим сна на одну минуту. Таким образом, за один цикл работы, контроллер потребит 0.07 с * (30 мА передатчик + 1 мА светодиод + 2.4 мА МК) + 60 сек * (44 uA МК + 1 uA передатчик + 33 uA резистор на входе) = 2.338 мА*с + 4.68 мА*с = 7.018 мА*с. Разделив полученное значение на 60.07 с получим среднее значение тока за одну секунду – 0.117 мА. Средняя емкость одной батарейки типоразмера АА составляет 2800 мА*ч (при последовательном подключении общая емкость батареек не увеличивается, если вдруг кто не в курсе) — это 2800 * 3600 = 10080000 мА*с. В результате теоретическое время работы передатчика от одного комплекта батареек составляет 10080000 мА*с / 0.117 мА / 3600 с / 24 ч = 997 дней.
Теперь о приемнике. Возьмем также за основу алгоритм работы, приведенный выше, но с одной оговоркой, мы включили, и приемник, и передатчик практически одновременно, а, следовательно, приемник сразу синхронизировался с передатчиком.
Для него максимальное время бодрствования контроллера будет составлять сумму из времени ожидания пакета (в него войдет и прием, т.к. прерывание модулем сгенерируется только после полного приема пакета), извлечение его из модуля, запуска преобразователя и установке нового состояния реле, а также замер напряжения батареек. Просуммировав все данные, получим — 1.126 с, затем контроллер будет переведен в режим сна на 59 секунд. Но т.к. цикл работы сложнее чем в приемнике, то расчет будет состоять из большего количества состояний. За один цикл работы контроллер потребит 1.006 с * (18.5 мА приемник + 2.4 мА МК) + 0.1*(0.1 с * (18.5 мА приемник + 1 мА светодиод + 2.4 мА МК + 2.2 мА преобразователь на ХХ) + 0.02 с * (18.5 мА приемник + 1 мА светодиод + 2.4 мА МК + 13 мА преобразователь ) ) + 59 с * (44 uA МК + 1 uA приемник + 1 uA преобразователь) = 21.0254 мА + 0.1*(2.41 мА + 0.698 мА) + 2.714 мА = 24.0502 мА*с. Коэффициент 0.1 отражает то, что мы только в одном из 10 циклов производим переключение реле. Разделив полученное значение на 60.126 с, получим среднее значение тока за одну секунду – 0.4 мА. Произведем расчет времени работы от батареек. В результате теоретическое время работы приемника от одного комплекта батареек составляет 10080000 мА*с / 0,4 мА / 3600 с / 24 ч = 291 день, при условии, что мы раз в 10 минут будем менять состояние реле.
Очевидно, что в этих расчётах все времена более двух лет не реализуются из-за химических особенностей устройства батареек. Батарейки типа AA не способны работать более двух лет при постоянном питании устройства даже ничтожным током, несмотря на то, что ёмкости должно хватать. А вот всё, что меньше двух лет, уже станет ограничением по ёмкости. К сожалению результаты расчета по сроку работы приемника не до конца укладываются в ТЗ, но в данной ситуации я сделал себе поблажку.
Реализация в коде
Честно признаться, я скептически отношусь к Arduino и ей подобным IDE. Я начинал разбираться с программированием микроконтроллеров на C и работа с регистрами мне более понятна и предсказуема, чем завуалированные вызовы высокоуровневых функций. Хотя в целом саму платформу изучил и некоторые мелкие проекты я все же в ней делаю. Вот и в этот раз лень взяла надо мною верх. Подкупило наличие готовой библиотеки для модулей SI4432 под Arduino и не сильно хотелось тратить время на попытки портировать ее под CVAVR. А остальной код крайне прост. Потратив несколько вечеров на изучение библиотек для работы с модулем, а также спящего режима микроконтроллера первые версии скетчей приемника и передатчика были готовы довольно быстро. Далее необходимо было собрать аппаратную часть и уже продолжить разработку с реальным железом.
Оно живое…
В онлайн сервисе EasyEDA был разработан проект со схемой и печатными платами. С двухсторонними платами я возиться не стал, поэтому на обратной стороне поставил перемычки.
Вот фото уже готовых плат передатчика …
… и приемника.
Для батареек приобрел держатели, а также купил корпуса. Честно, хотел белого цвета, но в наличии у нас таких не оказалась, поэтому пришлось собирать в черных.
Сборку плат сначала выполнил без модулей, т.к. нужно в контроллер залить сначала загрузчик программатором. А в виду того, что модуль на 3.3 вольта, а программатор на 5 вольт и используют они одну и туже шину, то лучше модуль впаять уже после прошивки. Проверил питание, запрограммировал загрузчик. В виду того, что паяльной маски нет на плате, то под модули я подклеил кусочек каптона. Впаял модули и начал отлаживать прошивки. Сразу же наступил на грабли в виде зависаний модуля, оказалось все банально просто, стабилизатор на 3 вольта, который я использовал не отдавал необходимый ток, после подключения ЛБП на приемник и батареек на передатчик, все стабильно заработало. В дополнении я установил еще электролитический конденсатор в близи от преобразователя на цепи питания для нормального его запуска. Мне оставалось дописать оставшуюся логику, описанную выше. На штатных антеннах связь получилась очень устойчивая. Конструктивно приемник и передатчик полностью вмещались в приобретенные корпуса. Платы были закреплены на штатные стойки при помощи саморезов к нижней части корпуса, а держатели батареек я прикрепил на двухсторонний скотч к верхней части. Корпус довольно плотно закрывается, поэтому я не стал его дополнительно скреплять винтами, да и батарейки так будет удобней менять. В результате еще нескольких вечеров потраченных на доработки и тестирования получил готовый результат.
Загрузчик
На счет загрузчика стоит сказать отдельно пару слов. Для Arduino нет стандартных загрузчиков для кварцев на 4МГц их необходимо собирать отдельно, но мне повезло, в поисках информации перед началом проектирования мне попалась статья одного человека, он делал метеостанцию на таких же модулях и столкнулся с теми же проблемами. Ссылку на статью я оставлю в конце. Кстати, рекомендую к прочтению, человек тоже хорошо потрудился. В результате у него в репозитории лежал уже готовый загрузчик, а так как он лежал в открытом доступе, то я им и воспользовался.
Заключение
В результате не одного потраченного вечера была построена вполне рабочая конструкция с необходимыми характеристиками. Сейчас устройство работает уже более 3-х недель, пока что нареканий на его работу нет, ну а время расскажет, на сколько верны были мои расчеты.
Для тех, кто скажет, что можно было поставить реле на 3 вольта и не возиться с преобразователем, отвечу, что я полностью согласен с ними. Но для тех, кто надумает повторить конструкцию будет возможность выбрать свое решение. В конце концов — инженер должен творить, а не просто копировать готовые конструкции…
Всем спасибо, кто осилил эту статью до конца, надеюсь было интересно. По всем Вашим вопросам, предложениям и замечаниям прошу в комментарии.
Ссылки:
Автор: Nikopol_86