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

敢えて書く必要はないと思いますが、長期試験などをしているときに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プログラムはこんな感じです。一回で終了にしてます。

ina3221.is_ready の前に遅延を入れないとダメなときあるようなので遅延を追加しました。

#!/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
 
time.sleep(2)
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))
    

これを、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

INA219モジュールも載せておきます。

$ pip3 install pi-ina219
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting pi-ina219
  Downloading pi_ina219-1.4.1-py2.py3-none-any.whl (10 kB)
Collecting Adafruit-GPIO
  Downloading https://www.piwheels.org/simple/adafruit-gpio/Adafruit_GPIO-1.0.3-py3-none-any.whl (38 kB)
Collecting mock
  Downloading https://www.piwheels.org/simple/mock/mock-5.2.0-py3-none-any.whl (31 kB)
Collecting adafruit-pureio
  Downloading https://www.piwheels.org/simple/adafruit-pureio/Adafruit_PureIO-1.1.11-py3-none-any.whl (10 kB)
Requirement already satisfied: spidev in /usr/lib/python3/dist-packages (from Adafruit-GPIO->pi-ina219) (3.5)
Installing collected packages: adafruit-pureio, mock, Adafruit-GPIO, pi-ina219
Successfully installed Adafruit-GPIO-1.0.3 adafruit-pureio-1.1.11 mock-5.2.0 pi-ina219-1.4.1

#!/usr/bin/env python3

from ina219 import INA219

# INA219 の仕様に合わせて抵抗値と最大電流を設定
SHUNT_OHMS = 0.1   # シャント抵抗値(Ω)
MAX_EXPECTED_AMPS = 2.0  # 最大予想電流(A)

# インスタンス作成(アドレスはデフォルト0x40)
ina = INA219(SHUNT_OHMS, MAX_EXPECTED_AMPS, address=0x40)
ina.configure()

# 電圧・電流を取得
print(f"Bus Voltage: {ina.voltage():.3f} V")
print(f"Current:     {ina.current():.3f} mA")
print(f"Power:       {ina.power():.3f} mW")
print(f"Shunt Volt:  {ina.shunt_voltage():.3f} mV")