Espruinoで温度を測る


Espruinoにセンサーを繋いで、自然界の情報を可視化してみます。今回は温度センサです。利用するセンサー等は公式で紹介されているやり方を踏襲します。

調達

  • 温度センサ DS18B20
  • 抵抗 4.7kΩ

抵抗は秋葉原の千石電商さんB1Fにて調達しましょう。
温度センサは2タイプあり、ケーブルタイプ(防水タイプ)のものと、普通のパーツっぽいやつ(何タイプって言うんでしょう?)です。

ケーブルタイプ(防水のやつ)

ケーブルの先についている金属部で温度を測ります。防水らしいです。各端子は黒:GND, 白:Data, 赤:電源となっています。コチラ(Aitendoさん) から調達可能です。秋葉原に直販店があるのでそちらで購入する事もできます。

普通のやつ

文字が書いてある方を上にして、左から GND,Data,電源です。コチラにスペックを日本語訳してくれた方がいらっしゃいます。コチラ(秋月電子さん)から調達可能です。秋葉原のお店で買いました。

配線

下図のとおり配線します。ポイントは温度センサの電源端子とData端子を抵抗で繋ぐことです。

防水のやつの場合は下準備が必要

どちらのタイプも3つの端子があるのですが、ケーブルタイプ(防水タイプ)の場合はそのままだとブレッドボード等に差し込みにくいので、オスタイプのワイヤと繋げてしまうと良いと思います。

はさみか何かでワイヤを真ん中で切断し、被覆をはがして導線をむき出しにします。導線を木津付けないよう、被覆の部分のみを薄くカット(切り込みを入れる)して、引っ張ると写真のようになります。

カットしたワイヤーとセンサーの端子を繋ぎます。繋いだ後はショート防止のため、テープ等で保護しておくとよいでしょう。

これで物理的な準備は完了。

プログラム

下記プログラムをWebIDEで流し込むと、1秒毎に温度が表示されます。ただし、EspruinoはUSBで繋がっていて、PCがネットに接続されている必要があります(後述)

// センサーモジュールをセットアップ
var ow = new OneWire(A1);
var sensor = require("DS18B20").connect(ow);
// 1秒ごとに温度を表示
setInterval(function() {
  // getTemp メソッドで温度を取得
  console.log(sensor.getTemp());
}, 1000);

本来温度センサからの入力は電圧値であるため、直接温度をとる事ができません。温度値をとるためには、電圧の値から温度値へ変換するプログラムを記述する必要があります。しかし上記プログラムでは、そのような処理が記述されておらず、getTempメソッドで直接温度を取得する事ができます。
このように、Espruinoは色々なセンサーでバイスに対応したプログラムをモジュールとして提供していて、ハード固有の変換式のような部分を隠蔽してくれていますので、ハード触るのが初めて、、という方でも取っ付き易いしくみが用意されています。
ただしこのモジュール、モノによってはEspruinoに組み込みではなく、ネットからつどDLしてくるものもあります。DS18B20もその一つなので今回はネットに繋がっていることが前提条件になります。SDカードにモジュールを記録しておけば読み出してくれる、、、的な事もあるのですが、今回は割愛。

温度が表示されました。
センサーを指で握ってみると、温度が上昇しているのが分かります。

まとめ:次回予告

  • こんな具合なモジュールが公式でいくつか用意されているので、結構楽です。
  • 次は、、wifiかな。。。?