1-Wire 水温センサーを使ってみる

最近 水温を計測したい という声をよく聞くので、私のおすすめの水温センサーを紹介します。

妙楽堂電子さんで販売されている DS18B20 デジタル温度センサモジュール です。

1-Wire という 1本の線で通信と電力供給をする MAXIM の開発した通信方式です。
1-Wire という名前ですが、GNDは必要なので最小2本は必要です。

写真からわかるように これは更にVCCの線を追加した3本線になっています。
VCCは必須ではなく、通信線のプルアップ電力で動作させたり、場合によってはプルアップと別に一時的に電圧をかけて電力をブーストさせたりすることも可能です。

DS18B20 は 高精度な温度の測定をする場合は電力ブーストが必要になりますが、VCCを専用に引っ張ることで、AD変換完了時に通信線で通知を受け取ることが可能になります。

また、1-Wire はすべてのデバイスが固有のシリアルアドレスを持っているため、同じバスに複数のスレーブをぶら下げることができます。
I2C だと信号線を2本使う上に、同じデバイスを複数つなげるには制約が多かったりするため、測定ポイントが多くなりそうな水温センサーにはうってつけですね。

1-Wire の詳細は MAXIM がPDFを公開しています。
http://japan.maximintegrated.com/products/1-wire/pdfs/what_is_1-wire_jp.pdf

さて、1-Wire はArduinoでも簡単に使うことができます。

すでに有志の方がライブラリを公開してくださっており、サンプルスケッチがこのセンサーでもそのまま動作します。

PJRCさんのサイト
http://www.pjrc.com/teensy/td_libs_OneWire.html

とても見やすいWEBページで助かります。

一番上の OneWire.zip から一式ダウンロードし、MyDocument の Arduino フォルダに入れれば、サンプルスケッチが動かせます。

今回は、 WS Logger Sheld に接続して使ってみることにします。

WS Logger Sheld の A0 の3Pin コネクタはちょうど左から VCC, A0, GND となっています。
コネクタなしで線を直結させても動作しますが、取り外しができないのは厄介なので、ここに MOLEX の 5051 を取り付けます。
また、VCC と A0 の間に プルアップ抵抗もつけておきましょう。
チップ抵抗はちょっと難易度が高いかもしれませんが、 普通のアキシャルリードの抵抗でOKです。

プルアップ抵抗が必要なので、VCCとA0 の間に5.1KΩを入れた
プルアップ抵抗が必要なので、VCCとA0 の間に5.1KΩを入れた

抵抗値は 今回は手元にあった5.1KΩを使いましたが、4.7KΩくらいが適正のようです。

対するセンサーの方は端子をかしめてハウジングに突っ込みます。

圧着する
圧着する

圧着には専用の工具が必要です。
圧着工具には種類が幾つもあり、電子工作で信号線を扱うには M型(というのか正式名称はわかりませんが) の圧着工具が1つあると便利です。

向きを間違えないようにハウジングに入れる
向きを間違えないようにハウジングに入れる

順番を間違えないようにハウジングに差し込みます。
一度差し込むと 返しが付いているので簡単には抜けません。

完成
完成

これで完成です。

接続して、サンプルスケッチを動かしてみます。

Arduino を起動して、 スケッチの例>OneWire>DS18x20_Temperature を開きます。
上から10行目の

OneWire ds(10); // on pin 10 ( a 4.7K resistor is necessary)

と書いてある10のところを 14 か A0 に変更します。
これは接続してある場所を指します。

このままスケッチを書き込み、シリアルコンソールを開くと、検索して見つかった 1-Wire のスレーブアドレスと、 温度センサーの値が 摂氏と華氏 で表示されます。

簡単で便利ですね。

コメントを残す