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

ATTiny85で電流電圧計を作ってみる

I2C接続の電流計測モジュールINA219を使用してArduino(ATTiny85)で電流電圧計を作ってみました。

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

←はスイッチサイエンスで購入しました。


▲計測対象の電源がCR2032なので、実験中にだんだん電圧下がって来てる (;・∀・)

接続図

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


▼ ATTiny85を使用したフル状態
  回路図の都合で分けてますが、スイッチは2回路2接点の連動スイッチです。
  電源に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)に設定する値は計算式と代入値がスペックシートに記載されています。
計測ビット長を12Bitにしている場合には0x2000を設定すれば良いみたいです。
パターンが8個くらいしかないので、分からなければ適当に設定して実測値と見比べれば確認できます。

スケッチ

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

YuruPuro/INA219

解説動画