Raspberry PiのI2Cを使って電圧を測定する(2019年3月版)

Pocket

皆さん、何台のRaspberry Piを持っていますか?弊社にはいつの間にか6台のラズパイが存在します。

今回、Raspberry Piで電圧を知る必要があったので、やってみました。ググればいくつか記事が出てきますが、時期によってやり方が違っている場合があるので、2019年3月版という事で記録として残します。

I2Cとは
2は上付き文字でI2Cと表記するのが正式らしいです。しかし上付き文字が使えない場合もあるので、I2Cとも表記されます。読みは「アイ・スクエアド・シー」もしくは「アイ・アイ・シー」です。「アイ・ツー・シー」とも言われます。I2Cの内容については本題から外れるので触れませんが、ものすごく乱暴に説明すると、USBを超シンプルにしたようなものです。

それでは、本題に入ります。

1.I2C電流・電圧センサモジュールを購入する

私はストロベリーリナックス様の次の商品を購入しました。
I2C電流・電圧センサモジュール

電圧は直流36Vまで、電流は双方向で±20Aまで測定できます。電流は双方向ですから充電池パックのような充電も放電もするシステムの監視に利用できます。

との事で、色々な用途に使えそうです。

2.はんだ付けする

使い方に合わせて端子を取り付けるのと、I2Cの通信に使用したいアドレスをジャンパーで指定します。複数のモジュールを取り付ける場合は空いているアドレスを指定します。

ジャンパとアドレスの対応を参考までに掲載します。
が、これを鵜呑みにせず、Texas Instrumentsが公開している仕様を参照してください。
http://www.ti.com/lit/ds/symlink/ina226.pdf

A1 A0 アドレス
G G 0x40
G 1 0x41
G D 0x42
G C 0x43
1 G 0x44
1 1 0x45
1 D 0x46
1 C 0x47
D G 0x48
D 1 0x49
D D 0x4a
D C 0x4b
C G 0x4c
C 1 0x4d
C D 0x4e
C C 0x4f

3.OS(Raspbian)の設定

I2Cを有効にします。GUIから行いました。
設定→Raspberry Piの設定→インターフェイス→I2Cを「有効」に設定→OK


4.配線する

I2C電流・電圧センサモジュールをブレッドボード経由でRaspberry Piと接続します。I2C電流・電圧センサモジュールの電源もRaspberry Piから供給しました。水色の物体が電圧を測定する対象です。



配線が終わったらターミナルで「i2cdetect -y 1」と入力します。ちゃんと認識されている場合はアドレスが表示されます。

pi@raspberrypi:~ $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- 41 -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

5.プログラムを作る

とりあえず、こんな感じにしてみました。
電圧は0x02から読み取れるようです。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import smbus

i2c = smbus.SMBus(1)
word = i2c.read_word_data(0x41, 0x02) & 0xFFFF
result = ( (word << 8) & 0xFF00 ) + (word >> 8)
volt = result * 1.25 / 1000
print volt

6.プログラムを実行して測定する

水色の物体の電圧を測ってみます。

pi@raspberrypi:~ $ chmod +x read_volt
pi@raspberrypi:~ $ while true; do ./read_volt; sleep 1s; done
2.80125
2.80125
2.8
2.8025
2.80125
2.80125
2.8025

比較のためにテスターで測ってみます。

良い感じではないでしょうか。

普通のテスターでは長時間の電圧/電流の推移は見れないしデータとして保存も出来ないので、色々と使えそうです。

Pocket

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください