24時間温度・湿度自動測定システム
(Last update: 2012/03/08)
ソーラーサーキット工法で建築した我が家の「性能」を客観的に評価すべく、1時間毎に温度・湿度を測定するシステムを製作した。以下にその概要を記す。(なお、このシステムは工務店から金銭的援助を受けていないため、例え工務店に不利な測定データが出たとしてもそのまま公開される ^^;)
1. システム概要
![]() |
システムの要、PICNIC2 |
温度・湿度を定期的に取得する装置は、一般にデータ・ロガーというカテゴリで様々なものが市販されている
。最もお手軽なモノとしては、一定期間、データを測定器内のメモリに溜め込んでおき、必要に応じてパソコン側にデータを吸い上げるタイプが一般的だろう。しかしこれでは一定期間毎に測定器を回収してデータを吸い上げて・・・という煩雑な作業を一定期間毎に繰り返さなければならない。仕事ならいざ知らず、趣味の領域でそこまでやるつもりは無い
^^;
もう少し高級器になると、リアルタイムでデータを読み出せるようになるが、ネットワーク対応製品は個人で買うには結構お高く、しかも測定制御のための添付ライブラリは
C++ が想定されており、基本的にその道のプロ用という印象。これでは私には敷居が高い。
そこで今回は Tristate 社の PICNIC
ver2 キットを利用することとした。このキットはネットワーク経由でデータを取れる
10bit の A/D コンバータ機能を持ち、しかも HTTP レベルでコントロールが可能というスグレもの。しかもオマケながら標準で温度センサーもついている。これなら特別にセンサー用の追加配線をしなくても各部屋に既に配線してあるネットワーク線がそのまま使えるし、データも
Perl で簡単に取得することができる。また値段も1測定ポイントあたり約\8000と比較的安価。まさに今回のシステムにはぴったりである。
そこで、
(1) 家庭内 Ethernet に PICNIC を複数設置
(2) 1時間毎に 24 時間測定し続ける
(3) Perl + LWP::Agent モジュールでデータを取得
(4) GD モジュールでグラフを作成
(5) NET::FTP モジュールで HP の FTP サーバーにデータを送る
(6) 外気温、外湿度は線の引き込みが面倒なので気象庁・アメダス茨城県のページからデータを取得。(気温は最寄のつくば観測ポイントから、湿度は少し遠いが水戸観測ポイントから取得。もしつくば観測ポイントの気温データが欠落している場合は土浦観測ポイントから気温を取得)
(7) メンテフリー
というシステムにすることとした。早速キットを取り寄せ、システム構築を開始したのであった。
2.試行錯誤
![]() |
#!/usr/bin/perl use LWP::Simple; $html = get ("http://192.168.0.200"); $html =~ />(\d+) Celsius</; print "温度 $1 ℃\n"; # 温度 |
PICNIC2 はこんな感じでブラウザから データの取得と設定が可能(拡大できます) |
たったこれだけで温度データが取れる |
早速キットを製作し、Web ブラウザで温度データを取得してみる(左図)。確かにデータの取得は簡単だったが、しばらく使っているうちに問題点も出てきた。
問題点
(1) 精度が悪い。場合によっては 2〜 3℃の誤差が出る。
(2) 分解能が1℃と低い。気象庁の温度データの分解能が 0.1℃なので、一緒にグラフを描くと見劣りがする
^^;
分解能はまぁ目をつぶるとしても、精度が低いのは痛い。考えてみれば温度センサは10mV/℃で
5V 基準電圧の10bit の A/D変換だから、 1bit = 約0.5℃なわけで、通常 2〜3
ビットは測定値に誤差が出るので精度はどうしても落ちる。一応 A/D 変換の基準電圧を正確な
5V にする等、改良を行ってはみたものの効果は薄く、そのままではやはり限界があるようだ。
そこでネットをいろいろとあさってみたところ、こんなページやこんなページ、こんなページを発見。これらの回路を参考に、早速外付けセンサ回路の製作にとりかかった。
3. ハードウエア
![]() |
![]() |
外部センサ回路。オペアンプは4年ほど LM358N で測定していたが、その後 フルスイング出力が可能な LMV358 に変更 |
配電盤内部からインナーサーキット (左下の穴の先、2階の根太付近)へ センサを設置 |
![]() | |
外部センサ回路 オーソドックスな非反転増幅回路 |
外付けセンサ回路(左図)には 2回路入りオペアンプ LM358N を使用した典型的な非反転増幅回路を採用。温度センサは
LM35DZ、湿度センサは TDK CHS-UGS (測定可能範囲 5〜95% ) を使うこととした。どちらも測定値がリニアでデータ変換がやり易く、しかも完全無調整というメリットがある。湿度センサは
1ケ \2500と結構値が張るが、その使いやすさは換え難い物があり、中村電気から通販で購入。なお、より安価(そのかわり測定範囲は湿度
5〜90% )な CHS-GSS なら千石で \2000 以下で購入可能なので、屋内設置であれば通常は
CHS-GSS で十分であろう。
オペアンプの増幅率は温度センサ、湿度センサとも 4倍とした。これなら各センサの理論上の最大出力電圧が
4V で分解能は 0.122℃、0.122% となり、十分な分解能が得られる。(ただし後述のように、オペアンプによっては出力電圧に制限があるため、必ずしも理論どおりにはならない点に注意)
あとはデータの読み取り方であるが、PICNIC の A/D コンバータは基準電圧が
5V で 10 bit だから 1bit は 5/1024 (V) になる。一方、温度センサの出力電圧は
10mV/℃、湿度センサの出力電圧は 10mV/% であるから、出力電圧 x 100 が温度値、湿度値となるわけで、今回はオペアンプで出力電圧が4倍になっているから、PICNIC
からの値(デジタル変換値)に ( 5 / 1024) * (100/4) = 0.122 をかければ温度値・湿度値が求まる。(なお、厳密に言うならオペアンプの入力オフセット電圧ぶんの補正も必要。LM358N
なら入力オフセット電圧が 2mV であるから、今回のような 10mV/℃ or % の出力を持つセンサであれば、0.2℃or%
のゲタを履いたデータがオペアンプから出てくることになるから、最終的にこれらのゲタを差っ引く必要がある)
実際の調整は HTTP で PICNIC にアクセスしながら RA2、RA3 のセンサ出力と
RA0、RA1 のオペアンプ出力が 4倍になるよう VR を調整する。温度センサーは安定しているので
VR を合わせ易いが、湿度センサは手を近づけただけで値がブレるので根気強く合わせ込む必要がある。なお
10K VR は写真のような多回転タイプが微調整がしやすくお勧め。
ともかく、増幅率を 4倍に合わせて 5台製作。目論見どおり精度が上がり、ほぼ正確な室温が得られるようになった(ちなみに標準の温度センサでは誤差が
2〜3℃もあった)。早速各所にセンサーを設置し測定を開始した。
なお、今回使用した LM358N はフルスイング(出力が電源電圧付近まで出る)タイプではないので、オペアンプ出力電圧の上限は、電源電圧が
5V なら 3.5V 程度になる。すなわち 3.5/4 = 0.875 以上(= 温度なら 87℃、湿度なら
87% 以上)はデータが頭打ちになるはず。基本的にソーラーサーキットの家の内部に設置するなら問題はないと思うが、湿度
90% でもシッカリと測定したい、という場合は LMC662CN や LMV358 のようなフルスイングタイプのオペアンプを使うか、多少分解能を犠牲にしてもオペアンプの増幅率を
3倍程度に抑える必要がある。
4. 帰ってきたウルトラマン ^^;
![]() |
完全スピンドルレス Win95 マシンとして蘇ったウルトラマンPC |
さてセンサー部は完成したが、データを取るには常時稼動なコンピューターが必要となる。基本的にトラブルによるデータの欠落は避けたいので、データ収集用の専用機を1台用意することとした。このデータ収集機に白羽の矢が立ったのが押し入れで眠っていた
IBM PT110、別名「ウルトラマンPC」である。
このウルトラマンPC、CPU i486SX-33MHz、メモリは 4MB 増設して 8MB、標準想定
OS は DOS もしくは Win3.1 と今となってはかなり非力なマシンだが、コンパクトフラッシュからブートできるという反則技を持つことからスピンドルレス、低発熱、しかもノートパソコンであるから小型で無停電電源(電池)まで付いた常時稼動にはうってつけのマシンである。
そこでまず DOS 環境を構築し、SCSI CD-ROM を認識させるようにシステムを構成して256MB
のコンパクトフラッシュに SCSI CD-ROM 経由で Win95 をインストール。CPU が非力なだけに数時間かかって
Win95 のインストールが終了 ^^;。次に 10base-T な古い PCMCIA ネットワークカードをインストール。最後に
Perl のインストールとなるわけだが、Win95 に Perl をインストールするにはいくつか追加プログラムを取ってこなければならないようだ。が、リンク切れを起こしていて必要なプログラムが手に入らず
^^; 。もっとも仮に追加プログラムを取ってきてもこの非力な CPU ではインストールにかなりの時間がかかることが予想されるので、ここはお手軽に別のデスクトップ機にインストールしてある
Perl をディレクトリごと PT110 のコンパクトフラッシュにコピーした ^^;
追記:(2003/9/6)
数週間安定して連続稼働していたためすっかり安心していたところ、9/6 に
OS ごと固まるトラブルが発生。気付くのが遅れたこともあって12時間分のデータを収集しそこねたため
^^;、Win2000 な録画用サーバーでも同じプログラムを走らせてどちらがコケてもデータが必ず取れるようバックアップする体勢に
^^;。更にその後の運用で、Win2000 でも PICNIC からデータ取得中にスクリプトが停止してしまう事例が希に発生。どうやら
PICNIC 側が稀に反応を返さない場合があるらしく、当初使っていた LWP Simple
モジュール内部で処理がコケている模様。そこでタイムアウトを設定可能な LWP
Agent モジュールに変更して回避に成功した。
なお、Win95 は一定時間経過すると OS ごと落ちる有名なバグがあるが、こればっかりは回避不能。落ちていたらマニュアルでリスタートしています
^^;
5. ソフトウエア
Active State の Perl Win32 に
Net::FTP モジュールと LWP::Agent モジュール、グラフ描画用の GD 関連モジュールを仕込めば仕様を満たせる。
まず最初にお手軽にグラフが描ける GDGraph を試してみた。一工夫すれば2バイト文字もちゃんと描けるのだが、1か月分のデータ
(24 x 6 x 31 = 4464 ポイント) を食わせると原因不明のエラーが出てしまう。どうやら描画用のメモリ領域が足りないような雰囲気だが私のスキルでは解決不能だったので(爆)、結局
GD モジュールを使って自前でグラフを描くこととした。まだ2バイト文字を描く方法がわからず
ASCII 文字しか使えないが、一応1ヶ月分のデータでもちゃんとグラフを描ける。2バイト文字が使えないのはイタイが基本的に動いてナンボであろう
^^;
1時間毎にデータを取得するメインルーチンは Win95 に cron に相当する機能が無いので
Perl の sleep 関数で Sleep 値を適宜調整することとした。あとはデータをタブ区切りテキストなファイルにアペンドし、また日と月が変わる際にグラフを描画し、Net::FTP
モジュールで毎日データを自動アップロードさせれば OK。
6. まとめ
というわけで、一応の完成をみたこのシステム、少しづつ改良を重ねながら順調に連続稼動中。測定データのおかげで、ソーラーサーキットの性能を客観的に把握できて大満足。システム自体も比較的安価に、またプログラムをカスタマイズできる自由度の高いシステムになったと自負しています。
将来的にはデータをテキストファイルではなく RDB に入れ込みたいですね。グラフも
Web から好きな期間を入力できるような cgi から描画するとか。仕事で RDB まわりはたくさん書いているので技術的な問題は無いのですが、さすがに
PT110 では非力過ぎて RDB は載せられそうにありません ^^; 別途低発熱な C3
マシンでサーバーでも立てようかな。あるいはお手軽に Perl の Sprite モジュールでも使ってみようかな?
2012/03/08 追記:
![]() |
![]() |
2012/3、温度・湿度測定システムは 新マシンに引き継がれた。 |
新システムでのグラフ。 毎月の温度・湿度のグラフが作成される。 もちろん、グラフは毎日自動更新。 |
2012/1、放射線量モニンタリングシステムの完成に伴い、温湿度モニタリングプログラムも大幅に改良。測定システムは
EPSON Endeavor NP11-V (Windows XP) に移行されることとなった。
思えば 2003/8 の測定システム稼動開始以来、ウルトラマン PC (IBM PT110)
は 8年半もの連続稼動に耐え抜いたことになる @o@。
ありがとう、ウルトラマン PC !
7.追記・湿度センサの寿命について (2003/10/29)
とあるネット談話室(掲示板)で、この温度・湿度自動測定システムに使用している「電気抵抗型」湿度センサに関し、
・低温時(10℃以下)の応答性の悪さ
・高湿度時の精度低下と結露によるセンサの劣化
について指摘を発見。
うちでは外気温・外湿度データは気象庁から取っているので、センサは全て室内設置。おそらく冬場に温度が一番低くなるインナーでも10℃は越えているであろうし、万が一10℃未満となっても1時間毎の測定なので、平衡時間(数十分)から考えても問題はないと思われる。
一方高湿度時は、・・・基本的に結露は打つ手なし・・・ ^^; (温度平衡状態にある物体に自然に結露が起るなら仕方がない)。もっともそんな状況では室内いたるところベタついて、温度・湿度測定などしている場合でなくなりそう・・・
^^;
ともあれ、どのみちセンサは経時劣化するであろうから、問題はどれぐらいで交換すれば良いか、というハナシに。そこでネットを漁ってみると、CHS-UGS
の寿命に関する資料は見つからなかったものの、姉妹品センサの CHS-GSS についての資料を発見。以下はその抜粋。
相対湿度 | 50% | 85% | ||||
温度 | 0℃ | 25℃ | 40℃ | 0℃ | 25℃ | 40℃ |
精度 ± 5% | 144万時間 (164年) |
27万時間 (30年) |
9万時間 (10年) |
32万時間 (36年) |
6万時間 (6.8年) |
2万時間 (2.2年) |
精度 ±10% | 432万時間 (493年) |
81万時間 (92年) |
27万時間 (30年) |
96万時間 (109年) |
18万時間 (20年) |
6万時間 (6.8年) |
これによると一番寿命が短くなる高温・高湿度(40℃、85%)の状態でも2万時間(=2年強)は精度
5% が保たれる。実際の設置状況では温度は35℃程度止まりで、高湿度も夏場の
3ヶ月程度。残りの期間はより長寿命になる低温度・低湿度となるわけで、温度25℃、湿度50%
での寿命が27万時間(=31年弱)であることから考えると、案外10年ぐらいは無交換で使えるのではないかと期待しています。
もちろん、実際の湿度データを見て挙動がおかしくなったら交換するつもりですが
^^;、この温度・湿度測定は「湿度センサの耐久レース」としても案外面白い試みではないかと・・・・
^^;
8. 湿度センサ交換 (2007/9/9 追記)
このシステムも稼動開始から4年が経過したため、センサも含めて再点検してみた。温度データの方は特に問題がなさそうだったが、湿度データはかなり問題がありそうな感触が以前からあったためだ。
具体的には、1F の湿度だけ他のセンサよりも 15〜20% 低い値が出ている点。当初はオペアンプのゲインを再キャリブレーションすれば治るかと思っていたのだが、結局それでは解決できなかった。そこで試しに
1F と 3F のセンサを入れ替えてみた(2007/9/6/20時)。すると問題のセンサは
3F でも 20% 付近を示したので、湿度センサがヘタったものと判断し、新品と交換。
その結果、新品のセンサは 3F では 49% を示した。このセンサの交換の時はインナーは
3F に対して開放してあったので、この 49% の値はインナーの湿度値とほぼ同じであることから信頼できそうである。
となると、もともと 3F で 35% を出力していたセンサも怪しくなってくる。また同時に、同程度の湿度を示していた他のセンサも芋づる式に怪しくなってくるわけで、結局湿度値がまともそうな
2F インナーセンサを除いた合計4台の湿度センサを交換 (2007/9/8 22時〜23時)
することに(1万円近くかかった >< )。その結果、軒並みどのセンサーも新品に交換することで値が10%程度上昇した。
過去の湿度データ遷移から判断するに、徐々に湿度センサの劣化が進んでいたものと思われるが、完全に壊れてしまうわけではないので交換時期の判断が難しい。上記寿命表からすると、一律2年毎に交換してしまうか、あるいはある程度の精度低下(10〜15%)を許容しつつ
3〜4年毎に交換する必要がありそうだ。
9.追記その2 温度・湿度測定モジュールについて (2007/9/5)
昨今はこんなユニットもあるので、USB
ケーブルが延長できる範囲内ならばそこそこ楽にシステムを組めるかもしれない。ただしロギングの部分は自分でプログラムを組まなければならないので、どのみちプログラミングのスキルは必要なのだが・・・。