Подключите центральное отопление к Arduino
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Об этом проекте
Вы когда-нибудь задумывались, когда и почему ваш котел работает и отапливает ваш дом? Вы хотите автоматизировать свою систему отопления с помощью Arduino? Щит OpenTherm разработан для вас. Это позволит вам контролировать и контролировать свой котел OpenTherm с помощью Arduino.
Фон
В прошлом году хотел совместить свой газовый котел отопления с регулятором камина. Мой котел BAXI и термостат довольно умные, поэтому я, естественно, захотел расширить котел, чтобы управлять камином. Мне надоели все эти дорогие официальные расширения BAXI, которые позволяли мне это делать.
Поэтому я построил себе шлюз OpenTherm, который позволил мне перехватить связь между термостатом и котлом и разместить алгоритм, который либо запускал котел, либо использовал тепло от камина - [подробнее о регуляторе].
Поскольку было много людей, которые хотели чего-то похожего, я решил создать модуль - Arduino Shield - который позволил бы любому очень легко управлять отоплением своего дома.
Для чего нужен щит?
- Создайте собственный котел на базе Arduino с существующим термостатом OpenTherm. Вряд ли кто-нибудь сделает это, но это возможно.
- Используйте экран, чтобы создать собственный термостат на базе Arduino. полностью взять на себя котел и отопление дома. Идеально подходит для домашней автоматизации. Для этого приложения требуется только внешний источник питания 5 В.
- Поместите экран OpenTherm в линии между существующим котлом и термостатом и создайте монитор смотреть, когда и как котел отапливает ваш дом. Вы даже можете перехватить связь, например, для беспроводного управления отоплением.
- OpenTherm позволяет использовать посредника ( шлюз ) устройство, которое взаимодействует как с котлом, так и с термостатом. Вот как я использовал экран для создания регулятора OpenTherm.
Доступные данные и команды
- комнатная температура
- заданное значение температуры в помещении
- температура теплоносителя
- температура возвратной воды
- температура ГВС *
- давление горячей воды *
- расход ГВС *
- наружная температура *
- состояние котла (работает / не работает / ошибка)
- уровень модуляции
- температура выхлопных газов *
- статистика, сколько времени работал котел
* обратите внимание, что они доступны только в том случае, если ваш котел оснащен необходимыми принадлежностями
Строим щит
Электронная схема основана на проекте шлюза OpenTherm, в котором используется микроконтроллер PIC. Я адаптировал его для Arduino и создал красивую компоновку, совместимую с Arduino UNO.
Вы можете использовать приведенную выше схему и файлы Gerber, чтобы создать щит самостоятельно. Я производю свои платы на PCBWay - Легкий способ создания прототипа печатной платы. Вы можете попросить их создать и отправить этих красивых голубых красавиц всего за неделю. Синяя паяльная маска стоит столько же, сколько и базовая зеленая! Мне также нравится их обслуживание клиентов, все в порядке. Или вы можете заказать готовый набор для самостоятельного изготовления.
Использование экрана для создания термостата
Первый пример покажет вам, как использовать экран для создания собственного термостата. Что вам понадобится:
- Котел OpenTherm
- Arduino UNO, WeMos D1 или любая совместимая с Arduino UNO плата. Единственное требование к плате - поддержка прерывания вывода на выводах 2 и 3.
- Источник питания 5 В. В этой установке нет необходимости в источнике питания 24 В, поскольку он нужен только в том случае, если вы взаимодействуете с термостатом.
Подключите котел к Arduino OpenTherm Shield, как показано на рисунке выше, прикрепите экран к Arduino, и вы можете начать программирование. Библиотека ввода-вывода Arduino OpenTherm содержит следующий пример, показывающий, как взаимодействовать с бойлером.
void loop () {if (OPENTHERM ::isIdle ()) {message.type =OT_MSGTYPE_READ_DATA; message.id =OT_MSGID_SLAVE_CONFIG; message.valueHB =0; message.valueLB =0; Serial.print ("->"); OPENTHERM ::printToSerial (сообщение); Serial.println (); OPENTHERM ::send (BOILER_OUT, сообщение); // отправляем сообщение котлу} else if (OPENTHERM ::isSent ()) {OPENTHERM ::listen (BOILER_IN, 800); // ждем ответа котла} else if (OPENTHERM ::getMessage (message)) {// котел ответил OPENTHERM ::stop (); Serial.print ("<-"); OPENTHERM ::printToSerial (сообщение); Serial.println (); Serial.println (); задержка (100); // минимальная задержка перед следующим обменом данными} else if (OPENTHERM ::isError ()) {OPENTHERM ::stop (); Serial.println ("<- Тайм-аут"); Serial.println (); }}
Сначала проверьте, нет ли ожидающей команды с помощью OPENTHERM ::isIdle . Если нет, вы можете отправить следующий. В этом примере вы запрашиваете флаги конфигурации ведомого устройства. Если команда была успешно отправлена, вы должны начать прослушивание ответа от котла с помощью OPENTHERM ::listen вызов. Метод OPENTHERM ::getMessage вернет true, как только появится ожидающий ответ от ведомого устройства, и если что-то пошло не так или истекло время ожидания, метод OPENTHERM ::isError верните истину. Библиотека содержит структуру сообщений OpenTherm, которая содержит декодированные данные из протокола, поэтому вам вообще не нужно заботиться о форматах. Ознакомьтесь с исходным кодом, он хорошо документирован. Все типы сообщений перечислены в константах, или вы можете проверить документацию OpenTherm.
struct OpenthermData {тип байта; идентификатор байта; байтовое значениеHB; байтовое значениеLB; float f88 (); void f88 (значение с плавающей запятой); uint16_t u16 (); void u16 (значение uint16_t); int16_t s16 (); void s16 (значение int16_t);}
Использование экрана для создания монитора, шлюза или регулятора
Второй пример покажет вам, как подключить устройство «человек посередине» к шине OpenTherm, чтобы контролировать котел и термостат или перехватывать их связь. Что вам понадобится:
- термостат OpenTherm
- Источник питания 24 В, 500 мА.
Подключите экран к шине между котлом и термостатом, как показано на рисунке выше. Вы можете видеть, что он прерывает шину между этими двумя устройствами. Теперь ваша связь прервана, если вы не загрузите программное обеспечение шлюза в свой Arduino, которое будет пересылать команды и ответы от термостата на котел и наоборот. Снова есть отличный пример в библиотеке ввода-вывода Arduino OpenTherm.
void loop () {if (mode ==MODE_LISTEN_MASTER) {if (OPENTHERM ::isSent () || OPENTHERM ::isIdle () || OPENTHERM ::isError ()) {OPENTHERM ::listen ( THERMOSTAT_IN); } иначе, если (OPENTHERM ::getMessage (сообщение)) {Serial.print ("->"); OPENTHERM ::printToSerial (сообщение); Serial.println (); OPENTHERM ::send (BOILER_OUT, сообщение); // пересылка сообщения в режим котла =MODE_LISTEN_SLAVE; }} else if (mode ==MODE_LISTEN_SLAVE) {if (OPENTHERM ::isSent ()) {OPENTHERM ::listen (BOILER_IN, 800); // ответ необходимо отправить обратно через 800 мс} else if (OPENTHERM ::getMessage (message)) {Serial.print ("<-"); OPENTHERM ::printToSerial (сообщение); Serial.println (); Serial.println (); OPENTHERM ::отправить (THERMOSTAT_OUT, сообщение); // отправить сообщение обратно в режим термостата =MODE_LISTEN_MASTER; } иначе, если (OPENTHERM ::isError ()) {режим =MODE_LISTEN_MASTER; Serial.println ("<- Тайм-аут"); Serial.println (); }}}
Шлюз просто начинает прислушиваться к командам термостата. Если обнаружен запрос, он проанализирует его и отправит в котел. Вместо этого шлюз начнет прислушиваться к ответу котла. Если ответ получен через 800 мс, шлюз перешлет ответ обратно на термостат. И термостат, и бойлер никогда не узнают, что между ними есть что-то лишнее. Как видите, есть много места для написания собственного кода, который может захватывать сообщения и считывать из них полезную информацию (статус, температуру, давление, статистику и т. Д.). Вы даже можете переопределить или отбросить запросы или ответы, которые вам не нравятся.
Как видите, с вашей интеллектуальной системой отопления действительно легко установить связь и сделать ее еще умнее. В следующей статье я покажу вам более практическое использование этого оборудования в моем регуляторе OpenTherm.
Код
Библиотека ввода-вывода Opentherm для Arduino
https://github.com/jpraus/arduino-openthermСхема
Производственный процесс
- Мониторинг моего котла центрального отопления
- Создание сети беспроводных датчиков в вашем доме
- Подключите датчик к Raspberry Pi, чтобы предупредить вас о появлении ядовитых газов!
- Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
- Как подключить печать GrabCAD к вашему 3D-принтеру Stratasys
- Советы по повышению эффективности использования топочного мазута для вашего бизнеса
- Включение Alexa Control для потолочного вентилятора
- Arduino Spybot
- FlickMote
- Добавление анимированного (Marquee) освещения в свои проекты