2016年の物欲その11「INA226 I2Cデジタル電流・電圧・電力計モジュール」を使ってRaspberry Piで測定してみた
カテゴリー:Beaglebone・Raspberry Pi(記事数:42)

2016/02/20

2016年の物欲その11「INA226 I2Cデジタル電流・電圧・電力計モジュール」を使ってRaspberry Piで測定してみた


購入したのは↓I2C接続で電圧&電流測定出来るINA226というチップを使いやすいようにモジュール化したものです。電圧は0〜36Vまで、電流は±20Aまで測定出来ます。

↓データシート23ページに情報がありますが8か所のアドレス設置部分を2か所ハンダ付けしてショートさせることでI2Cアドレスを0x40〜0x4Fまで選べます、今回は0x41に設定しました。↓i2cdetectで確認。


実際に測定してみました。とりあえずこの前にRaspberry PiでLEDを点灯させてみたのを流用して下記のような回路にしました。↓

ちなみに回路は下記のフリーソフトで作っています。


細かいことはよく分かりませんがこのチップは電圧は直接測定して、電流はモジュール内に配置してある0.002Ωの抵抗の電圧を測定することでオームの法則を利用して電流を算出しているみたいです。そのため使用する時にこの抵抗に応じた数値を入力してやる必要があります。下記にLEDをON、OFFして電流と電圧を測定するPythonのスクリプトを示します。
import RPi.GPIO as GPIO
import time
import commands
#電圧測定部分の関数
def GetV():
 check = commands.getoutput("i2cget -y 1 0x41 0x02 w")
 return (int(check[4:6],16)*256+int(check[2:4],16))*1.25/1000
#電流測定部分の関数
def GetA():
 check = commands.getoutput("i2cget -y 1 0x41 0x04 w")
 if int(check[4:6],16)<128:
  return (int(check[4:6],16)*256+int(check[2:4],16))
 else:
  return (int(check[4:6],16)*256+int(check[2:4],16)-256*256)

#LEDを点灯するためのセットアップ、GPIO5を出力に設定
GPIO.setmode(GPIO.BCM)
GPIO.setup(5,GPIO.OUT)
#測定モジュールをセットアップ、0x05にa00を書き込むと電流測定時の値が1→1mAになる
check = commands.getoutput("i2cset -y 1 0x41 0x05 0x0a 0x00 i")
time.sleep(1) #念のため1秒待つ
print str(GetV())+" V, "+str(GetA())+" mA "
#LED点灯
GPIO.output(5,GPIO.HIGH)
print "LED-on"
time.sleep(1) #念のため1秒待つ
print str(GetV())+" V, "+str(GetA())+" mA "
#LED消灯
GPIO.output(5,GPIO.LOW)
print "LED-off"
time.sleep(1) #念のため1秒待つ
print str(GetV())+" V, "+str(GetA())+" mA "
#GPIOを開放
GPIO.cleanup()
exit

電圧は0x02、電流は0x04をi2cgetで読めば帰ってくるのですが値が0xABCDみたいな4バイトの16進数で帰ってきます。しかもリトルエンディアンとのことで上位2バイトと下位2バイトが逆らしいので色々と入れ替えて計算しています。あと電圧は1.25倍したものがmVとのこと。

電流はそのままでmAらしいのですが、4バイト(32ビット)の一番上はプラスマイナスのフラグらしいのでその処理をしています。このへんの変換はunpackを使って出来そうなのですがよく分からなかったので文字列とintで誤魔化しています。

↓出力結果。

電流ゼロがたまにマイナスの値を示すようです。

さて、準備はそろったのでソーラーパネルで遊ぼうかな。

参考にしたサイト

Category:Beaglebone・Raspberry Pi


■ ■ ■ コメント ■ ■ ■

いいっすね!=23
001 [02/20 19:12]:課題は絶縁ですね。 (4)
002 [02/23 08:27]j:電気製品のあるセンサーを横取りして電圧見ようと思ってたので、これが使えると思ったけど、意外にインピーダンス低いんですね… 830kΩなんですね。 I2Cだと、測定部位と離したらノイズでうまく読めなさそうだし、信号線引っ張ったら、リード線の抵抗無視できないですね。なんかいまいちな気が… (5)
003 [02/23 10:51]ふぇちゅいん(パパパパ) TW★57:>>002 I2C試してみたら5メートルぐらい余裕だったよ。 (4)
004 [02/23 20:47]j:>>003 それは居間から屋上とか建屋内ですかね? 車とかバイクとかノイズ源がいっぱいあるところだときついかな〜 情報どもです (5)

名前 ↑B

コメント(※改行は省略されます)

※3回以上の連続書き込み不可
この記事のアクセス数:


→カテゴリー:Beaglebone・Raspberry Pi(記事数:42) (コメント数)