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 |
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)に設定する値は計算式と代入値がスペックシートに記載されています。
計算が面倒な場合は、ChatGPTに▼の感じで質問すれば計算してくれます。
INA219のconfigレジスタに0x019F(設定値)を設定した場合のキャリブレーション値を教えてください。計測ビット長を12Bitにしている場合には0x2000を設定すれば良いみたいです。
ただし、シャント抵抗は0.1Ω、最大期待電流は1Aとします。
パターンが8個くらいしかないので、分からなければ適当に設定して実測値と見比べれば確認できます。
スケッチ
GitHubのリポジトリにはSSD1306の表示クラス、フォントデータも入ってます。YuruPuro/CurrentVoltmeter