セントラルヒーティングをArduinoに接続する
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
このプロジェクトについて
ボイラーがいつ、なぜ家を動かして暖房しているのか疑問に思ったことはありませんか? Arduinoで暖房システムを自動化したいですか? OpenThermシールドはあなたのために設計されています。これにより、Arduinoを使用してOpenThermボイラーを監視および制御できるようになります。
<図><図>
背景
昨年、ガス暖房ボイラーと暖炉レギュレーターを組み合わせたいと思いました。私のBAXIボイラーとサーモスタットはかなり賢いので、暖炉を制御するためにボイラーを自然に拡張したかったのです。私はそうすることを可能にするそれらの高価な公式BAXI拡張機能すべてにうんざりしていました。
そこで、サーモスタットとボイラーの間の通信を傍受し、ボイラーを点火するか暖炉からの熱を使用するアルゴリズムを配置できるOpenThermゲートウェイを自分で構築しました-[レギュレーターの詳細]。
似たようなものを欲しがる人がたくさんいたので、誰でも簡単に家の暖房を制御できるモジュール(Arduinoシールド)を作成することにしました。
<図>
シールドは何に適していますか?
- 独自のArduinoベースのボイラーを作成する 既存のOpenThermサーモスタットを使用します。だれもそうする可能性はほとんどありませんが、それは可能です。
- シールドを使用して、独自のArduinoベースのサーモスタットを構築します ボイラーと家庭用暖房を完全に引き継ぐため。ホームオートメーションに最適です。このアプリケーションには、外部5V電源のみが必要です。
- OpenThermシールドを既存のボイラーとサーモスタットの間のラインに配置し、モニターを作成します ボイラーがいつどのように家を暖房しているかを監視します。通信を傍受して、たとえば暖房をワイヤレスで制御することもできます。
- OpenThermを使用すると、中間者(ゲートウェイ)を使用できます。 )ボイラーとサーモスタットの両方と通信するデバイス。これが、シールドを使用してOpenThermレギュレーターを作成した方法です。
利用可能なデータとコマンド
- 室温
- 室温設定値
- 温水温度
- 戻り水温
- 国内のお湯の温度*
- 国内の温水圧力*
- 国内のお湯の流量*
- 外気温*
- ボイラーの状態(実行中/実行中でない/エラー)
- 変調レベル
- 排気温度*
- ボイラーの稼働時間の統計
*これらはボイラーに必要な付属品が装備されている場合にのみ利用可能であることに注意してください
シールドの構築
電子回路は、PICマイクロコントローラーを使用するOpenThermゲートウェイプロジェクトに基づいています。私はそれをArduinoに適合させ、素晴らしいArduinoUNO互換レイアウトを作成しました。
<図>上記の回路図ファイルとガーバーファイルを使用して、独自にシールドを作成できます。私は PCBWay でボードを製造しています -PCBプロトタイプの簡単な方法。あなたは彼らにこれらの素敵な青い美しさを1週間以内に作成して出荷させることができます。ブルーのソルダーマスクはベーシックグリーンと同じ価格です!私も彼らのカスタマーサービスが大好きです、何も問題はありません。または、パック済みのDIYキットを注文することもできます。
<図>
シールドを使用してサーモスタットを作成する
最初の例は、シールドを使用して独自のカスタムサーモスタットを作成する方法を示しています。必要なもの:
- OpenThermボイラー
- Arduino UNO、WeMos D1、または任意のArduinoUNO互換ボード。ボードの唯一の要件は、ピン2と3でのピン割り込みのサポートです。
- 5V電源。サーモスタットと通信する場合にのみ必要なので、このセットアップでは24V電源は必要ありません。
上の写真に示すように、ボイラーを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( "<-タイムアウト"); Serial.println(); }}
まず、 OPENTHERM ::isIdle で保留中のコマンドがないかどうかを確認します 。そうでない場合は、次のものを送信できます。この例では、スレーブ構成フラグを要求します。コマンドが正常に送信された場合は、 OPENTHERM ::listen を使用してボイラーからの応答のリッスンを開始する必要があります。 電話。メソッド OPENTHERM ::getMessage スレーブからの保留中の応答があり、何か問題が発生した場合やタイムアウトが発生した場合は、メソッド OPENTHERM ::isError がtrueを返します。 trueを返します。ライブラリには、プロトコルからデコードされたデータを含むOpenThermメッセージ構造が含まれているため、形式をまったく気にする必要はありません。十分に文書化されているソースコードをチェックアウトしてください。すべてのタイプのメッセージが定数にリストされているか、OpenThermのドキュメントを確認できます。
struct OpenthermData {バイトタイプ;バイトID;バイト値HB;バイト値LB;フロートf88(); void f88(float value); uint16_t u16(); void u16(uint16_t value); int16_t s16(); void s16(int16_t value);}
シールドを使用してモニター、ゲートウェイ、またはレギュレーターを作成する
2番目の例では、中間者デバイスをOpenThermバスに接続して、ボイラーとサーモスタットを監視したり、それらの通信を傍受したりする方法を示します。必要なもの:
- OpenThermサーモスタット
- 24V500mA電源
<図>
上の写真に示すように、シールドをボイラーとサーモスタットの間のバスに接続します。これら2つのデバイス間のバスが中断されていることがわかります。サーモスタットからボイラーにコマンドと応答を転送するゲートウェイソフトウェアをArduinoにアップロードしない限り、通信は切断されます。その逆も同様です。ここでも、Arduino OpenThermIOライブラリに優れた例があります。
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_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_LISTEN_MASTER; } else if(OPENTHERM ::isError()){mode =MODE_LISTEN_MASTER; Serial.println( "<-タイムアウト"); Serial.println(); }}}
ゲートウェイは、サーモスタットコマンドのリッスンを開始するだけです。リクエストが検出された場合、それを解析してボイラーに転送します。ゲートウェイは、代わりにボイラー応答のリッスンを開始します。 800msで受信した応答がある場合、ゲートウェイは応答をサーモスタットに転送します。サーモスタットとボイラーの両方が、それらの間に何か余分なものがあることを決して知りません。ご覧のとおり、メッセージをキャプチャしてメッセージから有用な情報(ステータス、温度、圧力、統計など)を読み取ることができる独自のコードを作成する余地は十分にあります。気に入らないリクエストや返信を上書きしたり破棄したりすることもできます。
ご覧のとおり、スマート暖房システムとの通信は非常に簡単で、さらにスマートになります。次の記事では、OpenThermレギュレーターでのこのハードウェアのより実用的な使用法を紹介します。
コード
Arduino用のOpenthermIOライブラリ
https://github.com/jpraus/arduino-opentherm 回路図
製造プロセス
- セントラルヒーティングボイラーの監視
- 自宅にワイヤレスセンサーネットワークを構築する
- センサーをRaspberryPiに接続して、有害ガスが発生したときに警告します!
- ArduinoとRaspberryPiを使用してインターネット制御のビデオストリーミングロボットを構築する
- GrabCADプリントをStratasys3Dプリンターに接続する方法
- あなたのビジネスのための灯油効率を改善するためのヒント
- シーリングファンに対してAlexaコントロールを有効にする
- Arduino Spybot
- FlickMote
- プロジェクトにアニメーション(マーキー)照明を追加する
- Arduinoクラウドでどこからでもあなたの家の温度を知る!