つれづれなるまゝに

単なる作業メモ。主に、Linux, arduino, raspberry piとか?

raspberry piで温度計測(TMP102)

2013-09-22 21:40:07 | raspberry pi
さて、次はraspberry piにTMP102を繋いでみます。

1) I2Cデバイスを扱えるようにする

ここを参考にさせていただきました。

1.1) /etc/modulesに以下一行を追加

i2c-dev

1.2) /etc/modprobe.d/raspi-blacklist.confで以下一行をコメントアウト

blacklist i2c-bcm2708

1.3) 再起動

1.4) 以下にてモジュールが組み込まれていることを確認

$ dmsg | grep i2c

1.5) i2cツールのインストール

$ sudo apt-get install i2c-tools


2) TMP102の接続

2.1) Revの確認

Rev1とRev2ではGPIOピンの配列が若干違うため、念のために確認しておく。確認方法は、ここここを参考にした。

私のは、ねじ止めの穴が開いてることから、Rev2であることが確認できた。またメモリが512MBなので、Rev2確定。

ちなみにcpuinfoは、

Hardware : BCM2708
Revision : 000d

でした。

2.2) ピン接続

ここや本を参考にピン配置を確認。
ちなみにワイヤーはArduinoがオス-オスに対して、raspberry piはメス-オス。同じなら出費が減らせたのだが。。。

あと、GPIOはSoCに直結とのことで、静電気には注意が必要と聞いているので、金属物にタッチ。

こんな感じ?



3) 動作確認

再度起動後、動作確認。またまた、ここを参考にさせていただいてます。

3.1) i2cレベルでの動作確認

pi@raspberrypi:~$ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

ちゃんと0x48と出ています。

ここで1点補足。参考元のサイトでは、コマンドが"sudo i2cdetect 0"となっています。
最初はそのままコマンド打ってみたところ、アドレスが表示されず、接続間違えた?と焦りました。

i2cdetect -hでヘルプをみたことろ、-lというオプションを見つけたので打ってみる。

pi@raspberrypi:~$ sudo i2cdetect -l
i2c-0 i2c bcm2708_i2c.0 I2C adapter
i2c-1 i2c bcm2708_i2c.1 I2C adapter

あぁ、I2Cが2つあるのに気付く。手元の本でピン配列を再度確認すると、接続してるのはi2c-1の方でした。
ちなみにRev1では両方ともi2c-0でした。

3.2) 値取得

参考先のシェルスクリプトを使用させていただきました。
ここでも注意。アドレスが 0x49 -> 0x48、i2cが 0 -> 1 なので、i2cgetのパラメータは以下になります。

sudo i2cget -y 1 0x48 0x00 w

2行あるので変更忘れずに。

pi@raspberrypi:~$ ./tmp102.sh
30.5625

値がとれました :-)

本日は、以上!

arduinoで温度計測(TMP102)

2013-09-22 11:21:04 | arduino
サーバ構築から一転、今日はarduino UNO R3から温度センサー(TMP102)をI2Cで使ってみることにした。

1) はんだ付け

ブレッドボードで試すので、TMP102にピンをはんだ付け。久しぶりのはんだ付けで緊張したw

2) 配線

こちらの動画を参考。0:46あたりで、図での説明があり、わかりやすい。

まとめておくと、

SCL -> ANALOG IN A5
SDA -> ANALOG IN A4
GND -> GND
V+ -> 3.3V

ADD0 -> GND
※ADD0の接続先でIC2のアドレスが変わるので注意。こちらを参考
GNDなら0x48


こんな感じになりました。


3) スケッチ

こちらを参考にさせてもらいました。

注意点は、先ほど書いたアドレス。参考にしたサイトでは、0x49になってます。私はGNDにつないだので0x48に変更。
最初、ここがわからず動かなくて焦りました。


4) 結果

tmp(HEX)=1E4 tmpin(DEC)=484 tmp C=30.25
tmp(HEX)=1E5 tmpin(DEC)=485 tmp C=30.31
tmp(HEX)=1E4 tmpin(DEC)=484 tmp C=30.25
tmp(HEX)=1E4 tmpin(DEC)=484 tmp C=30.25
tmp(HEX)=1E4 tmpin(DEC)=484 tmp C=30.25
tmp(HEX)=1E4 tmpin(DEC)=484 tmp C=30.25
tmp(HEX)=1E4 tmpin(DEC)=484 tmp C=30.25
tmp(HEX)=1E5 tmpin(DEC)=485 tmp C=30.31
tmp(HEX)=1E5 tmpin(DEC)=485 tmp C=30.31
tmp(HEX)=1E5 tmpin(DEC)=485 tmp C=30.31
 ・・・

エアコンの室内温度みると29°となっていたので大体あってるかなと。
あまり数値が動かないので息をかけたりしてみて温度に変化があるか確かめたりしました。^^;

と、ここまでで1時間程度。
arduino + ブレッドボードは初めてだったのですが、聞いてた通り簡単でした。

5) 今後

次は湿度計つけてみたいなと。
あと、xbee+SDのシールドは買ってあるので、家の中の温度湿度を観測してみようかと思っています。
xbeeはまだ買ってないので、先にSDに値を蓄積させるのを作ろうかなぁ。