<

![endif]-->

fc2ブログ

全館暖房リアルタイムネット制御:超ざっくり自動室温調整機能実装

自作の全館暖房リアルタイムネット制御システムに、超ざっくりだが自動室温調整機能を実装してみた。早朝冷え込むことが多く、ボイラーの循環水温度が固定だとどうしても外気温の影響で室温も変化してしまう。深夜早朝と日中とでは、室温変化は大きい時で4℃以上も上下する。

今回の休みは別な開発案件に集中したかったのだが、明け方寒い時があったので1時間以内で実装できる範囲ということで超ざっくりなアルゴリズムで実装してみた。仕様は下記の通り。

 目標設定温度は決め打ち(室温25.5℃が快適なのでこの室温に固定)
 目標設定温度は±0.2℃変化した場合はボイラーの循環水温度を1単位(5℃)上下させる
 ボイラーの循環水温度は室温のみ見て制御、1時間毎に設定見直し
 温度制御部はボイラーの循環水温度は見ない
 ※循環水温度をスコープ内に入れると改造が必要で1時間の実装では無理なので今回はパス

コードはわずか十数行。半年放置していたのでコードを思い出す方に時間を要したくらい。パラメーターは数時間様子を見ながら修正して決定。
 
制御無しのグラフ。外気温の影響は、約1時間遅れで室温に現れる。また、室温は最高と最低で約4℃程度の差が発生してしまう。ちなみに黒い線は特に意味は無い。



超ざっくり実装で制御した結果。黒い線は目標設定温度である25.5℃。若干外気温に影響されるが、ほぼ目標設定温度の±0.5℃の変化で収まっているのがわかる。確かに明け方も寒くなかったし、日中も暑過ぎることもなく、非常に快適になった。

フィードバック制御を真剣に勉強すれば、もっと奇麗な制御ができるのだろう。そのうち時間が出来たら、循環水温度も見ながらもっと奇麗に制御できるように実装したい。

theme : プログラミング
genre : コンピュータ

全館暖房リアルタイムネット制御:初稼働

Arduino, Linux, WebSocket, HTML5 を使ってDIYで開発した全館暖房リアルタイムネット制御システムが初稼働した。何のインターフェースも持たない旧式のボイラーのリモコンを改造し、遠隔地から室温、外気温を確認しながらWeb経由で自在にボイラーを制御できるシステムである。

明日休みを取ったので、今日の夜移動で先ほど安曇野へ到着。無事暖かい部屋に到着した。昨シーズンと違い、メールによるテキストベースの制御からWebベースのリアルタイムGUI制御へ今年大きく改良を施した。今朝8時半頃、東京からこのシステムを使って安曇野の自宅の室温をチェック。14.6℃だったので、[運転 入/切]ボタンをクリックして電源投入。[高/時]ボタンを押して循環水温度を最高の80℃にセット。昼過ぎに室温を確認したところ、23℃を超えていたので今度は[低/分]ボタンを押して循環水温度を45℃にセット。室温は理想的な22℃ライン(黒い線)とほぼ同一温度になった。今の季節なら5〜6時間で室温が20℃を超えるが、真冬になると室温0℃近くまで下がるので、普通に過ごせる室温になるまで1日近く掛かる。本領を発揮するのはこれからだ。

まだ自動温度調整機能は未実装だが、これを実装すればこのボイラー循環水温度調整による室温制御も自動で行えるようになる。かなり理想的な状態に近付いてきた。



theme : 電子工作
genre : コンピュータ

全館暖房リアルタイムネット制御:GUIバージョンアップ中

Arduino, Linux, WebSocket, HTML5 を使ってDIYで開発した、ブラウザだけで操作可能な全館暖房リアルタイムネット制御システム。

機能としては全て要件を満たしたのだが、何かイマイチカッコ悪い。スマフォでの使い勝手も悪いので、GUIを刷新することにした。調べてみると、jQuery Mobile辺りを使えばそれっぽく見えそうなので、取り敢えず勉強しながらプロトタイプを実装。満足出来るレベルではないが、一応iPhone5からもそれなりに操作が出来る様になった。技術の問題というより、センスの問題が出てくるのでなかなか難しい。せめて普通の商用サイトレベルくらいには仕上げたい。

画面はナビゲーションバーで3分割してみた。パネルヒーターの制御画面、温度湿度画面(外気温及び外気湿度、リビングの室温及びリビングの湿度)、外気及び室温のグラフである。リアルタイムで画面が反映させるのは従来通り。

パネルヒーターの制御画面。実機のボイラーリモコンそのままのフィーリングでタッチ操作が出来る。LED等の表示も実機の表示をリアルタイムに反映。また、実機には無い温度自動制御システムを今後実装する。設定温度に近付く様、自動でボイラーの水温制御をするコードを開発予定。



今回のバージョンアップに伴い、室内の温度センサーも交換した。AzuminoKionでも使っているSENSIRIONのSHT-71。校正済みの上、湿度も計測できるので交換した。そのため、表示系も温度及び湿度を屋内、屋外で表示。これらの計測値もリアルタイムに変化する。



グラフ表示機能。屋外は1時間毎、屋内は15分毎に計測データがサーバー側に記録されており、そのデータをブラウザでグラフにして見ることができる。JQuery Mobile 1.3.1からテキスト入力で日付の入力が可能になったが、ブラウザによって対応状況が異なるようだ。この辺りは疎いのでまだまだ勉強が必要…



レイアウト等もまだ気持ち悪いところが多数あったりするので、改良はまだまだ続きそうだ…

全館暖房リアルタイムネット制御の動画

連休中に完成した全館暖房リアルタイムネット制御の動画。Arduino, Linux, WebSocket, HTML5 を使い、ブラウザだけでこんな感じで操作が出来る。


ちなみにこの記事はカテゴリーとしてまとめられているので、時系列で読むにはこちらを参照。
http://leadaworthwhilelife.blog94.fc2.com/blog-category-31.html

theme : プログラミング
genre : コンピュータ

全館暖房リアルタイムネット制御:プロトタイプ完成

趣味の研究開発、全館暖房リアルタイムネット制御システムのプロトタイプが完成した。

当初セキュリティは自己認証局を立てて、クライアント認証でやれば良いと考えていた。が、良く考えたらNode.jsはApacheが不要なのであった。Apacheでのクライアント認証を前提に考えていたので予定が狂った。Node.jsでもSSLを対応することは出来そうなのだが、ちょっと面倒そう。

ということで調べた結果、Passport-localを使ったusername&passwordによる認証が比較的簡単なので、これを採用することにした。SSLほどセキュアではないが、コンテンツの内容を考えれば特に問題は無いのでこれで良しとする。あとでSSLを使った方法も考えてみる。

レイアウトは若干変更した。iPhoneでの操作性を良くするため、ボタンを大きくしたつもりだが、何故かMac版のSafariだと大きくならない。FireFoxやiPhoneのSafariだと設定通りに大きくなるのだが…。まぁプロトタイプということで、見て呉れは後で調整する。室温のグラフがガタガタなのは、A/D変換の分解能の問題。外気温と同じI2Cタイプに近いうちに変更する予定なので、滑らかになるだろう。

ルーターのポートフォワーディングの設定も完了し、LTE/3G経由でもアクセスできるようになった。現在500msで画面の更新を行う様に設定しているが、3Gでも問題なくリアルタイムに操作及びGUIへの反映が出来ている。

東京へ帰る間際まで負荷テストを行い、問題無さそうならこのまま仮運用に入る。残りは室温をフィードバックしての自動温度制御機能のみ。

当初予定していたイメージ通りの物に仕上がった。開発での達成感が得られたのは久しぶりな気がする。

theme : プログラミング
genre : コンピュータ

全館暖房ネット制御:デバッグ作業進捗

趣味の研究開発、全館暖房ネット制御の開発進捗。ドキュメントも兼ねて簡単にブロック図を書いてみた。今後変更する可能性もあるが、初版ということで。



Node.jsで書いているコードは2種類。コントローラーとUARTサーバー。コントローラーとUARTサーバーを分割したのは、Webブラウザ上に外気温も表示したかったため。外気温センサーが接続されていたAzuminoKionは独立したコード、しかもPerlで書いてしまった。そのため、外気温センサーが接続されているUARTのポートを解放できないため、別のコードから外気温が取得できない。そこで構成を一新し、UART系を全て担うUARTサーバーを分離した。この構成であれば、クライアントが増えても好きな時に好きなセンサーにアクセスできる。また、今後UARTポートを使用するI/Oを増設する時も柔軟に対応ができる。

コントローラー側が行う主な処理は下記の通り。

 Webブラウザとの接続(ボイラーパネルGUI及び温度計のリアルタイム処理、グラフ描画)
 UARTサーバー経由でボイラーコントローラーからの情報取得
 UARTサーバー経由で外気温取得
 AzuminoKionのツィート時間(毎正時)検出
 外気温及び湿度を引数にして外部Tweetエンジン(Perlで記述)呼び出し

UARTサーバーはコントローラー(クライアント)から来た依頼に沿ってUARTにコマンドを投げ、UARTから受信(処理結果)が来たらコントローラーに情報をPushするのみ。

AzuminoKionとの連携処理も完了。現在AzuminoKionでツィートしている内容は、全て新しく開発したコードで動作している。高負荷を掛け状態での連続試験も実施中だが、特に問題は発生してない。

残りはSSLクライアント認証設定。ゴールデンウィーク中に予定していた開発目標は達成できそうだ。

theme : プログラミング
genre : コンピュータ

全館暖房ネット制御:デバッグ作業開始

東京で開発を進めていたコードを、パネルヒーターのボイラー用コントローラーに接続してデバッグ開始。

Arduino側に作ったデバッグモードが功を奏し、実機につないでもほぼそのままの状態で動いた。特にレスポンスが遅いという感じも無く、ブラウザからリアルタイムで操作ができた。ブラウザ上のコントローラーのGUIと、実機のコントローラーがほぼ同じタイミングで動作する姿はなかなか自己満足に浸れる。完成した暁には、動画撮影してYouTubeにアップし、このblogで紹介したい。

残りはAzumino Kion側との連携処理と、SSLクライアント認証設定。うまく外からアクセスできれば連休中に数日間テスト。連休明けから次に帰るまで仮運用するのは危険かなぁ…

theme : プログラミング
genre : コンピュータ

全館暖房ネット制御:バージョンアップ進捗状況

下の写真はブラウザでの表示画面のスナップショット。まだ開発中のためレイアウト等は今後も変更する可能性が高いが、iPhoneでも奇麗に表示できるようにしている。

node.js + Express + Socket.IO でリアルタイム制御の作り込みがほぼ完了。どうせ表示するなら見栄えも考えて温度計とグラフはHighchartsで描画している。ちなみに室温、外気温グラフのデータはまだダミーデータ。

ブラウザ上では、室温、外気温、パネルヒーターの7セグLED表示は500msサンプリングで表示している。今はLANで接続しているので100ms程度でも問題無く動作するのだが、LTEや3Gからの制御を考え、安定性とリアルタイム性をトレードオフすると500ms程度が無難と考えた。実際はやってみながら調整する予定。

開発用のArduinoに接続した温度計を指で温めると、滑らかに温度計の針が動く。また、ここ(東京)には実際にはパネルヒーターのコントローラーが無いので、Arduinoにデバッグモードを作り、パネルヒーターからの反応を擬似的に返すようにしてデバッグしている。Arduinoからの反応に沿って、リアルタイムに7セグLEDの表示が変わる。ボタンを押せば、Arduinoからパネルヒーターに対してボタンを押したと同じアクションを行う。多分実機でも一発で動くはずなのだが…

AzuminoKionの温度センサーと兼用するため、構成も変更した。シリアル(UART)制御部と全体のシステム制御部を分割している。システム制御部が正時になると温度センサーの値を読み、既に開発済みのAzuminoKion(Perlで記述済)を呼び出すような構成にした。

外気温のサンプリングレートはAzuminoKionの関係もあるので1時間毎だが、室温は15分毎のサンプリングにする予定。室温は自動室温制御機能を実装するつもりなので、室温を見ながらパネルヒーターの水温を制御する必要がある。あまり頻繁に取っても意味が無いし、1時間毎のサンプリングでは精度を出すのが難しいので15分くらいが適当かと。

次のゴールデンウィークで安曇野に帰った時にデバッグを終わらせ、HTTPSで外部から接続できるところまでテストするのが目標。

季節が良いので自転車に乗ったり外出もしたいから、雨でも降らないと目標達成は難しいか…

theme : プログラミング
genre : コンピュータ

node.js + Express + Socket.IO が素晴らしい

安曇野の自宅に設置している全館暖房(セントラルヒーティング)をネットで制御する件。

先日ユーザーインターフェス部をざっくり実装したが、具体的な制御方法の検討をしてみると、自分でAjaxを使ってゴリゴリ書くより、もっと楽で早い方法があることが分かった。

根っからの組込みソフト、もっと言えばFPGA等のハード開発が専門なので、抽象的な世界のネットワーク系言語には殆ど縁が無かった。特にJava、Perl、PHP、Python、Rubyなどのサーバサイド言語は少々触った程度で基本的には門外漢だった。そのためサーバー系でやりたい事があっても、その身の丈に合った最適な言語やフレームワークのチョイスが未だに良くわからない。

安曇野の気温を呟かせるTwitter用のbotであるAzuminoKionの制御にはPerlを使った。特に理由は無かったが、気温を呟かせる処理は比較的単純だし、古典的なスクリプト言語であるPerlをまじめに勉強してみようと思っただけである。

今回、Webブラウザベースで操作パネルを表示し、電源スイッチや循環水温度の設定、ネットワークを通じて制御するボイラーからの反応(現在の循環水温度や燃焼状態)をリアルタイムに設定/表示したいと考えている。何となくAjax辺りを使えば実現できそうだが、実装が面倒そうだということは分かっていた。もっと楽な方法は無いかと調査していたら、最適なソリューションを見つけた。それがnode.jsである。しかもフレームワークのExpress、WebSocketを使うためのライブラリSocket.IOを使うと、やりたいことがあっという間に出来る事が判明した。

試しに、 サーバー側にシリアルポートをクロスケーブルで別なターミナルと接続し(ボイラーをhackして接続したArduinoの代替用)、サーバー側にnode.js + Expressで実験用サンプルソフトを実装してみた。ブラウザからボタンを押すと、リアルタイムにシリアル側へデータを送信できるし、ターミナル側から(シリアルから)データを受けるとブラウザ側にリアルタイムに反映/表示される。勿論、これらは非同期で独立して動作する。これをベースに、先日使ったユーザーインターフェースを被せれば、基本的にリアルタイム制御は可能になる。

この原理試作がわずか1日も掛からずに完成した。自分でスクラッチから書いたらどのくらい掛かるだろうか。これがネット系言語やフレームワーク、豊富なライブラリ群の凄さなのかもしれない。

後日、時間があれば詳細を記載予定。

theme : プログラミング
genre : コンピュータ

全館暖房(セントラルヒーティング)ネット制御システムバージョンアップ開始

一昨年、安曇野の自宅に設置している全館暖房(セントラルヒーティング)をネットで制御できるようなシステムを自作した。取り敢えずメールベースで必要最低限な機能は制御可能となっているが、ユーザーインタフェースがメールということもあり、レスポンスに時間が掛かる上、セキュアでない。使うのは基本的に自分もしくは妻だけなので問題は無いが、どうでも良いことにエネルギーを費やすのが趣味である。

ということで、システムのバージョンアップを開始した。ざっと要求事項を挙げると、

・ボイラーリモコンのユーザーインターフェースをシミュレート、ブラウザで実現したい
・リモコンからの反応(LED, 7segLED,ブザー等)は、そのままリアルタイムでGUIとして反映
・要は、壁のボイラーリモコンを、そのままブラウザ上に引き出した感覚の操作が可能
・iPhone/iPadでも操作したい
・室温を設定しておくと、その設定温度になるよう自動的にボイラーの循環水温度を調整させたい
・AzuminoKionの外気温センサーとも連動し、先を見越した制御アルゴリズムを実装したい
・室外に置いてある灯油タンク(2個)の量を把握したい
・セキュアな環境を構築したい

という感じだろうか。

フィージビリティスタディとモチベーションを上げるため、ざっくりGUI部分だけをJavaScriptで開発してみた。あくまでも試作なので、マジックナンバーやハードコード等はご愛嬌ということで。

この写真をクリックすると別ウインドゥが開いて実際にGUIの操作が可能になります。
運転入/切ボタン、温度調整の高、低ボタンを押してみてください。




実装したのは一番美味しそうな7セグメントLEDの実現と運転入/切ボタン、運転LED、温度調整の高、低ボタン。

循環水温度は実機と同じ30℃に初期化される。最大の温度設定は80℃まで。運転入/切ボタンをクリックすると、トグルでON/OFF可能。高、低ボタンをクリックすると、実機と同じ5℃単位で上下が可能になる。7セグメントLEDは、ボイラーリモコン搭載の7セグメントLEDのハードウェア仕様と同様、7bitでエレメント[G:A]に対応しており、実機が返すものと同じバイナリコードを指定すれば、全く同じ表示ができる。7セグメントLEDはこのWEBアプリでは固定だが、一応プロポーショナルフォントっぽく、表示位置とサイズは自由に変更できる。

これらの操作は、Ajaxを使ってリアルタイムに処理し、ボイラーリモコンからの結果をそのままこのGUIに返す予定。例えばボイラーリモコンのLEDが点灯すればリアルタイムにブラウザ上のGUIも点灯表示、点滅すれば点滅表示を実現したい。どのくらい遅延が発生するか不明だが、それなりの速度で動くことを期待している。

目標は年内完成、来シーズンからの運用かなぁ…

theme : ハードウェア
genre : コンピュータ

プロフィール

hashiken

Author:hashiken
基本的に自分で作る、直す、メンテする。東京と安曇野の二重生活。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
Photoscope∀
different version
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
検索フォーム