Давным давно на даче был установлен котел Vaillant TurboTec.
Очень хороший, красивый двухконтурный котел. С удобным и простым управлением.
Но было одно но, которое мешало нормально жить. Без внешнего термостата он мог поддерживать на заданном уровне только температуру теплоносителя в системе отопления.
В результате, если температура на улице падает на пару градусов, то на пару градусов падает температура и в доме. Выставив комфортную температуру вечером перед сном можно к утру либо мучиться от чрезмерной жары или испытывать некоторый дискомфорт от прохлады.
Хорошо, что в котле предусмотрено подключение внешнего термостата. Плохо, что внешний термостат стоит на мой взгляд несколько неразумно. Хорошо, что логика работы термостата очень проста — надо замыкать контакты, когда есть потребность в тепле, и размыкать, когда такой потребности нет.
Была взята ардуина, датчик температуры, твердотельное реле и gsm-шилд на базе модуля sim900.
В котле жучок был заменен на два провода до ардуины.
Ардуина заброшена на кухонный шкаф, а в нее был залит простейший скетч.
Результат приятно порадовал.
Если раньше температура сильно плясала в зависимости от погоды снаружи, то после запуска ардуины температура держится в коридоре порядка 0.5 градуса.
В ближайшее время будет прикручено управление температурой по СМС. Скетч будет выложен в общий доступ.
Давным давно на даче был установлен котел Vaillant TurboTec.
Очень хороший, красивый двухконтурный котел. С удобным и простым управлением.
Но было одно но, которое мешало нормально жить. Без внешнего термостата он мог поддерживать на заданном уровне только температуру теплоносителя в системе отопления.
В результате, если температура на улице падает на пару градусов, то на пару градусов падает температура и в доме. Выставив комфортную температуру вечером перед сном можно к утру либо мучиться от чрезмерной жары или испытывать некоторый дискомфорт от прохлады.
Хорошо, что в котле предусмотрено подключение внешнего термостата. Плохо, что внешний термостат стоит на мой взгляд несколько неразумно. Хорошо, что логика работы термостата очень проста — надо замыкать контакты, когда есть потребность в тепле, и размыкать, когда такой потребности нет.
Была взята ардуина, датчик температуры, твердотельное реле и gsm-шилд на базе модуля sim900.
В котле жучок был заменен на два провода до ардуины.
Ардуина заброшена на кухонный шкаф, а в нее был залит простейший скетч.
Результат приятно порадовал.
Если раньше температура сильно плясала в зависимости от погоды снаружи, то после запуска ардуины температура держится в коридоре порядка 0.5 градуса.
В ближайшее время будет прикручено управление температурой по СМС. Скетч будет выложен в общий доступ.
Читая первую часть заголовка многие из вас, наверняка, подумали – еще один термостат на многострадальной Arduino. И… Это правда – да, это очередной термостат для очередного котла, очередного дома, но правда это только отчасти – в статье я не хочу концентрироваться на самом устройстве – их (статей) действительно предостаточно. Несомненно, я опишу термостат, но больше хотел бы рассказать о том, как я связывал сам микроконтроллер с котлом. Итак, кому интересно – прошу…
Как все начиналось
Прежде всего хочу сказать, что я нисколько не программист и с настоящим микроконтроллером дела до этого не имел. Мое первое знакомство с МК AVR (да и вообще с МК) было еще в старшей школе, когда мне захотелось узнать, как же все-таки работает эта загадочная штука. Я прочел несколько статей и с тех пор в памяти у меня остались лишь отрывки, которые можно было описать всего двумя словами – DDR и PORT – на этом мои познания и обрывались. Потом был универ, 5-й курс – «Программирование микроконтроллеров» где мы все познакомились с MSC51 в виртуальной среде. Тут уже были и прерывания, и таймеры, и все остальное. Ну, вот с таким багажом знаний я и пришел к проблеме. Закончим на этой автобиографической ноте и перейдем к более интересной части.
Итак, собственно, с чего началось создание термостата – после установки автономного отопления с газовым котлом, я, как и многие, столкнулся с обычными проблемами – температура в доме очень зависела от погоды на улице – мороз – в квартире холодно, нужно увеличивать температуру теплоносителя в батареях, потеплело – наоборот. Такие танцы с бубном меня не сильно устраивали, т.к. регулировка котла осложнялась тем, что он был установлен за дверцей, а дверца подперта микроволновкой, на которой лежала куча хлама. Ну, вы поняли – иголка в яйце, яйцо в утке и т.д.
Решалась эта проблема очень просто – датчиком OTC (Outside Temperature Compensation), который подключается к котлу и позволяет ему автоматически подстраивать температуру теплоносителя в зависимости от уличной температуры. Проблема, казалось бы, решена, но чтение сервис-мануала на котел (Ferolli Domiproject C24D) быстро растоптало мою надежду – подключение датчика внешней температуры в данной модели не предусмотрено. Все? Все. И вот, наверное, можно было бы закончить, но летом в котле в грозу до сих пор непонятным мне способом сгорает плата управления, и разговаривая с сервис-мэном (плату в последствии отремонтировали) я спросил, возможно ли подключение OTC на мой котел? Он ответил, что подключают, используя внешние термостаты. Это отложилось у меня в памяти, но я не особо на этом концентрировался до наступления холодов, а дальше всё таже проблема.
Листая все ту же сервисную инструкцию, но уже с целью посмотреть, как же подключается термостат, я заметил, что на те же клеммы подключается «OpenTherm регулятор». Тут-же я понял – вот ОНО! Поиск в Google «OpenTherm Arduino» же меня опять огорчил – ничего особо толкового. Был монитор сообщений, но это не то – мне и слушать, то нечего – нужен именно термостат.
Тут я наткнулся на статью habrahabr.ru/post/214257, окончание которой меня огорчило – автору без осциллографа так и не удалось связать котел с микроконтроллером. И тут уж если у человека знакомого с МК не вышло, то, что пробовать мне?! В интернете было найдено полное описание протокола Opentherm v2.2, что еще больше охлаждало мой пыл – физический уровень протокола был несколько замудренный – токовая петля в которой данные от котла передаются уровнем тока (5-7мА – низкий уровень, 17-23мА — высокий), а от термостата котлу уровнем напряжения ( Скетч
Формулу вычисления требуемой температуры теплоносителя долго крутил-выводил, пока она, в результате, не оказалась ПИ регулятором. В настройки добавил изменение коэффициентов и индикацию интегральной составляющей. До самого ПИ регулятора, для вычисления требуемой температуры я взял формулу из первой статьи, но без интегральной составляющей температура либо не соответствовала требуемой, либо, при большом пропорциональном коэффициенте не соответствовала требуемой и прыгала туда-сюда. Но чтение Хабра быстро дало мне ссылку с описанием ПИД-регулятора, который и был реализован.
Вообще я сделал два режима работы:
1) Прямое управление CH Setpoint – в результате получилось ни что иное как выносная передняя панель котла(ну плюс еще показывает температуры снаружи/внутри и влажность).
2) Собственно термостат с OTC.
Возможно, еще добавлю отключение датчика ОТС и настройку наклона кривой (коэффициент при (settings.indoor_target_temp-ext_temp)), но пока не вижу в этом смысла.
Пару слов добавлю о размещении датчика OTC. Сверлить дыры в окнах и стенах не хотелось, и, обдумывая эту проблему, взгляд случайно упал на старый шлейф MIDI разъема. Недолго думая я припаял провод датчика и загерметизировал место соединения термоклеем (т.к. оно будет находиться на улице). Сам датчик я разместил в тени за внешним блоком кондиционера, чтоб его не нагревали прямые солнечные лучи.
Энергосбережение
Те, кто пролистали код чуть внимательнее, наверное, заметили неизвестную библиотеку Power. Собственно на нее я возлагал надежды по снижению энергопотребления всего устройства. Смысл в том, чтобы вместо delay(1000) в главном цикле, отправлять МК в сон на 1с. Проблема в том, что режим сна нужен специфический, с работающим Timer2 для отправки/приема OpenTherm сообщений, как вы помните, они происходят асинхронно. Но увы, Proteus не очень хорошо работает со Sleep, и отладить эту часть я не смог. Сон работает, показания millis() корректируются (для этого я реализовал замер точности watchdog-таймера), но ОТ перестает работать. Именно с этой целью я и хотел приобрести Pro Mini (с последующим удалением стабилизатора и светодиодов) – меньше плата+ возможна работа на 3.3В, что дает надежду на питания прямиком от ОТ интерфейса. Привожу код библиотеки Power, для тех, кому интересно:
В процессе написания статьи, я значительно переписал код и переделал управление – поставил энкодер с кнопкой, добавил ему ручку, сделал аппаратный фильтр дребезга по классической схеме:
Стало значительно лучше – энкодер перестал проскакивать такты и добавлять лишние значения. Да и новая панель управления стала поудобнее, и должна ровно встать в корпус:
Дело осталось за самым малым – сделать корпус и повесить на место, но в этом и кроется самая большая проблема. Оказывается стоимость корпусов, отпечатанных на 3D-принтере, вплотную приближается к стоимости всего термостата, что совсем не радует мою ручную жабу, стоимость готовых радиолюбительских корпусов тоже не сильно адекватная для куска пластмассы. Наверное придется поступить, как подсказал друг:
— А ты знаешь, какие корпуса испокон веков лучше всего подходили для радиолюбительских поделок?
— Никакие?
— Тоже, конечно, вариант, но вообще – мыльницы.
Немного фото термостата во время испытаний и показаний в разных режимах на главном экране:
Ссылки
P.S. Ну и, естественно, прошу строго не судить – я не писатель — ошибки проверил, как мог. А результатом просто решил поделиться с публикой, т.к. больше рабочих библиотек, реализующих протокол OpenTherm, я в интернете не нашел.
P.P.S. В личку поступило много вопросов по поводу распиновки платы сопряжения, действительно не заметил своей оплошности. Итак, сверху вниз — +5В, TX (от контроллера к котлу), RX (от котла к контроллеру) — резистор 1,5к, GND.
Касательно проверки платы сопряжения:
Плату сопряжения проверить не сложно — подключаете к котлу, подаете питание. Вывод RX не используете(если есть лог. анализатор то будет проще потом) вывод TX (после R3) на +5В. На контактах к котлу должно быть около 20В. после этого вывод R3 на землю — должно быть меньше 7В (около 5ти). Это значит, что плата на передачу работает нормально. На прием можно проверить только после прошивки МК.