INA219 전류센서모듈과 태양전지판을 사용한 전압/전류 측정 실험

INA219 센서는 DC 전류를 mA 단위로 측정할 수 있으며 상당히 정확도가 높은 센서 중에 하나입니다. 전류는 물론 전압측정도 가능하며 이를 통해 전력도 산출가능합니다. 최대 측정전류는 3.2A이며 전압은 0~26V까지 측정가능합니다. 구동전압은 3~5V로 공급해주면 됩니다.

 

INA219의 측정 원리는 옴의 법칙을 기반으로 하며 측정되는 전류는 아주 작은 값(R100; 0.1옴)의 션트 저항에 걸리는 전압값에 의해 결정되고 측정된 값에 10을 곱하면 실제 전류의 크기가 됩니다.

아래는 INA219의 전류 및 전압의 측정방법입니다. 중요한 것은 아두이노 보드와 INA219로 전류를 측정하는 경우 아두이노 보드, 공급전압(0~26), 부하간의 GND는 모두 공통으로 연결되어야 합니다.

 

 

 

1. 태양전지판으로 LED를 켜고 INA219 센서의 전압/전류를 시리얼모니터로 모니터링하기

아래 회로도와 같이 태양전지판으로 부터 발생된 전기로 LED를 켜보고 INA219센서로 회로의 전압과 LED에 흐르는 전류를 아두이노프로그램의 시리얼모니터에서 확인해 보겠습니다.

실험에 사용된 적색LED는 비교적 낮은 전압에서도 약하게 나마 발광할 수 있으므로 실내의 밝은 형광등 아래에서도 실험이 가능한 장점이 있습니다.

실내에서 실험할 경우 발전된 전압이 최소 1.7V 이상(2V이상 권장)이 되도록 합니다.

 

회로 구성을 마친 후 아래 라이브러리를 설치하고 소스코드를 복사 또는 작성합니다.

라이브러리는 아래 링크에서 다운로드하고 아두이노 프로그램 메뉴에서 스케치->라이브러리 포함하기->.ZIP 라이브러리 추가를 누르고, 파일선택창이 나오면 다운받은 라이브러리 파일을 선택하시면 됩니다.

라이브러리

 

소스코드

아래는 소스코드입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드합니다.

// INA219 전류센서모듈 실험 #1
#include <Wire.h>
#include <INA219_WE.h>
#define I2C_ADDRESS 0x40

INA219_WE ina219(I2C_ADDRESS);

void setup() {

  Serial.begin(9600);
  Wire.begin();
  if(!ina219.init()){
    Serial.println("INA219 not connected!");
  }
  Serial.println("INA219 Current Sensor with solar panel");
}

void loop() {
  float shuntVoltage_mV = 0.0;
  float loadVoltage_V = 0.0;
  float busVoltage_V = 0.0;
  float current_mA = 0.0;
  float power_mW = 0.0; 
  bool ina219_overflow = false;
  
  shuntVoltage_mV = ina219.getShuntVoltage_mV();
  busVoltage_V = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getBusPower();
  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
  ina219_overflow = ina219.getOverflow();
  
  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
  Serial.print("Current[mA]: "); Serial.println(current_mA);
  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);

  if(!ina219_overflow){
    Serial.println("Values OK - no overflow");
  }
  else{
    Serial.println("Overflow! Choose higher PGAIN");
  }
  Serial.println();
  
  delay(1000);
}

 

소스코드를 컴파일하고 아두이노로 업로드 합니다.

시리얼 모니터를 열어 아래와 같은 메시지가 나오는지 확인합니다.

주의 사항 : 시리얼모니터에서 보드레이트는 9600으로 설정하시기 바랍니다.

 

 

 

2. INA219 센서의 전압/전류를 IIC LCD로 모니터링하기

아래 회로도와 같이 태양전지판으로 부터 발생된 전기로 LED를 켜보고 INA219센서로 발전된 전압과 LED에 흐르는 전류를 IIC LCD에서 확인해 보겠습니다.

1번 회로도에서 IIC LCD 부분만 아래와 같이 추가합니다.

 

 

회로 구성을 마친 후 아래 라이브러리를 설치하고 소스코드를 복사 또는 작성합니다.

라이브러리는 아래 링크에서 다운로드하고 아두이노 프로그램 메뉴에서 스케치->라이브러리 포함하기->.ZIP 라이브러리 추가를 누르고, 파일선택창이 나오면 다운받은 라이브러리 파일을 선택하시면 됩니다.

주의 사항 : 라이브러리는 설치되지 않은 경우에만 설치하시면 됩니다.

 

라이브러리

소스코드

아래는 소스코드입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드합니다.

// INA219 전류센서모듈 실험 #2
#include <Wire.h>
#include <INA219_WE.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDRESS 0x40

INA219_WE ina219(I2C_ADDRESS);

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.clear();
  Serial.begin(9600);
  Wire.begin();
  if(!ina219.init()){
    Serial.println("INA219 not connected!");
    lcd.print("INA219");
    lcd.setCursor(0,1);
    lcd.print(" not connected!");
  }
  lcd.clear();
  lcd.print("Voltage:");
  lcd.setCursor(0,1);
  lcd.print("Current:");

  Serial.println("INA219 Current Sensor with solar panel");
}

void loop() {
  float shuntVoltage_mV = 0.0;
  float loadVoltage_V = 0.0;
  float busVoltage_V = 0.0;
  float current_mA = 0.0;
  float power_mW = 0.0; 
  bool ina219_overflow = false;
  
  shuntVoltage_mV = ina219.getShuntVoltage_mV();
  busVoltage_V = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getBusPower();
  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
  ina219_overflow = ina219.getOverflow();
  
  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
  Serial.print("Current[mA]: "); Serial.println(current_mA);
  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);

  lcd.setCursor(8,0);
  lcd.print(loadVoltage_V);
  lcd.print("V       ");
  lcd.setCursor(8,1);
  lcd.print(current_mA);
  lcd.print("mA       ");
  if(!ina219_overflow){
    Serial.println("Values OK - no overflow");
  }
  else{
    Serial.println("Overflow! Choose higher PGAIN");
  }
  Serial.println();
  
  delay(1000);
}

 

 

 


Tags