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 |
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 |
OVF 電力計算オーバーフローフラグ
電圧は下位3Bitが状態フラグに使用されているので、読みだした値を3Bitシフト。
解像度が4mV(値1が4mVに相当)なので4倍して電圧値に変換します。
今回は使用しませんでしたが、Calibration Register(0x05)に変換値を設定すると
Power Register(0x04)から電力値を読み出せます。 ※単位はmW
Calibration Register(0x05)に設定する値は計算式と代入値がスペックシートに記載されています。
計測ビット長を12Bitにしている場合には0x2000を設定すれば良いみたいです。
パターンが8個くらいしかないので、分からなければ適当に設定して実測値と見比べれば確認できます。
スケッチ
GitHubのリポジトリにはSSD1306の表示クラス、フォントデータも入ってます。YuruPuro/INA219