M5StackとINA219電流センサで電流を測定する

電流センサ 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へ送信して記録を取りたいところです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です