INA219電流センサーの互換品を買う。
![]() |
互換品 |
![]() |
オリジナル Adafruit Industries(エイダフルート) |
商品レビューで評判が良くない。不良品が多すぎるという。
とはいえ全体の購入者数からすれば一部の人の評価だろうから、まあ大丈夫だろうと買う。
オリジナルの値段の半分から数分の一という値段が魅力的なことが第一。翌日配達というのも魅力的だった。
これを扱ったサイトには、「ハズレを引いた場合、まったく動かなければ問題ない?のですが、下手に動作すると無駄に時間を消費してしまいます。」とまで書かれているものもある。
結果的には「下手に動いて」はまってしまった。
到着してすぐにI2Cのチェックをする。ArduinoのスケッチでI2Cチェッカーというものがあるので、これを動かして認識するかどうかを確かめる。
2個中2個ともOK。第1段階クリア。
次に基本的動作を確認する。この方法は以下のサイトを参考にさせてもらった。Arduino-UNO、Nanoを使って簡単にできるので、不良品チェックには最適だ。
https://garchiving.com/current-voltage-measurement-with-arduino/
接続は以下のようにする。
![]() |
上記サイトからコピー Rは2kΩとした |
スケッチはスケッチ例にある、getcurrentを使用。
結果は以下の写真の通りで、1個はBusVoltageがそれなりの値で出た。しかしShuntVoltageがおかしい。
![]() |
ShuntVoltageが147.51mVとなっている。 |
この147.51という値は、Vin+が5Vでも0Vでも変わらない。
ちなみに14751は16進では399Fで、configレジスターの値である。(後のスケッチ参照)ShuntVoltageレジスタの値を読みだしたら、configレジスターの値が読みだされたということ。
(※Currentが0.00mAとなっているのは、サンプルスケッチをそのまま使ってしまったから。…後述)
もう1個はBusVoltageが出ない。
端子のはんだ付け不良も考えられるので、基板上のもう一方のVin+をテスターで当たってみたが、きちんと電圧が出ていたのでICを含めた基板内部の問題だろう。
後日正規品を購入して同じスケッチで動かした結果は以下の通り。
きちんとShuntVoltageが出ていて、Currentもそれなりの値になっていて、もちろんVin+の電圧を変えると値も変わる。
最初の例の現象は、プリント基盤とかICの取付の問題ではなく、INA219自体の不良であり、INA219のチェックをせずに(またはチェックをすり抜けたものを使って)組み立てをしたということになり、さらには組み立て後の製品をチェックしていない(またはチェックをすり抜けた)ということになる。
2個注文して2個とも不良だったことで、良品との交換処理ではなく、返品処理とした。(その後正規品を購入)
※注
サンプルスケッチは、そのままではキャリブレーションレジスタに何も入力されないので、Currentが0になる。スケッチ内のコメントにあるように、
//ina219.setCalibration_32V_1A();
または
//ina219.setCalibration_16V_400mA();
どちらかの//を外してやらないといけない。
なお参考にしたサイトには、以下のスケッチも載っていて、Adafruitのライブラリを使用しないため、余計な心配がいらなくなる。これも製品チェックにはいい。
#include <Wire.h> int16_t BusVoltage, ShuntVoltage; void setup() { Serial.begin(115200); Wire.begin(); Wire.setClock(400000); int16_t config_value = 0x399F; //デフォルト Wire.beginTransmission(0x40); //デバイスアドレス Wire.write(0x00); //configアドレス Wire.write((config_value >> 8) & 0xFF); Wire.write(config_value & 0xFF); Wire.endTransmission(); } void loop() { //Get BusVoltage Wire.beginTransmission(0x40); //デバイスアドレス Wire.write(0x02); //BusVoltageレジスタ Wire.endTransmission(); Wire.requestFrom(0x40, 16); while (Wire.available() < 16); BusVoltage = Wire.read() << 8 | Wire.read(); BusVoltage = (BusVoltage >> 3) * 4; //Get ShuntVoltage Wire.beginTransmission(0x40); //デバイスアドレス Wire.write(0x01); //ShuntVoltageレジスタ Wire.endTransmission(); Wire.requestFrom(0x40, 16); while (Wire.available() < 16); ShuntVoltage = Wire.read() << 8 | Wire.read(); Serial.print("BusVoltage"); Serial.print(BusVoltage * 0.001); Serial.print("V"); Serial.print(" "); Serial.print("ShuntVoltage"); Serial.print(ShuntVoltage * 0.01); Serial.print("mV"); Serial.println(" "); }
INA219は電流電圧のモニターとして簡単に使えるので、Arduinoと組み合わせて、充電器や放電器の動作チェック、バッテリーの容量確認などに重宝しそうだ。今回内部のレジスタや動作についてデータシートをじっくり見ることになったので、かえって良かったかもしれない。