INA219を使った電圧と電流の監視

INA219

バッテリーを使って駆動しているので、あとどのくらいでバッテリーが無くなるかはチェックしたいところです。

ラズパイに入力される電圧は、5.5~6v程度にレギュレーターで下げているのですが、下げる前のバッテリー直の電圧と電流を常時監視するために私が使ったのがINA219というチップです。データシート等はこちらが参考になりました。

https://www.ti.com/product/ja-jp/INA219

このチップはあまり使われていないのか、参考になる記事が少ないので、ちょっと丁寧に解説してみます。

まず、チップに立っているピンヘッダーは次の6本です。

  • Vcc
  • GND
  • SCL
  • SDA
  • V-
  • V+

このうち、V-とV+は別の方法でも接続出来るので、私はそれ以外の4本をジャンパーワイヤーでブレッドボードに接続しました。

まず、このチップは、基本的には電流計です。V+からV-に流れる電流を計測します。ただ、マイナスの電流も計測できるので、極性は意識しなくても良いかもしれません。

さて、このINA219ですが、単体で繋いでみるとI2Cアドレスが40なのです。何と、PCA9685と同じアドレスなのです。ってことで、使えませ〜んとなるところなのですが、こういったチップはアドレスが被ることを想定されていて、アドレスを変更できるのです。ハンダゴテを使って!

基盤についている、A0,A1という部分がアドレスを変更する部分です。このA0の部分のハンダを溶かしてショートさせるとアドレスが+1の41となります。A1をショートさせると、アドレスが+2の42となります。両方ショートさせると、アドレスが+3で43になるのです。つまり、PCA9685と併用しなければ、同時に4台接続できることになります。私は、PCA9685との被りを解消したいだけなので、A0をショートしました。

INA219の接続(A0をショートしてアドレスを 0x41に)

ちなみに、PCA9685も複数接続を考えられていて、A0〜A5までありました。

つまり理論上は最大で64台のPCA9685を繋ぐ事ができます。そうすれば、pwm的には1024chのpwm信号を出せます。やらないけど。

さて、それではI2Cがどうなっているか、見てみましょう。

i2cdetect -y 1

無事、41chが使われていることが確認できました。70はPCA9685が使っているのですが、何用なのだろうか?

INA219のライブラリはこちらです。

https://github.com/chrisb2/pi_ina219

pipで簡単にインストール出来ます。

pip3 install pi-ina219

サンプルプログラム

I2Cアドレスを変更しているので、そこも設定しないと正しく動きません。

from ina219 import INA219

SHUNT_OHMS = 0.1

ina = INA219(SHUNT_OHMS, address=0x41) # I2Cアドレスを41に指定して、inaのインスタンスを作成
ina.configure() # INA219の初期化

print("Bus Voltage: %.3f V" % ina.voltage())
print("Bus Current: %.3f mA" % ina.current())
print("Power: %.3f mW" % ina.power())
print("Shunt voltage: %.3f mV" % ina.shunt_voltage())

電源アダプターに繋いだ状態で実行した結果。

バッテリーから電源を供給して実行してみた結果。

バッテリーと電源の両方を使った状態で実行してみた結果。

USBからも給電しているので、電池の電圧は高く、電流は少なくなっているのが分かります。

これで、電源の監視ができるようになりました。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です