Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Интеграция центрального отопления с Arduino: умное управление по OpenTherm

Компоненты и материалы

Arduino UNO × 1
Arduino OpenTherm Shield × 1
Блок питания 24В × 1

О проекте

Хотите знать, когда и почему работает ваш котел? Автоматизировать отопление с Arduino? OpenTherm Shield — именно для этого. Позволяет мониторить и управлять OpenTherm-котелом с Arduino.

Интеграция центрального отопления с Arduino: умное управление по OpenTherm
Интеграция центрального отопления с Arduino: умное управление по OpenTherm

Предыстория

Хотел связать газовый котел BAXI с регулятором камина. Официальные расширения BAXI слишком дорогие. Сделал свой OpenTherm-шлюз, перехватывающий обмен термостата и котла — алгоритм решал: включить котел или использовать тепло камина. Люди заинтересовались — решил сделать модуль (Arduino Shield) для простого управления отоплением.

Интеграция центрального отопления с Arduino: умное управление по OpenTherm

Для чего нужен шилд?

Доступные данные и команды

* — доступно только если в котле есть соответствующие датчики

Построение шилда

Схема основана на проекте OpenTherm Gateway (PIC), адаптирована под Arduino с удобной раскладкой для UNO.

Интеграция центрального отопления с Arduino: умное управление по OpenTherm

Можно сделать самому по схеме и герберам. Заказываю платы у PCBWay — быстро, качественно, синяя маска по цене зелёной. Или заказать DIY-кит.

Интеграция центрального отопления с Arduino: умное управление по OpenTherm

Использование шилда как термостата

Пример: свой термостат. Нужно:

Интеграция центрального отопления с Arduino: умное управление по OpenTherm

Подключите котел к шилду, наденьте шилд на Arduino — программируйте. Библиотека Arduino OpenTherm IO содержит пример:

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(message);
    Serial.println();
    OPENTHERM::send(BOILER_OUT, message);
  } else if (OPENTHERM::isSent()) {
    OPENTHERM::listen(BOILER_IN, 800);
  } else if (OPENTHERM::getMessage(message)) {
    OPENTHERM::stop();
    Serial.print("<- ");
    OPENTHERM::printToSerial(message);
    Serial.println();
    Serial.println();
    delay(100);
  } else if (OPENTHERM::isError()) {
    OPENTHERM::stop();
    Serial.println("<- Timeout");
    Serial.println();
  }
}

Сначала проверяем isIdle — нет ли ожидающей команды. Шлём запрос конфигурации слейва. Если отправлено — слушаем ответ listen. getMessage вернёт true при ответе, isError — при таймауте. Библиотека даёт структуру OpenthermData с декодированными данными — не нужно парсить протокол вручную. Исходники документированы. Все типы сообщений в константах или в документации OpenTherm.

struct OpenthermData {
  byte type;
  byte id;
  byte valueHB;
  byte valueLB;
  float f88();
  void f88(float value);
  uint16_t u16();
  void u16(uint16_t value);
  int16_t s16();
  void s16(int16_t value);
}

Использование как монитора, шлюза или регулятора

Пример: вставка шилда в шину между котлом и термостатом для мониторинга или перехвата.

Интеграция центрального отопления с Arduino: умное управление по OpenTherm

Шилд разрывает шину. Без прошивки шлюза связь пропадёт. В библиотеке есть отличный пример шлюза:

void loop() {
  if (mode == MODE_LISTEN_MASTER) {
    if (OPENTHERM::isSent() || OPENTHERM::isIdle() || OPENTHERM::isError()) {
      OPENTHERM::listen(THERMOSTAT_IN);
    } else if (OPENTHERM::getMessage(message)) {
      Serial.print("-> ");
      OPENTHERM::printToSerial(message);
      Serial.println();
      OPENTHERM::send(BOILER_OUT, message);
      mode = MODE_LISTEN_SLAVE;
    }
  } else if (mode == MODE_LISTEN_SLAVE) {
    if (OPENTHERM::isSent()) {
      OPENTHERM::listen(BOILER_IN, 800);
    } else if (OPENTHERM::getMessage(message)) {
      Serial.print("<- ");
      OPENTHERM::printToSerial(message);
      Serial.println();
      Serial.println();
      OPENTHERM::send(THERMOSTAT_OUT, message);
      mode = MODE_LISTEN_MASTER;
    } else if (OPENTHERM::isError()) {
      mode = MODE_LISTEN_MASTER;
      Serial.println("<- Timeout");
      Serial.println();
    }
  }
}

Шлюз слушает термостат, парсит запрос, пересылает коту. Затем слушает ответ котла (800 мс) и возвращает термостату. Оба устройства не знают о посреднике. Можно встраивать свою логику: читать данные (статус, температуры, давление, статистику), перехватывать или блокировать команды.

Общение с умным отоплением становится простым. В следующей статье покажу практическое применение в моём OpenTherm-регуляторе.

Код

OpenTherm IO library for Arduino

GitHub репозиторий

Схемы

Интеграция центрального отопления с Arduino: умное управление по OpenTherm

Производственный процесс

  1. Мониторинг центрального отопительного котла на Raspberry Pi — железо, софт и настройка
  2. Построение доступной беспроводной сети датчиков для дома
  3. Подключение газового датчика TGS2600 к Raspberry Pi для обнаружения вредных газов
  4. Создание интернет-управляемого видеostreaming-робота на Arduino и Raspberry Pi
  5. Подключение GrabCAD Print к Stratasys 3D-принтеру: пошаговое руководство
  6. Максимизируйте прибыль бизнеса: проверенные стратегии эффективности отопительного масла
  7. Управление потолочным вентилятором через Alexa: пошаговое руководство
  8. Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
  9. FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
  10. Создание динамической бегущей строки на Arduino Nano и NeoPixel