Raspberry Piに温度センサを接続してみました。
今回接続をしたのは、「DS18B20」という型式の温度センサです。
屋外の気温を測れればと思い防水タイプのものを選びました。
このセンサはMaxim Integrated製(型式からすると旧Dallas Semiconductorの製品だったのでしょう)です。
このDS18B20は-55℃~125℃を計測出来、-10℃~85℃の範囲で±0.5℃の精度があります。電源電圧は3.0Vから5.5Vです。インターフェースは独自の1-Wire®です。
正確にはDS18B20は製造終了でDS18B20+に移行していく様です。プラスの有無の違いはデータシートに記載がありませんでした。
Maxim的型式にMAX31820があります。ソフトウェア互換があり徐々にこちらに代わっていくのでしょう。(精度は少し劣ります。10℃~45℃の範囲で±0.5℃の精度です。)
接続は7番ピン(GPIO4)に接続します。カーネルモジュールのソフトウェアの制限のため接続ピンは変更できません。
Raspbianは1-Wireで通信するソフトウェアを持っています。
$ sudo modprobe w1-gpio
でカーネルモジュールをロードします。
$ sudo modprobe w1-therm
cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
で接続しているデバイス(温度計)の固有番号が表示されます。
このコードは8bitsのファミリーコードと48bitsのシリアルナンバーから構成されています。
DS18B20の場合ファミリーコードは28Hexとなります。
cat /sys/bus/w1/devices/28-xxxxxxxxxxxx/w1_slave
(28-xxxxxxxxxxxxは上のコマンド実行で得られた結果)
を実行すると温度を含む結果が得られます。
4a 00 4b 46 7f ff 06 10 ca : crc=ca YES
4a 00 4b 46 7f ff 06 10 ca t=4625
t=以下の数字を1000で割ると実温度となります。
上記の例の場合4.625℃を表しています。
このセンサの値を10分毎に記録してみました。
結果はあまり良くありませんでした。
データを取得できない場合があり、欠測が発生しました。(一日144回データが取得されますが一日約10回ほど欠測しました)
プログラムはリトライを最大10回行うようにしていますが、それ以前に時々センサと通信出来ない状況が発生しているのかもしれません。
実験的に使用するならば問題はにかもしれませんが、定期的に記録し続ける用途には今のままでは適さないようです。
自分で1-Wire用のソフトウェアを書けば良いのでしょうが1-Wireの通信の仕組みはちょっと複雑です。物理的な接続は簡単ですがマルチドロップ可能な仕組みがソフトウェアを複雑にしています。1-Wireがシリアルバスとしてあまり広く広がらなかったのはそんな理由があるのかもしれません。
初めまして。
DS18B20で検索していて、拝見致しました。
一昨日、秋月電子通商で購入した際に確認したところ、DS18B20+は、RoHS指定対象の鉛フリー対応品との事でした。
御参考迄。