RaspberryPiで1-Wire防水温度センサを使ってみる

こんにちは、mi2yo4です。あっという間に11月も終わりに近づいてきました。
私事なんですが、この時期は毎年車、バイクの車検やら任意保険の更新でお金が飛んでいきます。とても憂鬱ですorz

さて(気を取り直して)、今日は温度センサーについての調査結果を書いてみようと思います。

1wire_sensor

そもそもの発端

あぐりログサービスを使って頂いている生産者さんから「地温を測りたいんだけどなー」という要求がありまして、早速温度センサーを探してみることにしました。

防水温度センサーに1-Wire温度センサーはどうか

温度、それも地温となるとログBOXで使用している標準のセンサーでは防水の面で対応できなさそうです。
防水の温度センサーを探してみますと、Strawberry Linuxさんで手頃な価格の1-Wire防水温度センサーが販売されています。これはDS18B20という温度センサーを使った物ですね。
DS18B20とRaspberryPiの接続事例ですが、「Raspberry Pi で温度センサ(DS18B20+)を読んでみた」という情報を元にすると、問題なく使用できそうな感じです。

このStrawberry Linuxの防水温度センサーはどうでしょう?と言うことで即注文。数日後には弊社内に届きました。仕事が早いです(^^

しかし、ここまでは良かったのですが、気になる情報を頂きました。

「ケーブル付きセンサは、2線式となっている場合が多いです。その場合、Linuxでは簡単には使えません。」

Oh…このセンサーは2線式のようですよorz

やはりこちらを買っておくべきだったか…
しかし、もう購入したので無駄にする訳にも行きません。このセンサーで行ける所まで行ってみます。

DS18B20の結線方式

ここでDS18B20について調べてみた事を書いてみましょう。
Temperature Sensing using DS18B20 Digital Sensorsを見てみると大体判るのですが、DS18B20の接続方法は二通りあります。

  • VDD(電源電圧),OUT(信号出力),GND(グラウンド)を使った3線式
  • OUT(信号出力),GND(グラウンド)を使った2線式

今回の1-Wire防水温度センサーは後者の2線式となっています。OUTとGNDだけで動作するのかいな…と思っていましたが、OUTとVDDを兼用しているのですね。その分線数が少なくなるのでコスト的には下がるのでしょう。

3線式は「Normal Mode」、2線式は「Parasite Mode」と呼ばれているようです。VDD(電源電圧)線をOUT(信号出力)線に寄生させている、という意味なんでしょうね。洒落た名称をつけおるわぃ…

RaspberryPiでDS18B20をこのParasite Modeで動作させたい、という情報は日本語ではあまり無かったのです。
が、英語であればどのようにすれば良いか回答がありましたのでこちらが参考になると思います。

結線とRaspberryPi側の準備

ハードウェア的な結線は以下のようになります。今のところGPIO4固定でないと上手く動作しないという情報があったので、GPIO4で結線しています(ひょっとしたら動くかもしれませんがこちらでは確認していません)。

  • RaspberryPiの5VとGPIO4を4.7kΩの抵抗で配線する。
  • GPIO4と1-WireセンサーのOUT線、お互いのGND線を結ぶ

ソフトウェア的には、/etc/modulesに以下の設定を追加します。pullup=1,strong_pullup=1というオプションがParasite Modeにおける設定のミソとなります。Normal Modeであればこのオプションは不要となりますね。

w1-gpio pullup=1
w1-therm strong_pullup=1

RaspberryPiを再起動後、実際に計測してみます。
計測値はこちらのblogの内容が詳しいですが、/sys/bus/w1/(Device ID)/w1_slaveに出力されます。先ほどのページのサンプルプログラムもDEVIDを実際のものに合わせて使えばすぐに温度が測れると思います。

実際に計測してみた感想

soiltemper

実際にログBOXに接続、ソフトも少し改造してから地温を測ってみました。上記のグラフで大体2~3℃の違いがありますが、これは設置位置の違いが影響していると思います。
ログBOXを室内に吊り下げて、地温センサーは更にその1m強ほど下に置いてあります。これだけの距離ですが温度は結構違うものなんですね~。

地温センサーと同じ位置におんどとりを設置してみましたが、その温度とはほぼ一緒になります。なので、精度的にも問題なさそうです。
ただ、温度変化については結構動きが鈍いように感じました。おんどとりでは即座に温度が変わりますが、DS18B20の場合はジワーっと変わる感じですね。
なので、地温などの温度が変化しにくいものを計測するのであれば十分使い物になるのでは?という結論です。

あと、気になる点としては時々計測が失敗するようで、その場合は計測値が85℃以上を指し示します。今回は単純に85℃以上の計測値は無視するようにしました。

この防水センサー、安価に使えるパーツと言うことで、後日正式にログBOXのオプションとして発売しようかなと思っています。
またあぐりログFacebookページでも進捗状況を書いていこうと思いますのでアカウントを持っている方は「いいね!」を宜しくお願いします。

(2015/6/8 最近のOSのバージョンの場合はこちらも参考にして下さい)

追記

正式にこのセンサーをオプションとしたあぐりログサービスにつきまして、

「あぐりログは温室のモニタリングサービスです」

というページを立ち上げました。こちらもご覧になってみて下さい。