Home IoT Hub Series · 13

[13편] 전기세 무지 나오네, 이번 기회에 눈으로 보자 - ACS712 소비전력 측정 노드

[13편] 전기세 무지 나오네, 이번 기회에 눈으로 보자 - ACS712 소비전력 측정 노드 대표 이미지
시스템 아키텍처 및 데이터 파이프라인 안내
이 글은 2편: 두뇌 만들기에서 구축한 중앙 NodeMCU 서버에 연결되는 우리집 IoT 허브 구성 문서입니다. ACS712가 전류 변화를 읽어 소비전력 추정값을 중앙 허브에 전달합니다. 수집된 데이터는 로컬 무선망 IoT_Hub_Net을 통해 중앙 서버의 15번 전력 사용량 슬롯(/set?no15=값)을 갱신하며, 20채널 스마트홈 통합 컨트롤러의 판단 근거로 사용됩니다.

ACS712는 홀 효과를 이용하는 전류 센서입니다. 전선에 흐르는 전류를 자기장으로 감지해 아날로그 전압으로 출력하고, 여기에 전압 값을 곱해 소비전력(W)을 추정합니다. 계산 결과는 15번 Power 슬롯으로 보냅니다.

⚡ 경고: 220V 작업은 위험합니다

ACS712는 CT 클램프 방식이 아니라 전선을 끊고 중간에 삽입해야 합니다. 전기 작업에 자신이 없으면 직접 시도하지 말고, CT 클램프 센서(SCT-013)로 대체하는 편이 안전합니다. SCT-013은 전선을 감싸기만 하면 되므로 훨씬 안전합니다.

준비물과 가격

부품수량개당 가격
Wemos D1 Mini1개2,000원
ACS712 20A1개2,500원
점퍼 와이어 3개
합계4,500원

핀 연결

[13편] 전기세 무지 나오네, 이번 기회에 눈으로 보자 - ACS712 소비전력 측정 노드 배선도
센서/모듈보드 연결
VCC5V (VU)
GNDGND
OUTA0

전체 코드

ACS712 20A는 2.5V를 0A로 출력하고, 100mV/A 비율로 변동한다. ESP8266 ADC는 0~1V만 읽을 수 있으므로 전압 분배가 필요하지만, 대부분의 ACS712 모듈에는 이미 분배 회로가 내장되어 있다. 아래 코드는 간략화된 버전이다.

[13편] 전기세 무지 나오네, 이번 기회에 눈으로 보자 - ACS712 소비전력 측정 노드 - 전체 코드
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid     = "IoT_Hub_Net";
const char* password = "iothub1234";
const char* hubURL   = "http://192.168.1.1";

#define CURRENT_PIN  A0
#define SLOT_NO      15
#define VOLTAGE      220.0 // 한국 가정용 전압
#define INTERVAL     15000

void setup() {
  Serial.begin(115200);
  pinMode(CURRENT_PIN, INPUT);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to IoT_Hub_Net");
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
  Serial.println("\nConnected!");
}

void loop() {
  // 50샘플 평균으로 노이즈 저감
  float sum = 0;
  for (int i = 0; i < 50; i++) {
    sum += analogRead(CURRENT_PIN);
    delay(1);
  }
  float avg = sum / 50.0;

  // ESP8266 ADC: 0~1023 → 0~1.0V
  float voltage = avg / 1023.0;
  // ACS712 20A: 2.5V at 0A, 100mV/A
  // 모듈에 따라 분배 비율이 다르므로 실측 보정 필요
  float current = abs(voltage - 0.512) / 0.1; // 간략 근사
  float power = current * VOLTAGE;
  if (power < 5) power = 0; // 노이즈 컷

  Serial.print("Power: "); Serial.print(power, 0); Serial.println(" W");

  WiFiClient client; HTTPClient http;
  String url = String(hubURL) + "/set?no15=" + String((int)power);
  http.begin(client, url); http.GET(); http.end();
  Serial.println("HTTP -> " + url);

  delay(INTERVAL);
}
이 코드는 근사값을 계산합니다. 정확한 전력을 원한다면 INA219나 PZEM-004T 같은 전용 전력 측정 모듈을 사용하는 편이 좋습니다.

업로드 및 확인

USB 데이터 케이블로 Wemos D1 Mini를 PC에 연결하고, Arduino IDE에서 ESP8266 보드와 포트를 선택한 뒤 소스를 업로드합니다. 업로드가 끝나면 툴 → 시리얼 모니터를 열고 보드레이트를 115200으로 맞춥니다.

시리얼 모니터

업로드가 끝나면 Arduino IDE의 툴 → 시리얼 모니터를 열고 보드레이트를 115200으로 맞춥니다. 다음은 정상 동작을 확인하기 위한 시리얼 모니터 출력 예시입니다. 이 로그는 실제 캡처가 아니라, 전류 영점 보정과 15번 슬롯 전력값 전송을 확인하는 시리얼 모니터 출력 예시입니다.

[BOOT] Home IoT Node #13 - ACS712 power usage
[CAL] zero_offset=512.8, samples=200
[SENSOR] current=0.42A voltage=220V power=92.4W
[FILTER] noise_window=stable
[HTTP] GET /set?no15=92.4
[HUB] 200 OK - slot no15 updated
[LOOP] next power sample in 10000 ms
  • Connected 또는 connected가 보이면 Wi-Fi 연결 단계는 통과한 것입니다.
  • HTTP 200 또는 200 OK가 보이면 두뇌 서버에 값이 전달된 것입니다.
  • 값이 갱신되지 않으면 먼저 URL의 슬롯 번호와 센서 배선을 함께 확인합니다.

다음 글 예고

수도 사용량은 YF-S201 유량 센서로 펄스를 카운트해 계산합니다.

준비물: Wemos D1 Mini (2,000원), YF-S201 (3,000원)

ACS712 전류 센서로 우리집 전력 사용량 들여다보기

ACS712는 홀 효과(hall-effect) 방식으로 전선에 흐르는 전류(A)를 측정하는 센서입니다. 여기에 가정용 전압 220V를 곱하면 대략적인 소비전력(W)을 추정할 수 있어, '우리집 IoT 허브'에 물려두면 각 가전이 실제로 전기를 얼마나 먹는지 눈으로 확인할 수 있습니다.

안 될 때 체크포인트

이 노드는 코드만 보면 짧아 보일 수 있지만, 실제 집에 붙이면 센서 위치·전원·무선망·노이즈 때문에 값이 쉽게 흔들립니다. 아래 항목은 두뇌 서버에 잘못된 판단 근거가 들어가지 않도록 현장에서 먼저 점검할 내용입니다.

증상가능한 원인현장 해결 방법
부하가 없어도 0.1~0.2A가 표시됨홀 센서 오프셋과 주변 전자기장 노이즈부팅 후 첫 2초 무부하 평균을 zero offset으로 저장하고 이후 측정값에서 빼줍니다.
값이 계속 흔들림ACS712 출력이 아날로그이고 ESP8266 ADC 해상도·노이즈 한계가 있음100회 이상 샘플링 후 RMS 또는 평균값을 쓰고, 센서선은 AC 전원선과 분리합니다.
측정 범위가 맞지 않음5A/20A/30A 모듈 감도가 달라 코드 보정값이 틀림사용 중인 ACS712 모델의 mV/A 값을 확인해 보정계수를 맞춥니다.
고전압 배선이 위험함AC 라인을 잘못 절연하거나 브레드보드로 처리함상용 전원 측정은 절연 케이스와 터미널 블록을 쓰고, 모르면 플러그형 전력계를 쓰는 쪽이 안전합니다.

활용 방안

  • 가전별 소비전력 모니터링: 냉장고는 컴프레서가 돌 때와 멈출 때 전류가 크게 오르내립니다. 에어컨은 기동 순간 전류가 튀었다가 안정되고, 세탁기는 세탁·탈수 단계마다 파형이 달라집니다. 이 변화를 그래프로 기록하면 가전의 '동작 패턴'이 보입니다.
  • 대기전력 확인: 셋톱박스·전자레인지·충전기처럼 꺼둔 것 같지만 미세하게 전류가 흐르는 기기를 찾아낼 수 있습니다. 0.02~0.05A만 흘러도 한 달이면 무시 못 할 낭비입니다.
  • 이상 감지: 냉장고 컴프레서가 평소보다 오래 돌거나 전류가 계속 높게 유지되면 문틈 밀봉 불량, 냉매 문제, 노후를 의심할 수 있습니다. 허브에서 임계값을 넘으면 알림을 보내도록 만들 수 있습니다.
  • 요금 추정: (평균 전류 × 220V × 사용 시간)으로 kWh를 계산해 누진구간 진입 여부를 미리 가늠할 수 있습니다.

추천 설치 장소

  • 분전반 개별 회로: 주방·거실 등 회로 단위로 감시하고 싶다면 분전반 차단기 뒤에 설치합니다. 전체 사용량을 크게 나눠 볼 수 있지만, 반드시 전기 기사(자격자)의 작업이 필요합니다.
  • 콘센트 단위: 특정 가전 하나만 보고 싶다면 멀티탭이나 전용 계측 어댑터 안에 넣는 방식이 훨씬 안전하고 접근성이 좋습니다. 초보 메이커라면 이쪽을 강력 추천합니다.
  • 측정 대상 선정: 소비가 크고 자주 켜지는 냉장고·에어컨부터 시작하면 데이터의 재미와 절감 효과가 가장 큽니다.

실전 팁 / 주의점

  • ⚠️ 220V 감전 위험: ACS712는 측정 대상 전선을 직접 통과시켜야 하므로 활선(전기가 흐르는 선)을 다루게 됩니다. 감전은 생명과 직결됩니다. 분전반·직결 배선 작업은 비전문가가 하지 마시고 반드시 전기 자격자에게 맡기는 것이 안전합니다.
  • 0점 보정: 부하가 없을 때도 센서 출력이 정확히 중간값이 아닐 수 있습니다. 아무 것도 안 켠 상태의 출력값을 기준(offset)으로 저장해 두고 빼주면 정확도가 올라갑니다.
  • 노이즈 처리: 순간값은 흔들리므로 여러 샘플의 평균(또는 RMS)을 내서 사용합니다.
  • 모듈 선택: 5A 모듈은 소형 가전, 20A는 일반 가전, 30A는 에어컨·인덕션 같은 대용량용입니다. 예상 전류의 여유를 두고 고르되, 너무 큰 모듈은 작은 전류에서 해상도가 떨어집니다.
  • 역률 오차: '전류 × 220V'는 피상전력(VA)에 가깝습니다. 모터·컴프레서가 든 가전은 역률 때문에 실제 소비전력(W)이 이보다 낮게 나옵니다. 정밀한 요금 계산엔 오차가 있음을 감안합니다.

자주 묻는 질문

Q. 콘센트에 그냥 꽂아서 쓸 수 있나요?
A. 아니요. ACS712는 전선 한 가닥을 센서에 통과시키는 결선이 필요합니다. 안전하게 쓰려면 절연된 계측 어댑터/멀티탭 형태로 만들어야 하며, 활선 결선에는 감전 위험이 따릅니다.

Q. 측정한 전력이 전기요금 고지서와 정확히 맞나요?
A. 대략적인 추정치입니다. 역률·전압 변동·센서 오차 때문에 한전 계량기와는 차이가 납니다. 절대값보다 '가전별 비교'와 '추세'를 보는 용도로 사용합니다.

Q. 분전반에 직접 다는 게 겁납니다. 대안이 있나요?
A. 네. 콘센트 단위 계측이 정답입니다. 시중의 절연형 전력 측정 어댑터를 참고해 만들거나, 정 불안하면 상용 스마트플러그로 시작한 뒤 익숙해지면 ACS712로 확장합니다. 안전이 최우선입니다.

우리집 IoT HUB 20슬롯 시스템 맵

이 글은 2편의 중앙 두뇌 서버와 3~19편의 분산 엣지 노드가 함께 구성하는 20채널 홈 IoT 시스템의 일부입니다. 필요한 편으로 이동해 슬롯과 센서 흐름을 함께 확인합니다.

[1편] 우리집 IoT 허브 전체 그림[2편] 중앙 두뇌 서버 만들기 · 슬롯 1~20[3편] 집 안 온습도, 감으로 보지 말고 숫자로 보자 · 슬롯 1·2[4편] 문 닫았나 계속 신경 쓰일 때 · 슬롯 9[5편] 냉장고가 제대로 돌고 있는지 눈으로 확인하자 · 슬롯 12[6편] 창문 열어도 될까? · 슬롯 3[7편] 욕실 곰팡이 생기기 전에 습도부터 잡자 · 슬롯 19[8편] 보일러가 실제로 도는지 배관 온도로 확인하자 · 슬롯 5·17[9편] 외출했는데 가스레인지가 켜져 있지 않을까? · 슬롯 6[10편] 가스 냄새가 나기 전에 먼저 경고받자 · 슬롯 7[11편] 집을 비웠을 때 불꽃 징후를 먼저 잡자 · 슬롯 8[12편] 머리가 멍한 이유가 공기 때문인지 확인하자 · 슬롯 13·14[13편] 전기세 무지 나오네, 이번 기회에 눈으로 보자 · 슬롯 15[14편] 물 새는지, 얼마나 쓰는지 숫자로 보자 · 슬롯 16[15편] 비 오는 줄 모르고 창문 열어두지 않게 · 슬롯 18[16편] 불 껐나, 문 잠갔나 한 번에 확인하자 · 슬롯 11·10[17편] 리모컨 없이 에어컨을 IoT 허브에서 제어하자 · 슬롯 4[18편] 강아지 밥그릇이 비었는지 눈으로 보자 · 슬롯 20[19편] 사람 있을 때만 시원하게, 없을 땐 아끼자 · 슬롯 1·4[20편] 집 안 상태가 한 화면에 보이기 시작했다 · 슬롯 전체