電流センサ INA219 を使ってみました。AdafruitのチュートリアルはArduino用のサンプルですがM5Stackでも動作します。
INA219 電流センサモジュール
Adafruit製のBreakoutボードが秋月でも買えます。
I2C接続で電流±3.2A測定可能。電圧もmax DC26Vまで測定できるので電力も算出可能です。
測定する回路に直列に挿入します。0.1Ωの測定用の抵抗が内蔵されています。
Adafruit INA219 Current Sensor Breakout
秋月
http://akizukidenshi.com/catalog/g/gM-08221/
Arduino IDEのセットアップ
ライブラリマネージャで次のライブラリをインストールします。BusIOも入っていないとビルドエラーが出ました。
Adafruit INA219
Adafruit BusIO
接続
Vcc 5Vでも3.3Vでも動作しました。
M5Stack : INA219
————————
3.3V : Vcc
GND : Gnd
SDA(21) : Sda
SCL(22) : Scl
Vin+ と Vin-
Vccから1kΩの抵抗を介して接続したLEDに直列にINA219の Vin+ と Vin- を接続します。
プログラム
Adafruit INA219 ライブラリと共にインストールされるサンプル getcurrent そのままにLCDの表示を追加しました。
https://learn.adafruit.com/adafruit-ina219-current-sensor-breakout/arduino-code
#include <M5Stack.h>
#include <Wire.h>
#include <Adafruit_INA219.h>
Adafruit_INA219 ina219;
void setup(){
M5.begin();
M5.Lcd.setTextSize(2);
Serial.begin(115200);
while (!Serial) {
delay(1);
}
uint32_t currentFrequency;
Serial.println("Hello!");
M5.Lcd.println("Hello INA219");
// Initialize the INA219.
if (! ina219.begin()) {
Serial.println("Failed to find INA219 chip");
M5.Lcd.println("Failed to find INA219 chip");
while (1) { delay(10); }
}
Serial.println("Measuring voltage and current with INA219 ...");
M5.Lcd.println("Measuring voltage and current with INA219 ...");
}
void loop(void) {
float shuntvoltage = 0;
float busvoltage = 0;
float current_mA = 0;
float loadvoltage = 0;
float power_mW = 0;
shuntvoltage = ina219.getShuntVoltage_mV();
busvoltage = ina219.getBusVoltage_V();
current_mA = ina219.getCurrent_mA();
power_mW = ina219.getPower_mW();
loadvoltage = busvoltage + (shuntvoltage / 1000);
Serial.print("Bus Voltage: "); Serial.print(busvoltage); Serial.println(" V");
Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
Serial.print("Load Voltage: "); Serial.print(loadvoltage); Serial.println(" V");
Serial.print("Current: "); Serial.print(current_mA); Serial.println(" mA");
Serial.print("Power: "); Serial.print(power_mW); Serial.println(" mW");
Serial.println("");
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(0, 50);
M5.Lcd.print("Bus Voltage: "); M5.Lcd.print(busvoltage); M5.Lcd.println(" V");
M5.Lcd.print("Shunt Voltage: "); M5.Lcd.print(shuntvoltage); M5.Lcd.println(" mV");
M5.Lcd.print("Load Voltage: "); M5.Lcd.print(loadvoltage); M5.Lcd.println(" V");
M5.Lcd.print("Current: "); M5.Lcd.print(current_mA); M5.Lcd.println(" mA");
M5.Lcd.print("Power: "); M5.Lcd.print(power_mW); M5.Lcd.println(" mW");
delay(2000);
m5.update();
}
測定
無事に電流が測定できました。
オレンジに写っていますが赤色LEDです。1.6mAで十分明るいです。
まとめ
サンプルそのままで動作しますので簡単でした。
次はソーラーパネルで充電している12Vバッテリの充電電流を測定しようかと思います。
SDカードへログしたりWiFiからAmbientへ送信して記録を取りたいところです。