2016年11月10日木曜日

Orange Pi PC で LM75Aを使い温度計測 その2

さて、仮組みをしたはいいものの問題が発生している LM75A温度センサーの動作について引き続き検証をしてみます。

考えられる理由として

  1. はんだ付けがまずく、接触不良を起こしている。
  2. LM75A温度センサーのモジュールが壊れている。
  3. なにかとバッティングしている。

を考えてみました。

  1. はんだ付けは、ブレッドボードに装着後テスターで導通チェックするも問題は無さそう。
  2. モジュールに関しては、i2cdetect で何かあるため生きていると仮定。
  3. バッティングですかね?

と当たりを付けチェックしてみることにしました。

$ sudo ls /sys/class/i2c-adapter/i2c-0/
0-0048  delete_device  i2c-dev  new_device  subsystem
0-0077  device         name     power       uevent

なにやら 0-0048 と怪しげ(?)なディレクトリがあるではないですか。0-0048 の中身をのぞいてみると

$ sudo ls -l /sys/class/i2c-adapter/i2c-0/0-0048/
合計 0
lrwxrwxrwx 1 root root    0 11月 10 15:01 driver -> ../../../../../bus/i2c/drivers/pcf8591
drwxr-xr-x 3 root root    0 11月 10 12:45 hwmon
-r--r--r-- 1 root root 4096 11月 10 12:45 in0_input
-r--r--r-- 1 root root 4096 11月 10 12:45 in1_input
-r--r--r-- 1 root root 4096 11月 10 12:45 in2_input
-r--r--r-- 1 root root 4096 11月 10 12:45 in3_input
-r--r--r-- 1 root root 4096 11月 10 15:01 modalias
-r--r--r-- 1 root root 4096 11月 10 12:45 name
-rw-r--r-- 1 root root 4096 11月 10 15:01 out0_enable
-rw-r--r-- 1 root root 4096 11月 10 15:01 out0_output
drwxr-xr-x 2 root root    0 11月 10 12:45 power
lrwxrwxrwx 1 root root    0 11月 10 12:45 subsystem -> ../../../../../bus/i2c
-rw-r--r-- 1 root root 4096  1月  1  1970 uevent

driver が pcf8591 にシンボリックリンクされています。lsmod で確認してみると pcf8591 がロードされていました。

$ lsmod
Module                  Size  Used by
sunxi_cir               1601  0
bmp085                  3487  0
pcf8591                 3363  0
gpio_sunxi              8269  0
8189es               1076034  0

pcf8591 ってなに? グーグル先生に聞いてみることにしました。AD/DAコンバータのようです、しかも悪いことにデフォルトで使われるアドレスが 0x48 です。LM75A温度センサー上にもコンバータがあるのでロードされているのでしょうか?

LM75A温度センサーのGNDのいずれかをパターンカット、A0~A2をVCCに10KΩでプルアップしアドレス変更って手もありますが、取りあえず rmmod で pcf8591 をアンロードし、i2cdetect → i2cget を実行してみました。

$ sudo rmmod pcf8591

$ sudo lsmod
Module                  Size  Used by
sunxi_cir               1601  0
bmp085                  3487  0
gpio_sunxi              8269  0
8189es               1076034  0

$ sudo i2cdetect -y 0
     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: -- -- -- -- -- -- -- --

$ sudo i2cget -y 0 0x48 0x00 w
0xa014

おお、LM75A温度センサーを認識し、値も読み出せるではないですか。後は読み出した Hex の値を変換すれば良さそうです。

その前に、再起動をすると pcf8591 がロードされ読み出せない状態に陥ってしまうのでブラックリストのファイルを編集しておきましょう。最下行にでも  blacklist pcf8591 を追記しておいてください。

$ sudo vi /etc/modprobe.d/fbdev-blacklist.conf

Hex値の変換ですが、こちらのサイトを参考にして実行しました。スクリプト中の awk文は少々長いので、引用で使われている方を使うことにしました。

$ sudo i2cget -y 0 0x48 0x00 w | awk '{print(("0x"substr($1,5,2)substr($1,3,1))*0.0625)}'
20.625

おお、摂氏変換も上手くいっているようです。20.625℃のようです。

LM75A温度センサーの精度確認もしてみました。卓上の温度計付き目覚まし時計との比較ですが、

LM75A:20.9℃
時計 :20.8℃

ほぼ同じです。温度計目覚まし時計が正確かっていうと何の保証もないんですけど(笑) 大幅に違うことがないことが確認できれば ok です。

後は MRTG で室温とCPU温度を計測するようにしてみます。

0 件のコメント:

コメントを投稿