夏休み2日目:研究活動

ちょっと寝坊してトウモロコシや夏野菜を買いに近所の物産センターへ。偶然にも元同僚でご近所でもある友人のYさんと遭遇。お会い出来てラッキー。

昨日買い忘れたネジ類を買いたかったのだが、まだホームセンターが開いてない。ちょっと離れたもう1件の物産センターに寄って時間調整。10時ちょっと前になったので、ホームセンターへ。買い忘れの品も無事購入して帰宅。別記事にも書いた研究活動を夜まで行い、遂に完成。

軽めの夕食の後、blogを書いたりして夜はDVDの映画。

明日は天気良いといいのだが。これでは自転車に乗れない…。

Pandaboard+Arduinoによる暖房ネットワーク化完了

安曇野の自宅に設置している全館暖房(セントラルヒーティング)をネットワークで遠隔制御するシステムが完成した。趣味の開発にしては、かなり実用的な物が作れたと自画自賛。ビジネスにしたいところだが、需要も限定される上、何と言ってもこんなワンオフ物じゃビジネスにはならない。妻が非常に喜んでくれたのが何より。ちなみに妻はアクリル版で基板をシースルーにしたデザインに反応していた。非常に近未来でカッコイイらしい。流石理系。



さて、おさらいをしながら概要を説明。

要求仕様
 - メールでコマンドを送り、セントラルヒーティングのボイラーの制御を行う
 - コマンドの結果はボイラーコントローラーの操作後の表示内容をメールで返答
 - 現在の室温を計測してメールで返答
 - 受け付けるコマンド一覧
  ボイラー電源ON / OFF
  循環水温度設定
  現在のコントローラーの状態取得(室温含む)
  連続運転時間制限のON / OFF

ターゲットのセントラルヒーティングシステム
 ボイラー    TOYOTOMI FB-07P
 コントローラー TOYOTOMI BR-4678

ボイラーコントローラーとのフロントエンド
 ハード
  Arduino UNO + バニラボード上に自作I/F回路&温度センサー
 機能
  - ボイラーコントローラー内部信号のデコード
   電源LED, 燃焼LED, 設定温度7segLED, 循環水温度7segLEDの値を取得&デコード
  - ボイラー用スイッチ制御
   電源スイッチ、上スイッチ、下スイッチのON/OFF
  - 室温計測
   A/D用端子に温度センサー(S-8120C)を接続し、室温計測

ネットワークの制御
 ハード
  Pandaboard + Linux(Ubuntu)
 機能(Perlで実装)
  POP3, SMTPによるメールの送受信
  USB Serial InterfaceによるArduinoとの通信
  コマンド解釈

Pandaboardはメールのポーリングとメールによるコマンドの解釈を行う。Pandaboardには無線LANが搭載されているが、技適が通ってないので有線LANで運用。コマンド発行の後や、または状態取得コマンドを送ると、以下の様なメールが返信されてくる。下記は水温60℃で電源ONコマンドを送信した例。

 電源:ON
 ボイラー:燃焼中
 設定温度/時:60 循環水温度/分:22
 連続運転時間制限:ON
 室温:26.02℃

電源がONになり、ボイラーの燃焼開始、設定循環水温度は60℃、現在の循環水温度は22℃、連続運転制限はON(最大連続運転時間48時間)、室温は26.02℃、という情報である。

連続運転制限機能は保険のために実装した。デフォルトで最大連続運転時間を48時間に制限した。万が一電源投入後にネットワークがダウンした場合、現在の設定では48時間後に自動的にボイラーがOFFになる。

大抵の場合、自宅に帰る前日にボイラーの電源を入れることになるだろうが、万が一急用で帰れなくなり、且つ、ネットワークがダウンしても、最悪2日後に自動停止する。解除コマンドも実装しているので、無事に自宅に到着したら解除コマンドを発行して連続運転モードにすれば制限は解除される。東京に戻る場合には再度コマンドを送信して連続運転制限をONにして保険を掛ける、という感じの運用になる。

Arduino側の暴走対策も技術的には可能なので、後ほど実装予定。夏休み中は仮運用しながらひたすらテストを行う。

夏休み初日:買物ツアー

長期休暇で安曇野に帰ってくると、大抵初日は買い物になる。ということで、今日も買い物ツアー。妻を近所のスーパーに降ろし、私はガソリンスタンドへ。先ずは給油と洗車済ませる。その後は TSUTAYA 。こっちの家にはプロジェクターと120インチのスクリーンがあるので、久々に大きい画面で映画が見たくなって借りた。

再びスーパーに戻って妻をピックアップしてホームセンター。セントラルヒーティングの遠隔制御システムがほぼ完成したので、設置をするための土台となるアクリル版やネジ類などを購入。

帰宅後、アクリル板の加工。適度な大きさにカットしたり、ドリルでネジ穴を開けたりなど。夜はDVDの映画を一本。

クーラント補充

昨日、高速で水温計の針が上昇したのでクーラントの量をチェック。確かに減っていたので約500cc程度補充。

theme : メンテナンス&ケア
genre : 車・バイク

中央高速の登りで水温上昇

安曇野に向かう途中、中央高速の登りで水温上昇。長い登りで水温計の針が右2/3程度まで上昇。速度を緩めるとすぐに下がり、その後下りでは水温計の針は正常値。

夏場は水温計の針から目が離せない。

theme : メンテナンス&ケア
genre : 車・バイク

ボルボ S80 T6 高速道路でオーバーヒート寸前

またまた不調続きのボルボ。先ずは以前一度現れたDSTCの警告灯が点灯。しかし、前回は放っておいたらいつの間にか消えていたので、今回も放っておいたら1~2週間でいつの間にか消えた。原因は不明。相変わらず気持ち悪い。

それから焦ったのが高速道路でのオーバーヒート寸前事件。先週安曇野からの帰り、中央高速での登り坂で「オーバーヒート」のメッセージ。温度計を見ると、水温がレッドゾーン寸前。このままではクーラントが吹き出て白煙を吹き上げる。速攻で登坂車線に移ってスピードダウン。エンジンの回転が下がると、水温も下がって来た。間一髪。その後もちょっとアクセルを踏むとみるみる水温が上がる。先日サーモスタットを交換したので、サーモスタットは問題無いはず。これは昨年美ヶ原でオーバーヒートした時と同じ症状なので、帰ってからオイルの量を調べるとやはりゲージのMAXから半分くらいになっていた。急いでホームセンターでオイルを買い、補充すると2リットルも入った。今日、再び高速に乗ったが、特に水温計が上がる気配は無し。オイル交換後3ヶ月でこんなに減るとは。別にオイルが漏れている様子は無いのだが、夏場や長距離は要注意である。

theme : メンテナンス&ケア
genre : 車・バイク

鈴木博文生声弾き語り solo Live 『Aestival songs』

下北沢のleteで鈴木博文ライブ。前回が非常に良かったので今後も下北沢でのライブは毎回行く予定。

開場時間になって入場すると、いきなり御大が譜面のチェック中。開演までの待ち時間も、目の前を行ったり来たり。なかなか普通のライブでは味わえない距離感である。

今回もお気に入りの曲であるプールサイド、Fence、くれない埠頭などが楽しめて大満足。ギターとハーモニカによる生演奏と歌、素敵過ぎです。アンコールのさよならは夜明けの夢は特に良かったなぁ。

メトロトロン・レコードのTwitterで流れていたセットリストをメモとして抜粋。

M-1 やわらかい戦慄
M-2 鋼の満月
M-3 プールサイド
M-4 Bomb
M-5 ロードーカ
M-6 そばにいるかい
M-7 薬瓶と窓
M-8 ニットキャップマン外伝
M-9 Highway Star
M-10 Breath
M-11 riparian life
M-12 裸足のリタ
M-13 屑になったら
M-14 Fence
M-15 重荷
M-16 くれない埠頭
M-17 Lonely Man
M-18 影法師
En-1 さよならは夜明けの夢

オイル補充

中央高速の登りで水温が急激に上昇。水温計の針はレッドゾーン寸前に差し掛かり、オーバーヒートの警告メッセージが表示された。速度を落としながら何とか白煙を吹かせずに帰宅。オイル量のチェックをしたところ、4月23日にオイル交換(サーモスタット交換時)をしたのにも関わらず、ゲージの2/3程度に減っていた。東京でも10W-40のオイルを購入し、2リットルほど補充してゲージのMAXまで入れた。

theme : メンテナンス&ケア
genre : 車・バイク

日本アルプスサラダ街道

安曇野なのにこんなに暑いとは。なので今日は早起きして自転車を漕いだ。今日のコースは日本アルプスサラダ街道を辿るコース。とは言っても、MTBじゃ流石に最終地点の塩尻まで走る元気は無かったので、山形村で引き返すコース。安曇野では農道と山麓線を使うのが定番だが、なるべく農道と山麓線を避けるコースで走ってみた。



三郷付近はリンゴ畑の間を抜ける道を走るのが正解。車も少ないし、非常に走り易い。たまに農薬散布をしているので、それだけ注意すれば快適。



安曇野ワイナリーの近くにある黒沢洞合自然公園。いつの頃からかわからないが、看板が出てたので気になっていた。砂利道を600m程走る必要がある。最近出来た新しい公園のようで、ビオトープやバイオトイレがあった。ビオトープでは、トンボが忙しそうに卵を産んでいた。


ワイパーゴム交換

適合表には無かったのでサイズから合わせた。

運転席側 長さ60cm 幅 6mm 接続部形状 四角形
助手席側 長さ57.5cm 幅 6mm 接続部形状 四角形

theme : メンテナンス&ケア
genre : 車・バイク

ソフトによるパネルヒーターのリモコン制御成功

ご注意
改造にはリスクが伴います。また、下記の内容は動作を保証するものではありません。自己責任でお願いします。

この連休に休暇を加え4連休。安曇野の自宅に帰って来たので、前回Arduinoを使って開発したリモコンとのインターフェース部のデバッグを行った。結論から言えば、回路とソフトは一発で動いた。が、ターゲットであるリモコンを解析したところ、ちょっと不思議な設計をしていることが判明し、現物合わせに若干時間を要した。

デバッグ用に作ったプロトコルジェネレーターでしっかりデバッグしておいて大正解であった。これのおかげでArduinoのソフトは現物合わせの部分を除けば無修正であった。

リモコンとのインターフェース用の信号は、結局GNDを除けば6本で済んだ。これで搭載している全ての7Seg-LED及び通常のLEDの状態、電源ボタン、UPボタン、DOWNボタンの制御が出来た。

perlのスクリプトも書いて、MacのVMwareで動かしているUbuntuで実行してみた。本番ではこれがOMAP4を搭載したPandaboardになる。

ArduinoとのインターフェースになるUSBシリアルはUbuntuからは/dev/ttyACM0に見える。既にcpanでシリアル制御、POP3Client、SMTPのモジュールをダウンロードして、取り合えず実験用のコードを書いおいたので動かしてみた。電源投入コマンドをメールで送信すると、パネルヒーターが自動的に操作され、電源が入り、設定温度に循環水の温度が設定され、下記のメールをリプライしてくるようになった。

電源:ON
ボイラー:燃焼中
設定温度/時:45 循環水温度/分:28
室温:31.34℃

現在サポートしているのは、

パネルヒーター(ボイラー)のON/OFF
循環水温度の設定
現在のリモコンパネルの状態表示

のみ。デバッグ用に、パネルヒーターから取得した生データも送るコマンドも搭載している。



ケーブルはホットボンドで固定。





解析したリモコンの回路(実機の配線パターンから追った推測)とボタン操作に関して追加した全体回路。勿論、従来通り、リモコンのボタン操作も可能。



Arduinoに搭載したバニラボードの全体回路図。キー操作部に加え、温度センサーも搭載。



前記事で書いた通り、オシロで解析した結果、当初はリモコン内でのLED等の内部情報のデータの転送レートは500μsec/bitだと考えていた。あの波形を見れば、誰もがそう思うだろう。が、実際は微妙に違っていた。

500μsecでデータをキャプチャーして連続表示すると、値が不定のbitがあった。前半は合っているが、後半が何となく数bit化けていたり。Arduinoで、リモコン側データサンプリングのタイミングを空ピンに出力させオシロで見てみると、前半はタイミングが合っているのだが、途中から徐々にリモコンの内部データが速くなっているのが分かった。化けていた部分は、予想通りエッジ部分で不定の値を取っていた。私のソフトはオシロで見ても500μsecぴったり。どうもこの内部信号、500μsecより微妙に速いのであった。結局調べてみると、正しいサンプリングレートは492μsec。ホスト(ボイラー)と正しく通信は出来ているので、真剣にこの周期なのだろう。

今回の開発では、Arduinoで正確なタイミングを生成するためタイマー割込を使った。割込周期は最速で20μsec。492μsecなんて微妙な周期は作れない。仕方がないので、5bitキャプチャーする毎に40μsecタイミングを速く調整する処理を加えて辻褄を合わせた。これで化けずに完璧に読めるようになった。

思うに、普通に設計すれば、492μsecなんて半端な数字は普通使わないと思う。本当は500μsecで設計したのだが、何かソフトの処理のオーバーヘッドか誤差の関係で、結果的に492μsecなんて数字になったような気がする。通信部分は複雑なプロトコルでもなければ普通一人の担当者が送受信部を一緒に作る場合が多いだろうから、送受信共に同一のアルゴリズムを使ったために、送受信には問題が無かったのだろう、なんて勝手に邪推している。

データがきちんと読めたところで、内部のデータフォーマットも判明した。ほぼ、補足通りのデータフォーマットであった。

データは64bit長。フォーマットは以下の通り。8bit長のデータが8個で構成されている。

0xE3 7SegDIGIT 7SegDIGIT2 7SegDIGIT3 7SegDIGIT4 LED1 LED2 LED3

0xE3
マーカー(フレーム識別用?)

7SegDIGIT~7SegDIGIT4
各桁毎の7セグメントLEDのエレメントデータ。エレメントは下記のLEDそのまま。bit7は1固定、bit6がG~bit0がAに対応している。



LED1[7] 上記7セグメントLEDのコロン(UC or LC)
LED1[6:0] 不明(未使用?)

LED2[7:5] 不明(未使用?)
LED2[4] LED / おやすみ
LED2[3] 不明(未使用?)
LED2[2] LED / おはよう
LED2[1] LED / 燃焼
LED2[0] LED / 運転

LED3[7] 上記7セグメントLEDのコロン(UC or LC)
LED3[6:0] 不明(未使用?)

これらの解析は実は簡単で、リモコンのボタンを操作しながら点灯するLEDや表示される7セグメントLEDの状態から解析した。欲しかった情報は全て網羅できたのでこれ以上の解析はやめた。

全く何のインターフェースも無いリモコンに、数本の線をつないだだけでHackできたのは結構自己満足。メールを送ると、「ピーッ」と電源が入り、「ピッ、ピッ…」と温度調整がされる様子は我ながら感動的であった。

次の予定。いよいよPandaboardの組込Linux側プラットフォームに着手。基本的にメアドを公開する訳じゃないので、それほどセキュアな仕組みも必要ないかと思うが、万が一のイタズラ等の対策と、停電等の異常系処理を強化して運用に向けてのテストを行う。今度はPandaboardを含め、実際に壁に設置する予定。次は夏休みかなぁ。

いずれにせよ、何とか今年の冬からは運用できる目処が立った。

木崎湖往復

自転車トレーニングで木崎湖往復。以前、安曇野在住時はどちらかと言えばヒルクライム的なコースばかりであったが、最近は距離を走るコースが気に入っている。ということで、今回は木崎湖往復。

こっちの自転車はロードでなくMTBなので、やはり重い。安曇野用にロードが欲しいなぁ、オークションでパーツ集めて比較的低価格なロードを組んでみようかなぁ、なんて思ったが、稼働率を考えると割が合わないのでやめた。

コースはなるべく幹線道路を使わないコース。殆ど田んぼや畑の間の道を走った。



殆ど貸し切り状態。気持ち良過ぎ。しかも信号が無いので一定速度で長時間漕ぎ続けられる。理想的。



木崎湖到着。透明度は高く、非常に奇麗な湖。



木崎湖を1周する時に見つけた田んぼの脇を流れる小川。何かいるかと思って覗いてみたら、魚と貝がいた。まだこの辺りは自然で満ち溢れている。



今日の走行距離52Km。

都心をグルグル

今日の自転車トレーニングは久しぶりに都心を中心に走った。井の頭通りから渋谷~恵比寿、第一京浜に入って田町~銀座~神田、内堀通りで皇居~芝公園、外堀通りで四谷~市ヶ谷~飯田橋、外苑東通りの起点から南下して六本木、白金から外苑西を北上して新宿。

都心のコースは道を覚えたり、街並の風景を楽しみながら走れるは良いのだが、信号が多過ぎる。最近は荒川沿いを走ることが多かったせいか、信号待ちが凄いストレスだった。



今日の走行距離51Km

Arduinoのバニラシールドで回路追加

パネルヒーターとのインターフェース開発の続き。

前回のプロトコルデコーダーのソフトを仕上げつつ、Arduinoのバニラシールド(ユニバーサル基板)を使って外付け回路を追加した。追加した回路はスイッチ操作送信部と温度センサー。スイッチ操作は、パネルヒーター側のタイミングに合わせてスイッチのON/OFF信号を送信する。温度センサーは室温を計測する。

元々パネルヒーターには温度センサーは無かったので、室温が上がり暑くなるとボイラーの水温を下げ、室温が下がって寒くなるとボイラーの水温を上げるという作業を手動で行っていた。この温度センサーにより、遠隔操作機能以外にも、オートエアコンのように設定した目標室温を維持するよう、ボイラーの水温を自動制御することができる(はず)。



使った温度センサーは秋月電子で買ったS-8120C。5個で200円なので1個40円。安い。外付け回路が不要で、電源電圧が範囲が広く、温度変化のリニアリティが高いのでこれを選んだ。

ArduinoへはA/Dコンバーター端子のA0へ接続した。但し、A/Dコンバーターの分解能を上げるため、リファレンスを3.3Vに接続している。Arduinoには3.3Vが出力されているので、ARefを3.3Vに接続。そのためソフトも、

 analogReference(EXTERNAL);

と宣言する必要がある。これにより、3.3Vの変化が1024段階の変化となって読むことができる。後は温度センサーのデータシートに従って温度を計算。今回は室温がそれなりに計測できれば良いので、+30℃を基準に計算している。もっと誤差があるかと思ったが、室内にあるデジタル温度計とほぼ一緒であった。あと温度変化に対する反応が非常に早くてちょっと感動。

下記は1秒毎に温度を表示するスケッチ(Arduinoの世界ではプログラムのことをスケッチと呼ぶらしい)。
#define TEMP30       30
#define VOLTATTEMP30 1474
#define TEMPDELTA 8.2
#define AREFVOLT 3300
#define RESOLUTION 1024

const int PinAnalog = 0;

void setup()
{
analogReference(EXTERNAL);
Serial.begin(9600);
}

void loop()
{
int aval;
float temp,volt;

aval = analogRead(PinAnalog);
volt = ((long)aval * AREFVOLT) / RESOLUTION;

temp = TEMP30 + ((VOLTATTEMP30 - volt) / TEMPDELTA);

Serial.print("Temp ");
Serial.println(temp);

delay(1000);
}
近日、安曇野の自宅へ帰る予定なので、いよいよ実機デバッグを行う。
プロフィール

hashiken

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

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

この人とブロともになる

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