最近 水温を計測したい という声をよく聞くので、私のおすすめの水温センサーを紹介します。
妙楽堂電子さんで販売されている 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です。
抵抗値は 今回は手元にあった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 のスレーブアドレスと、 温度センサーの値が 摂氏と華氏 で表示されます。
簡単で便利ですね。