Home > USBによる水温管理


パソコンのUSBポートを使用して、AC電源の制御を行う
〜〜〜マキシム社1-Wire Busシステム使用〜〜〜


■製作背景
汎用USB-IOとマキシム社デジタル温度センサーDS18S20を使用して、温度管理を行っていました。
しかし、突発的に温度センサーの温度取得(というか温度センサー自体の接続検出が失敗)ができない事態が起きました。
プログラムの問題もあったのですが、USB-IOとの共存を一時断念し、マキシム社の1-Wire Busシステムのみで温度管理(水温上昇時のファン制御)を行うよう、プログラムを改造しました。

PCを使用することにより温度データを逐次ログ化します。この手の温度制御では、PICを使用したものが数多くネット上で紹介されていますが、PCで管理したいと自分は考えました。その分PCを24時間動かすということになりますが、CD-ROM,FDDやモニタを接続しておらず、電気代もそれほど気になりません。(それでも50Wとして800円/月程度は使っていると思われます)

汎用USB-IOでは、AC制御が最大12CH、以前作成したものでも4CH可能でした。
1-Wire BusでのAC制御には、DS2406というチップを1CHで1つ使用します。
プログラムでは、まだ1CHしか対応させていませんが、特別不便ではありません。以前タイマーによる照明On-Offを行っていましたが、最近では手でACタップのスイッチをOn-Offしているためです。

■デジタル温度センサーDS18S20の機能/性能
−55℃〜+125℃の範囲が計測可能で、測定誤差は最大±0.5℃ですが実際は±0.1℃程度のようです。
分解能は 1/16℃、TO-92型。
デジタル式のため校正や基準電圧の印加,ADCが不要。

■1-Wire Busシステムとは
詳しくは1-Wireでググッてもらうとして^^;、ようは電話線やLANケーブルでセンサーやスイッチを制御できるものです。各センサーやスイッチは芋づる式に接続することが可能で、私が使用したDS9490RというUSBアダプタを使用すれば、1-Wireへの電源供給も簡単に(USBから取るので実質不要)行えます。
また、一般的な温度センサー(LM35DZやS8100Bなど)では、ADコンバータやオペアンプによる増幅,そして校正が必要だったりと、部品コストは安く入手性もよいのですが、その分面倒です。芋づる式にも接続できないですし。
マキシム社から、ドライバーやSDKが無料で入手できるので、プログラム開発が容易(それなりに苦労しましたが)に行えたのもGoodでした。(っというか、これがなければ使っていませんでした)

■本システムで「なに」ができる?
私のシステムでは、温度センサー6個使用しています。(室温東側/室温西側/外気温度西側/水温3つ)
  ○PCのUSBで接続し、制御します。(Celeron400MHz メモリ128MBで稼動中)
  ○温度センサーのうちどれか1つを指定し、ACをOn-Offさせる温度を指定できる。
  ○温度データをログファイル化する。(15秒と15分ごとの2ファイル)
  ○15秒間隔のログファイルは5日ごとに自動的にローテート。(60/15秒×60×24×5=28,800行となり、Excelの上限32,000行を回避するため)
  ○AC制御をメールで携帯電話へ知らせる。(このプログラムの起動や温度変化によりACをOn-Offしたとか、自動リブートしたとか...etc)
  ○実行ログの出力。
  ○センサー検出を1秒間隔で監視し、未検出の場合再検出し、10回リトライに失敗すると、自動でPCをリブートする。
60cmレギュラー水槽ですと、ファン1つでは心元ないので、2つ使用しています。

■実際のファン設置写真(単に水槽上に「置いてあるだけっ」状態ですが。。。)
DS9490R

以下開発用機材での写真
■USB−1-Wire Busアダプタ DS9490R
DS9490R
■USBハブでPC(ノート)接続
PCとの接続
■コネクタ部
DS9490R−コネクタ部


■AC箱
ACケース
■AC箱(コンセント側)
ACケース−コンセント部
■AC箱(中)
ACケース-中身
■基板
DS2406基板



■分岐コネクタ(ダイソーで購入)
分岐コネクタ



■温度センサーDS18S20−黄色は防水用のホットボンド,電話線は5m/50円を千石電商にて
DS18S20-全体
■拡大
DS18S20−拡大



部品(機材)

■SSRキット・・・・・・秋月電子通商のソリッド・ステート・リレー(SSR)キット 20A(16A)タイプ【専用基板】(@350-×1個)
■温度センサー・・・DS18S20
■USBアダプタ・・・DS9490R
■1-Wireスイッチ・・・DS2406
■ファン・・・秋月で1個300円(DC12V 6W)のブロワータイプ×2
■PC・・・1台(Celeron400MHz/Mem128MBで使用。VNCで遠隔操作のためモニタもなし)
■その他・・・RJ11(4Wire)ケーブルや分岐コネクタ(4芯),ヒートシンク/ヒューズ管(1.5A×1)とホルダー×4/220Ω抵抗×1/LED×1/基盤用コンセント×1/ACケーブル/ケース/ジャンパー線/DC9〜12VのACアダプタなど


工作

■SSRキットは5個の部品を半田づけします。1口16Aまで対応していますが、連続10A流す場合ヒートシンクは2mm厚アルミで10cm×10cm必要(目安)と書かれています。
ファンは0.5A、2つでも1Aですので、1.5Aのヒューズと2cm×3cmヒートシンクを使用しました。
■温度センサー関係は、DS9490Rの1pinを4Wireの電話線(RJ11)の4pinへ半田づけしました。実際に使用するのは3Wireです。


プログラム

■Visual Basicで作りました。汎用USB-IOとの共存も将来的に考え、以前作成したものを改造しました。一応汎用USB-IOによるタイマーでのAC電源(コンセント)と温度によるAC制御(汎用USB-IOとDS2406)が同時にできますが、テストしていません(笑)。
1-WireのドライバーとSDK(プログラム開発したい人)はここからダウンロードできます。
2004.9月現在、ドライバーはVersion 4.00 beta 4,SDKはVersion 4.00 betaです。

※注意:このプログラムは、最低限ドライバーとMicrosoft Java VMをインストールする必要があります。

■画面はこんな感じです。
プログラム画面-その1
■温度のログファイルから、自動的にグラフを作成するExcelマクロを作成し描画させた結果です。
上は15分ごと、下は15秒ごとです。外気温/室温/水温の温度変化がよくわかります。
(色が変わっているのは、プログラムミスにより列が変わってしまったため^^;)
Excel画面-その1
Excel画面-その2
Excel画面-その3



■解説
・1つのコンセントを制御します。
・しきい値の温度を入力し、リストから温度センサーをダブルクリックで選択すれば、設定値を保存します。
・プログラム画面のステータス部に「リカバリ成功」とあるのは、何らかの原因でDS9490Rが未接続となってしまった場合、自動的にリカバリ処理するようにした結果です。以前はリブートさせていましたが、このリカバリ処理でかなり助かっています。
※汎用USB-IOとの共存のせいで、DS9490Rの未接続が発生してしまうと考えていたのですが、現在わかっている現象ではエアーポンプのスイッチを手でOffにしたとき、だいたい3回に1回の割合で発生しています。もっと立派なエアーポンプにすれば解消されるでしょう(笑)。
それ以外でも発生することがあるようですが、原因がわかっていません。おそらく1-Wireへのノイズだと思われます。電話線ではなくLANケーブルの方がいいのかも知れません。(4ヶ月以上経って「それ以外」の原因は特にありませんでした)
現時点ではリカバリ or リブートで自動復帰しますので、よしとしています。
(開発中は、不定期に温度取得できず、数時間〜数十時間データ抜けがあったりと、途中で「こんなセンサー使えねぇ〜」と放棄したことも何度かありました。USBハブを疑って新品を購入したり、USBハブ経由自体がダメなのかと思い排除したりと、苦労しました。)
Excel画面-その3
■プログラムのダウンロードは。。。現在非公開です。(欲しいという方がいれば公開する予定)


自己責任で


■AC電源を使用する関係でショートや結線ミスなどによる火災の可能性があります。
■運用にあたっては自己責任で行ってください。
■使用した際に生じたすべての結果については一切責任を負いません。

もどるトップページへ

Copyright (C) 2000-2004 Tak3 All rights reserved.