バッテリーの状態とかみるのに適したI2Cのモジュールが、ストロベリーリナックスというところで売っているのをみつけましたので、買って実験してみました。
私が買ったのは、「INA226 I2Cディジタル電流・電圧・電力計モジュール」の「非絶縁20A」というやつです。他にも3.2A、100A、250A、1000Aの商品もあります。
いずれも電流測定の低抵抗のシャント抵抗の値が違うだけで、見た目はとてもよくにています。
私は最初に3.2Aと20Aを買いましたが、見た目がシャント抵抗の抵抗の刻印が違うだけでした。
おんなじなので、「同じじゃないか、発送を間違ったのではないか」と問い合わせとところ、「よく見てください。別物ですよ」と回答があり、恥ずかしい思いをしました。
買ったままではうまく動作しません。説明書にも書かれていますが、以下が必要です。
(1)サブアドレスを決めるために、A0、A1のGのところに半田を盛って、アドレスを固定します。
(2)ソケットを2つ半田付けします。
(3)I2CのSCLとSDAのところには、それぞれ10KΩでプルアップが必要です。
注意ですが、電圧端子に逆電圧をかけると、一瞬で壊れます。極性間違いには注意がひつようです。わたしは、実は最初に買った2つとも逆電圧で壊してしまいました。
RaspberyPiで値を得るには、以下のようにします。
まず、以下のコマンドで動いているかどうか確認します。
アドレスの、40 がみえれば、まずはOK。
$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
$
12V電源をつないで、電圧を調べてみます。
$ i2cget -y 1 0x40 0x02 w
0xdd24
$
コマンドは、"i2cget" です。
接続バスは 1 なので、"-y 1" のオプションを指定します。
電圧は、2番目なので、0x02 を指定し、16ビットの指定として、wを指定します。
(Arduinoなどでは、同じアドレスからバイトで2回読んで、16ビットにします。)
電圧値として、"0xdd24" が出てきました。
16ビットの値は、バイトの入れ替えをおこなった、0x24dd です。10進数にすると、9437 です。
1 が 1.25 mVなので、9437x1.25=11,796.25、Vに桁を合わせると、11.79625(V)、約12Vです。
電力は、0x03 で得ます。
$ i2cget -y 1 0x40 0x03 w
電流は、0x04 で得ます。
$ i2cget -y 1 0x40 0x04 w
PHPで書くといかのようになります。
// 初期設定: Calibrationレジスタに a00hを書き込み
exec("i2cset -y 1 0x42 0x05 0x000a w");
繰り返し処理
while (1){
$volt = exec("i2cget -y 1 0x42 0x02 w"); // 電圧レジスタの読み込み
$ampare = exec("i2cget -y 1 0x42 0x04 w"); // 電流レジスタの読み込み
$power = exec("i2cget -y 1 0x42 0x03 w"); // 電力レジスタの読み込み
$volt = hexdec(substr($volt,-2).substr($volt,2,2)) * 1.25 / 1000;
$ampare = hexdec(substr($ampare,-2).substr($ampare,2,2));
$power = hexdec(substr($power,-2).substr($power,2,2)) * 0.025;
printf("電圧 %.2f V 電流 %.1f mA 電力 %.2f W\n", $volt, $ampare, $power);
}
以上の情報は、以下のサイトを参考にしました。
http://www.hi-ho.ne.jp/spacelab/archives/tag/ina226/