工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

セントラルヒーティングをArduinoでスマート制御:OpenThermシールド活用ガイド

必要な部品と材料

部品数量
Arduino UNO1
Arduino OpenThermシールド1
24V電源1

プロジェクト概要

ボイラーがいつ、なぜ動作して家を暖めているのか知りたくありませんか? Arduinoで暖房システムを自動化したいと思いませんか? OpenThermシールドはまさにそのためのものです。OpenTherm対応ボイラーをArduinoで監視・制御できるようになります。

セントラルヒーティングをArduinoでスマート制御:OpenThermシールド活用ガイド
セントラルヒーティングをArduinoでスマート制御:OpenThermシールド活用ガイド

背景

昨年、ガス暖房ボイラーと暖炉レギュレーターを連携させたくなりました。私のBAXIボイラーとサーモスタットはかなり高機能なので、ボイラーを拡張して暖炉も制御できるようにしたかったのです。しかし、公式のBAXI拡張モジュールは高価すぎます。

そこで、サーモスタットとボイラー間の通信を傍受し、ボイラーを焚くか暖炉の熱を使うかを判断するアルゴリズムを挟む「OpenThermゲートウェイ」を自作しました(レギュレーター詳細)。

同様のニーズを持つ人が多かったため、誰でも簡単に家庭暖房を制御できるよう、Arduinoシールドとしてモジュール化することにしました。

セントラルヒーティングをArduinoでスマート制御:OpenThermシールド活用ガイド

このシールドでできること

取得可能なデータと送信可能なコマンド

※印はボイラーに必要なアクセサリーが装備されている場合のみ利用可能

シールドの製作

電子回路は、PICマイコンを使用したOpenTherm Gatewayプロジェクトをベースに、Arduino用にアレンジし、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();
  }
}

まずOPENTHERM::isIdleで保留コマンドがないか確認。なければ次のコマンドを送信。この例ではスレーブ設定フラグを要求。送信成功ならOPENTHERM::listenで応答待機。OPENTHERM::getMessageで応答受信を検知、エラー/タイムアウト時はOPENTHERM::isErrorがtrueを返す。ライブラリにはデコード済みデータを含むOpenThermメッセージ構造体があり、プロトコルフォーマットを意識せず扱えます。ソースコードはよくドキュメント化されています。メッセージタイプは定数で定義、または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);
}

モニター・ゲートウェイ・レギュレーターとして使用する場合

2つ目の例は、ボイラーとサーモスタットの間にマン・イン・ザ・ミドルデバイスとして接続し、通信を監視・傍受する方法です。必要なもの:

セントラルヒーティングをArduinoでスマート制御:OpenThermシールド活用ガイド

シールドをボイラーとサーモスタットの間のバスに割って入る形で接続します。ゲートウェイソフトウェアをArduinoに書き込まない限り通信は遮断されます。ゲートウェイソフトは、サーモスタットからのコマンドを受信してボイラーに転送し、ボイラーからの応答をサーモスタットに返す役割を果たします。Arduino OpenTherm IOライブラリに優れた例があります。

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); // 800ms以内に応答必要
    } 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();
    }
  }
}

ゲートウェイはサーモスタットからのコマンドを待ち受け、検知したらパースしてボイラーに転送。次にボイラーからの応答を待ち受け、800ms以内に受信したらサーモスタットに返します。サーモスタットもボイラーも、間にデバイスがあることを認識しません。この仕組みを利用して、メッセージを解析して有用情報(ステータス、温度、圧力、統計等)を取得したり、不要なリクエスト/応答を上書き・破棄したりする独自コードを追加できます。

スマート暖房システムと通信して、さらに賢くするのは本当に簡単です。次回の記事では、このハードウェアを使ったOpenThermレギュレーターの実践的な活用例を紹介します。

コードライブラリ

OpenTherm IO library for Arduino: https://github.com/jpraus/arduino-opentherm

回路図

セントラルヒーティングをArduinoでスマート制御:OpenThermシールド活用ガイド

製造プロセス

  1. Raspberry Piでセントラルヒーティングボイラーを監視 – ハードウェア、ソフトウェア、セットアップガイド
  2. 家庭用の低コストワイヤレスセンサーネットワークを構築
  3. Raspberry PiにTGS2600ガスセンサーを接続して有毒ガスを検知
  4. Arduino & Raspberry Pi でインターネット制御ビデオストリーミングロボットを構築
  5. Alexaでシーリングファンを音声制御:ステップバイステップガイド
  6. Bluetooth操作のArduinoスパイボットを自作する
  7. FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
  8. Arduino NanoとNeoPixelで作るダイナミックなマーキーLED照明
  9. Arduino Cloud連携でどこからでも家の温度を監視
  10. GrabCAD PrintとStratasys 3Dプリンターの接続 - ステップバイステップガイド
  11. 暖房用オイル効率化でビジネス利益を最大化する実証済み戦略