Raspberry Pi[46] 状態監視 INA3221モジュール

敢えて書く必要はないと思いますが、長期試験などをしているときにpiの状態を知りたい場合には、こんな感じのスクリプトを cronで動かしてあげればよいと思います。

/usr/bin/date >> /home/pi/DATA/ENV/env.txt
/usr/bin/vcgencmd measure_temp >> /home/pi/DATA/ENV/env.txt
/usr/bin/vcgencmd measure_volts >> /home/pi/DATA/ENV/env.txt
/usr/bin/free -m  >> /home/pi/DATA/ENV/env.txt
echo "----------------------------------"  >> /home/pi/DATA/ENV/env.txt

ちなみに、外部電源の電圧を落としていっても、コア電圧には現れません。供給電源がある一定以下の電圧になると、コア電圧に影響することなく、Raspiは落ちます。なので、外部電源を供給しているときには、外部電源の出力電圧を監視する必要があります。

TI 社のINA3221を使ったトリプルチャンネルモジュールina3221が安く市販されています。INA3221の周辺回路が載っていますので、負荷をつけるだけで使用できます。以下はチップの回路図です。

このチップに周辺回路をつけたのがモジュールで100オームのシャント抵抗も載ってます。なので、負荷をつなげるだけです。シャント抵抗に流せる電流値の記載がないので注意が必要だと思いますが、大きさからみて1Wの抵抗だと思います。

ラズパイ側は

3番ピン:SDA

5番ピン:SCL

あとは電源です。3.3V とGNDを接続するだけです。ほかにピンがありますが、使用しません。

あまり引き回すと、データが化けるので短いほうがいいでしょう。

Pyhonのライブラリがあるので、それを用いれば簡単に使用できます。とりあえずインストールします。

pip3 install barbudor-circuitpython-ina3221

実行Pythonプログラムはこんな感じです。一回で終了にしてます。

#!/usr/bin/env python3

import time
import board
from barbudor_ina3221.full import INA3221
 
i2c_bus = board.I2C()
ina3221 = INA3221(i2c_bus)
 
ina3221.enable_channel(1)
ina3221.enable_channel(2)
ina3221.enable_channel(3)
 
mescnt = 0
 
if ina3221.is_ready:
     mescnt += 1
     print('======== Measure Count: {0} ========'.format(mescnt))
     for ch in range(1,4):
        volt = ina3221.bus_voltage(ch)
        cur = ina3221.current(ch)
        print('CH{0}: {1}V({2}A)'.format(ch, volt, cur))
time.sleep(1)
    

これを、ina3221.py として保存して、実行権限を付与しておきます。最初に書いたスクリプトに追加すると、外部電源夏と消費電流が記録されます。

/usr/bin/date >> /home/pi/DATA/ENV/env.txt
/usr/bin/vcgencmd measure_temp >> /home/pi/DATA/ENV/env.txt
/usr/bin/vcgencmd measure_volts >> /home/pi/DATA/ENV/env.txt
/usr/bin/free -m  >> /home/pi/DATA/ENV/env.txt
/home/pi/work/XING/ina3221.py >> /home/pi/DATA/ENV/env.txt
echo "----------------------------------"  >> /home/pi/DATA/ENV/env.txt