Linuxボードで温度を測る。
CPU温度を測れる Linux の場合は
1 |
cat /sys/class/thermal/thermal_zone0/temp |
の値を 1/1000 すればいい。
ちなみに、うちの Raspberry Pi は、ヒートシンク追加、専用ケースにハウジングした条件で 57.3℃。
Intel Galileo は、むき身にヒートシンクを乗せただけ(貼ってはいない)の状態で 63℃。
Beaglebone Black はCPU温度は測れないけれど、ヒートシンクをつけてケースに入れた状態で触ったらちょっとあったかいレベルだった。
Raspberry Pi はUSBコネクタに熱が回り込んで、刺した Wifiドングルも熱くなっていた。
常時動かすなら Beaglebone Black に軍配かな?今や入手困難だけれど。(新しく Rev.C が出ました。)
こうなってくると NEST の様に室温を測って管理したくなってきたな。
アナログI/Oがあるマシン(BBBなど)
BeagleBone Blackなどの PWM I/Oがあってアナログ値を取得できる場合。
よく使われる温度センサは LM35DZ(0~100℃) とか LM61BIZ(-25~85℃) とか LM61CIZ(-30~100℃) だけど、部屋はマイナスになりえるから使うなら LM61BIZ かな?
(Raspberry Piは GOIOしか使えないので、上のは使えない。「DS18B20」などの1-Wireというのを使用する。)
ちなみに取得値から温度を取るには計算が必要。
ここら辺も参考に。実際はコンデンサも必要かな?
というわけで
秋月電子で LM61BIZ が見当たらなかったので LM61CIZ (4個入り 200円)を買ってきた。
Beaglebone Black に以下で結線
1 2 3 |
Vs --- VDD-3V3(P9.4) Vout --- AIN1 (P9.40) GND --- GND-ADC(P9.34) |
Debian なので、1行目を実行すれば2行目で値が取得できる。
1 |
echo cape-bone-iio > /sys/devices/bone_capemgr.*/slotscat /sys/devices/ocp.*/helper.*/AIN1 |
863 とかの値が帰ってくるから (value – 600) /10.0 が温度っていうことで良いのかな?
データシートの表から見ると、上の計算式であっているんだよな。他のサイトを見ると計算式違うようだけど・・・。
追記:以前は12ビットの値がそのまま出力されていたが、現時点ではミリボルト単位で出力されるようになっているらしい。なので上のでOK。自分で変換する必要はない。
温度計のインターフェースも作ってみた。温度計を作る 習作1 Ajax版
取った値でグラフも書いてみた。温度計を作る 習作2 グラフ
残り3個も早くどこかに使わないと。
この前、ちょっと触ったら、温度センサーが抜けかかっていて、108℃とかの温度が出力されていた。
へー!、こんなになるんだね。グッっと挿しなおしたら元に戻りました。
ジャンパーピンに直接 温度センサーを挿すのではなく、ブレッドボードかはんだ付けしないとだめだね(^^;
Raspberry Pi とか
I2CとかSPIとかのインターフェースを使って値を取得するのが一般的。
raspberry pi で I2C を有効にするにはいくつか方法があるけれど
raspi-config → 8 Advanced Options → A7 I2C → Would you like the ARM I2C interface to be enabled? <はい> → <了解>
→ Would you like the I2C kernel module to be loaded by default? <はい> で有効にしておくのが簡単。
2017/02
raspi-config → 5 Interfacing Options → P5 I2C → Would you like the ARM I2C interface to be enabled? <はい> → <了解>
コマンドラインからの lsmod で i2c_bcm2708 が表示されればロードされている。
apt-get install i2c-tools で i2c-tools をインストール。
i2cdetect -y 1 とかで i2c デバイスが接続されていれば、情報が表示される。