ゆるく楽しむプログラミング

ATTiny85で電流電圧計 ~ちょっと勘違いしていたので作り直してみた~

I2C接続の電流計測モジュールINA219を使用してArduino(ATTiny85)で電流電圧計を作ってみました。
前回作成したのはちょっと勘違いしていたので、正しく電流電圧計として作ってみました。

スイッチサイエンス:INA219搭載 STEMMA QT互換 ハイサイドDCセンサ
秋月電子:INA219使用電流センサーモジュール
Amazon : INA219 I2C双方向DC電流電源センサ
などで購入できます。

←はAmazonで購入した廉価版です。

フリスクっぽいケースに入れてみました。
上から見た形状は同じですが、厚みが1.5倍くらいあります。
意匠権とか的に不味そうなので、形状データの配布は出来ません。



接続図

▼ ArduinoUNOでの動作検証用:モロモロ省略、I2C接続なので確認するだけなら簡単
OLEDは SSD1306(128x64Dot) を使用


▼ ATTiny85を使用した状態
  電源に3.3V昇圧DC-DCコンバータを入れています。


INA219の使い方

INA219のレジスタは16Bitです。
Configレジスタに動作モード(電圧レンジ、電流解像度、電圧解像度、計測モード)を書き込めば
電圧値と電流値がそれぞれ電圧レジスタ、電流レジスタから読み取れます。

Configuration Register(0x00)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RST - BRNG PG1 PG0 BADC4 BADC3 BADC2 BARC1 SADC4 SADC3 SADC2 SADC1 MODE3 MODE2 MODE1
RST   1:リセット
BRNG  電圧レンジ 0:16V 1:32V
PG    シャント抵抗(電流測定)レンジ  00:±40mV 01:±80mV 10:±160mV 11:±320mV
BADC  電圧計測ビット長          0011: 12Bit
SADC  電流計測ビット長と変換時間   0011: 12Bit 532μ秒
MODE  計測モード              111:電圧・電流計測

Shunt Voltage Register(0x01) ※電流値 ±0~32767
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SIGN SD14 SD13 SD12 SD11 SD10 SD9 SD8 SD7 SD6 SD5 SD4 SD3 SD2 SD1 SD0

Bus Voltage Register(0x02) ※電圧値 0~4096×4mV
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BD12 BD11 BD10 BD9 BD8 BD7 BD6 BD5 BD4 BD3 BD2 BD1 BD0 - CNVR OVF
CNVR  変換完了フラグ
OVF   電力計算オーバーフローフラグ

電圧は下位3Bitが状態フラグに使用されているので、読みだした値を3Bitシフト。
解像度が4mV(値1が4mVに相当)なので4倍して電圧値に変換します。

今回は使用しませんでしたが、Calibration Register(0x05)に変換値を設定すると
Power Register(0x04)から電力値を読み出せます。 ※単位はmW
Calibration Register(0x05)に設定する値は計算式と代入値がスペックシートに記載されています。
計算が面倒な場合は、ChatGPTに▼の感じで質問すれば計算してくれます。
INA219のconfigレジスタに0x019F(設定値)を設定した場合のキャリブレーション値を教えてください。
ただし、シャント抵抗は0.1Ω、最大期待電流は1Aとします。
計測ビット長を12Bitにしている場合には0x2000を設定すれば良いみたいです。
パターンが8個くらいしかないので、分からなければ適当に設定して実測値と見比べれば確認できます。

スケッチ

GitHubのリポジトリにはSSD1306の表示クラス、フォントデータも入ってます。

YuruPuro/CurrentVoltmeter

解説動画