[RaspberryPi] 外部IO端子コントロール #2 温度センサー(DS18B20)

2016年4月2日

IoT RaspberryPi Tips テクノロジー 日記

ラズパイでセンサー活用をしようと思い、OSOYOO製品の「ベスト センサーモジュール キット 20種セット」を購入。 そして中身がこちら

センサー調査

とりあえず扱いやすそうな温度センサーをラズパイでデータ取得してみたいと思い、 操作手順などをメモしておくことにしました。 今回使うセンサーは「DS18B20」で、納品されたモジュールはすでに基盤に設置された物だったんですが、本来は裸で売られているようです。 秋月電子通商のWEBサイトで確認してみた所、1個350円で販売されていますね。 秋月電子通商「デジタル温度センサ(1wire)DS18B20+」 数が欲しくなったらまとめ買いも可能な値段ですね。

温度センサーの取り扱い説明webページ

同じ温度センサーで設定をWEBページにまとめてくれている先人もいるので、 有り難く参考にさせていただこう。 OSOYOO「DS18B20 temperature sensor module」 購入したモジュールの本家サイトでの説明ページです。 IT女子のラズベリーパイ入門奮闘記「第18回「ラズベリーパイで手作り温度計!」」 写真と大きな画像で説明してくれていて非常に分かりやすかったです。 Raspberry Piブログ「[コラム] 第9回『1-wire温度センサーで部屋の温度を測定しよう』」 とりあえず、このようなページの通りやればなんとかなるだろうという甘い考えでトライ!

Try & Error

とりあえず、日本語ページを参考に配線してみた。 このOSOYOOの基盤では何故か、3本足の順番を入れ替えてOUTPUTされているので、 ややこしくならないように、ブレッドボードで順番を元に戻すように、工夫してます。 あと、サイトで書かれているように抵抗と電源とGNDも繋いで、ラズパイを立ち上げた所、 基盤のランプは赤く光るんですが、どうもうまくいかない。 後で気がついたんですが、このOSOYOO基盤にはすでに抵抗などがセットされているようで、 配線だけ繋げれば動作するようになってたんですね。 なので、電源とGND接続線もカット、抵抗もカットした所、うまく動作しました。 ランプは、温度取得の際に点滅する仕様らしいです。 ※1秒おきぐらいにチカチカすれば成功という事ですね。 さらに、配線を簡単にすると以下のようになります。 写真だと分かりにくいので図に書いておきます。 ※今回はModel B+を使っているので40PINですが、他のPIN構成の場合は、ラズパイのPIN仕様を見て判断してください。

ラズパイの設定

ここは説明サイトに書かれている通り、下記の操作でうまく値を取得できました。 ちなみに、今回はGPIO4番のピンを使って値を取得する配線になります。

1. モジュール設定に下記を追記

$ sudo vi /etc/modules w1-gpio w1-therm

2. bootのconfigに以下を追記

$ sudo vi /boot/config.txt dtoverlay=w1-gpio-pullup,gpiopin=4

3. OSの再起動

$ sudo reboot

4. データ確認

$ ls /sys/bus/w1/devices/ 28-00000***** w1_bus_master1 $ cat /sys/bus/w1/devices/28-00000*****/w1_slave 8c 01 4b 46 7f ff 04 10 2e : crc=2e YES 8c 01 4b 46 7f ff 04 10 2e t=25750 上記の様にt=***の箇所が温度になります。 この場合は摂氏25.75度という事ですね。 この後の再起動後は、3番までは不要で4番の工程で行います。

ログのリアルタイム確認をする

$ watch -n 1 "cat /sys/bus/w1/devices/28-00000*****/w1_slave" 上記コマンドを叩くことで、画面にリアルタイム(1秒毎)に温度が変更されるようになります。

今後の事を考える

web表示するにはNodeJS連動だが、今回は手順は省きます。 このセンサーを使ったアイデア ・部屋の温度をロギングして1日の温度の流れを可視化するツール ・温度が30度を超えると、部屋のエアコンのリモコンを赤外線でコントロールする ・サーバーエリアの温度を計測して、高負荷サーバーの時の熱暴走検知システムを構築