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をショートしました。
ちなみに、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からも給電しているので、電池の電圧は高く、電流は少なくなっているのが分かります。
これで、電源の監視ができるようになりました。