May 07, 2009
デジタルシリアル出力の温度センサ DS18B20 [computer]
PCなどに接続して使う目的で温度センサを色々検討していた。 従来LM35などの温度をアナログの電圧に変換するセンサとA/Dコンバータを組み合わせるスタイルが多かったが、今はIC化したセンサにA/Dコンバータも内蔵してシリアルのデジタル出力が得られるものも多い。
よく使われるものはPCのマザーボード上の温度測定で比較的よく知られているLM75。 これは2線式インターフェース(データ線が2本。通常別に電源ラインが必要)のI2Cインターフェースが使用されている。
Web上で検索するとMAXIMのDS18S20を使った例がいくつか見つかった。これは1線式の1-Wireインターフェースを利用するもので比較的安価で精度が高いらしい。 MAXIMのサイトにはスペックからICの品種候補を出してくれるページがありこちらで調べてみるとDS18B20というものもあるらしい。 簡単にまとめるとこんな感じ。
型番 | インターフェース | 精度 | 分解能 | パッケージ |
---|---|---|---|---|
LM75 | I2C (同期2線式バス) | ±2℃(-25℃〜100℃ 最大) | 0.5℃(9bit出力:LSB=0.5℃) | SOP (8pin 1.27mmピッチフラット) |
DS18B20 | 1-Wire (非同期1線式バス) | ±0.5℃ (-10℃〜85℃ 最大) | 0.0625℃ (12bit出力時 9〜12bit出力) | TO-92 (3pin) |
DS18S20 | 1-Wire (非同期1線式バス) | ±0.5℃ (-10℃〜85℃ 最大) | 0.5℃ (9bit出力:LSB=0.5℃) | TO-92 (3pin) |
精度については個々のセンサのばらつき以外に温度範囲の中での校正誤差が含まれる。 つまり温度の上限(例えばLM75では100℃近辺)、下限では比較的誤差が大きい。
I2Cバスはホスト→センサ方向のデータ線とセンサ→ホスト方向のデータ線が別で同期バスで通信速度は速い(ノーマルモードで100kbps、最大3.4Mbpsの仕様もある)。1-Wireの場合は1本の線を両方の方向の通信に用い、非同期通信を行う。制御がやや複雑で通信速度は遅い(1bit送るのに少なくとも60μSかかる=16kbps程度。最大142kbpsの仕様もあるがDS18B20のデータシートには記載はない)。 温度測定の場合は扱うデータの量が少ないため通信速度が遅くてもあまり問題にはならない。
DS18B20とDS18S20は外見上もソフト的にもほとんど同じ。値段も1個数百円で大して違わない(MAXIMから直接1000個以上で購入した場合DS18B20の方が安い)。
どうせ使うならDS18B20の方がよいだろう。試しに3個ほど買ってみた。 ちなみに秋葉原のパーツショップでは置いてある所は見つからないので通販を利用した。 最近の傾向として電子部品は標準品やカタログ/web等で確認できるもの以外は通販を使った方が便利。
1-WireやDS18B20/DS18S20についてはWeb上で検索すればそれなりに情報は出てくる。 時期的な関係なのか9bit固定出力のDS18S20の方が使用例は多い。 また、MAXIMのサイトには詳細な情報とサンプルプログラムが置いてあるので参考になる。
書籍ではCQ出版より
「マイコンの1線2線3線インターフェース活用入門」(ISBN978-4-7898-4208-2: 2800円)
が出ていて1-Wire/I2CやDS18S20についての詳しい解説がある。
これは実際にある程度プログラムを動かしてからだが、人に説明する必要もあって買った。
サンプルプログラムもCQ出版のサイトから入手できる。ただしターゲットはPICやH8なので...まあ1-Wireに関する限り普通のPCよりもH8あたりの方が扱いやすいかもしれない。
blosxom 2.0
and
modified by
blosxom starter kit