バッテリー駆動の機器では、バッテリーパックのコンディションを監視することがとても重要です。 以前から、バッテリーの電圧検出回路は搭載する予定でしたが、Raspberry PiにはADコンバータがありませんので、適当なデバイスを探していました。 今回は、I2Cインターフェースで簡単に接続でき、電流、電力も取得できる ストロベリー・リナックス社のINA226 I2Cディジタル電流・電圧・電力計モジュールを使用してみました。
このモジュールには、電流測定用のシャント抵抗も含まれているので、初期設定として、その補正値を設定するだけで、測定を開始できます。 また、必要に応じて、複数回の平均値で計測したり、異常値の検出、測定サイクル速度の変更などができます。 テキサス・インスツルメンツ社のデータシート(英語!)
接続はこんな感じでハイサイド接続。
コマンドラインから
i2cset -y 1 0x42 0x05 0x0a00 w // Calibrationレジスタに a00hを書き込み
i2cget -y 1 0x42 0x02 w // 電圧レジスタの読み込み
i2cget -y 1 0x42 0x04 w // 電流レジスタの読み込み
i2cget -y 1 0x42 0x03 w // 電力レジスタの読み込み
という感じで、値を確認できます。 簡単ですね。 (今回、I2Cアドレスを42hにしています)
電流値はそのままの数値でmA表示ですが、電圧は1.25倍、電力は2.5倍にする必要があります。 また、表示される数値はリトルエンディアンなので、右側1バイトが上位、左側1バイトが下位となります。(ここちょっとハマりました)
PHPでサンプルプログラムを作成しましたが、リトルエンディアンの変換がスマートではありません。 unpack()で、サックとできそうなのですが、文字列操作でこねまわしちゃいました。(!)
<?php //ina226 testプログラム // Calibrationレジスタに a00hを書き込み exec("i2cset -y 1 0x42 0x05 0x000a w"); while (1){ $vol = exec("i2cget -y 1 0x42 0x02 w"); // 電圧レジスタの読み込み $anp = exec("i2cget -y 1 0x42 0x04 w"); // 電流レジスタの読み込み $pow = exec("i2cget -y 1 0x42 0x03 w"); // 電力レジスタの読み込み $vol = hexdec(substr($vol,-2).substr($vol,2,2)) * 1.25 / 1000; $anp = hexdec(substr($anp,-2).substr($anp,2,2)); $pow = hexdec(substr($pow,-2).substr($pow,2,2)) * 0.025; printf("電圧 %.2f V 電流 %.1f mA 電力 %.2f W\n", $vol,$anp,$pow); sleep(1); } ?>
これで、バッテリーパックの状態が把握できるようになりました。
【2024極薄型モデル&Type-C充電式】マウス 無線 Bluetooth5.2 ワイヤレスマウス 静音 瞬時接続 小型 高感度 ブルートゥース 2.4GHz 3段階DPI切替 ゲーミングマウス 省エネ 7色ライト 光学式 高耐久性 Mac/Windows/Surface/PC/Macbookに対応 TELEC認証取得済み (black)
¥1,580 (2025-03-31 16:33 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)【正規MFi認証】 for iPhone 充電ケーブル 純正 0.2M/1M*2/2M 4本 セット アイフォン充電器 ライトニングケーブル 急速充電 断線防止 超高耐久 アイホン USB 充電コード for i-Phone 14/ 13/ 12/ 11/ XS/XR/ 8/ 7/ 6s/ 6/5/SE用,lightning ケーブル for iPad Mini/Airと各種対応
只今、価格を取得しています。
(2025-03-31 16:33 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)