Home IoT Hub Series · 14

[14편] 물 새는지, 얼마나 쓰는지 숫자로 보자 - YF-S201 수도 사용량 노드

[14편] 물 새는지, 얼마나 쓰는지 숫자로 보자 - YF-S201 수도 사용량 노드 대표 이미지
시스템 아키텍처 및 데이터 파이프라인 안내
이 글은 2편: 두뇌 만들기에서 구축한 중앙 NodeMCU 서버에 연결되는 우리집 IoT 허브 구성 문서입니다. YF-S201의 펄스 수를 물 사용량으로 변환해 누수와 사용 패턴을 추적하게 합니다. 수집된 데이터는 로컬 무선망 IoT_Hub_Net을 통해 중앙 서버의 16번 수도 사용량 슬롯(/set?no16=값)을 갱신하며, 20채널 스마트홈 통합 컨트롤러의 판단 근거로 사용됩니다.

YF-S201은 배관을 흐르는 물에 의해 내부 임펠러가 돌면서 펄스를 발생시키는 유량 센서입니다. 펄스 수를 세면 사용한 물의 양(L)을 계산할 수 있고, 결과는 16번 Water 슬롯으로 보냅니다.

준비물과 가격

부품수량개당 가격
Wemos D1 Mini1개2,000원
YF-S201 유량 센서1개3,000원
점퍼 와이어 3개
합계5,000원

핀 연결

[14편] 물 새는지, 얼마나 쓰는지 숫자로 보자 - YF-S201 수도 사용량 노드 배선도
센서/모듈보드 연결
빨강 (VCC)5V (VU)
검정 (GND)GND
노랑 (OUT)D2 (GPIO4)

전체 코드

YF-S201은 1리터당 약 450펄스를 발생시킵니다. 인터럽트로 펄스를 세고, 일정 간격으로 리터 단위로 환산해 전송합니다.

[14편] 물 새는지, 얼마나 쓰는지 숫자로 보자 - YF-S201 수도 사용량 노드 - 전체 코드
#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 FLOW_PIN     4    // D2 (인터럽트 가능 핀)
#define SLOT_NO      16
#define PULSE_PER_L  450  // YF-S201: 450펄스/L
#define INTERVAL     15000

volatile unsigned long pulseCount = 0;
unsigned long lastSend = 0;

void ICACHE_RAM_ATTR countPulse() {
  pulseCount++;
}

void setup() {
  Serial.begin(115200);
  pinMode(FLOW_PIN, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(FLOW_PIN), countPulse, FALLING);

  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() {
  unsigned long now = millis();
  if (now - lastSend > INTERVAL) {
    // 펄스 → 리터 변환
    unsigned long pulses;
    noInterrupts();
    pulses = pulseCount;
    pulseCount = 0;
    interrupts();

    float liters = (float)pulses / PULSE_PER_L;

    Serial.print("Pulses: "); Serial.print(pulses);
    Serial.print(" -> Water: "); Serial.print(liters, 2);
    Serial.println(" L");

    WiFiClient client; HTTPClient http;
    String url = String(hubURL) + "/set?no"
               + String(SLOT_NO) + "=" + String(liters, 1);
    http.begin(client, url); http.GET(); http.end();
    Serial.println("HTTP -> " + url);

    lastSend = now;
  }
  delay(100);
}
실제 배관에 설치하려면 배관 규격(보통 1/2인치)에 맞는 피팅이 필요하다. DIY보다는 배관 공사 경험이 있는 사람에게 맡기는 걸 추천.

확인

수도꼭지를 틀면 시리얼 모니터에 Water: 2.5 L 같은 값이 표시되고, 두뇌 16번 슬롯에도 표시됩니다.

시리얼 모니터

업로드가 끝나면 Arduino IDE의 툴 → 시리얼 모니터를 열고 보드레이트를 115200으로 맞춥니다. 다음은 정상 동작을 확인하기 위한 시리얼 모니터 출력 예시입니다. 이 로그는 실제 캡처가 아니라, 유량 센서 펄스와 16번 슬롯 누적 사용량 전송을 확인하는 예시입니다.

[BOOT] Home IoT Node #14 - Water flow YF-S201
[INT] pulse counter attached, debounce=50ms
[SENSOR] pulses=38 flow=1.9L/min total=0.32L
[FILTER] air_bubble_noise=PASS
[HTTP] GET /set?no16=0.32
[HUB] 200 OK - slot no16 updated
[CHECK] leak watch enabled when flow continues too long
  • Connected 또는 connected가 보이면 Wi-Fi 연결 단계는 통과한 것입니다.
  • HTTP 200 또는 200 OK가 보이면 두뇌 서버에 값이 전달된 것입니다.
  • 값이 갱신되지 않으면 먼저 URL의 슬롯 번호와 센서 배선을 함께 확인합니다.

다음 글 예고

빗물 감지는 우적 센서 하나로 시작할 수 있는 비교적 단순한 구성입니다.

준비물: Wemos D1 Mini (2,000원), 우적 센서 (1,000원)

YF-S201 수도 사용량 센서 활용 가이드

YF-S201은 물이 흐를 때 내부 임펠러(날개바퀴)가 돌면서 만드는 펄스 신호를 세어 사용량을 리터 단위로 환산하는 홀센서 방식 유량계입니다. 배선과 코드는 앞 절에서 다뤘으니, 여기서는 '우리집 IoT 허브'에서 실제로 쓸모 있게 만드는 방법을 정리합니다.

안 될 때 체크포인트

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

증상가능한 원인현장 해결 방법
물을 안 써도 펄스가 생김배관 공기방울이나 수압 변화로 임펠러가 순간적으로 움직임50ms 이하로 너무 빠른 펄스나 짧은 단발 펄스는 노이즈로 버립니다.
실제 물 사용량과 차이가 큼YF-S201의 보정 계수는 설치 방향·수압·배관 굵기에 따라 달라짐1L 또는 5L 계량컵으로 실제 배출량을 재고 pulse-per-liter 값을 현장 보정합니다.
배관 연결부에서 미세 누수나사산 체결 부족 또는 테플론 테이프 감김 부족물 흐름 방향 화살표를 맞추고 테플론 테이프를 충분히 감은 뒤 처음 24시간은 휴지로 누수 흔적을 확인합니다.
온수 라인에서 센서가 빨리 망가짐저가형 YF-S201은 고온수와 압력 변화에 약함정격 온도와 압력을 확인하고, 가능하면 냉수 측정용으로 쓰거나 온수 전용 센서를 선택합니다.

활용 방안

단순히 물이 흐르는지 아는 것을 넘어, 누적 리터를 쌓으면 다양한 지표가 나옵니다.

  • 수도요금 추정: 월 누적 사용량에 지역 요금 단가를 곱해 이번 달 예상 요금을 대시보드에 표시합니다.
  • 누수 감지: 새벽 2~4시처럼 아무도 물을 안 쓰는 시간대에 지속적인 미세 흐름이 잡히면 변기 부속 누수나 배관 누수로 판단해 알림을 보냅니다.
  • 정원 관수량 관리: 텃밭·화단 호스에 달아 '오늘 몇 리터 줬는지'를 기록하고 목표치 도달 시 자동으로 밸브를 잠급니다.
  • 샤워 시간·습관: 1회 샤워당 사용량과 지속 시간을 로깅해 가족별 물 절약 챌린지에 활용합니다.

추천 설치 장소

  • 화살표 방향 준수: 센서 몸체의 화살표를 실제 물 흐름 방향과 반드시 일치시킵니다. 반대로 달면 계측이 부정확하고 임펠러가 잘 안 돕니다.
  • 수평 설치: 임펠러 축이 수평이 되도록 눕혀 달면 저유량에서도 회전이 안정적입니다. 수직 배관보다 수평 구간이 유리합니다.
  • 계량기 이후: 수도 계량기 다음, 분기되기 전 지점에 달아야 집 전체 사용량을 잡습니다. 특정 용도만 재려면 해당 분기 라인에 답니다.
  • 진동·역류 주의: 펌프 바로 뒤나 급격한 꺾임 직후는 난류·역류로 오차가 커지니 피하고, 직선 배관 구간을 확보합니다.
  • 접근 쉬운 실내: 청소·점검·배선 정비가 필요하므로 손이 닿고 동파 걱정 없는 실내에 두는 것이 좋습니다.

실전 팁과 주의점

  • 보정계수는 유량별로 다르다: 데이터시트의 'F=7.5×Q' 같은 값은 평균치일 뿐, 실제로는 저유량에서 오차가 큽니다. 1L 계량컵이나 페트병으로 여러 유량에서 직접 채수해 나만의 펄스-리터 계수를 구합니다.
  • 저유량 감지 한계: YF-S201은 대체로 분당 1L 미만의 아주 약한 흐름은 임펠러가 안 돌아 놓칩니다. 미세 누수 감지에는 한계가 있음을 감안합니다.
  • 이물질·석회 청소: 모래·녹·석회가 임펠러에 끼면 회전이 뻑뻑해집니다. 앞단에 간이 필터(스트레이너)를 두고, 주기적으로 분리 세척합니다.
  • 방수 배선: 센서 커넥터 부위는 물이 튀는 곳이라 열수축 튜브·에폭시로 방수하고, 결선부가 배관보다 낮지 않게 배치해 물이 타고 들어오지 않게 합니다.

자주 묻는 질문

Q. 온수에도 쓸 수 있나요? A. YF-S201은 보통 80℃ 이하 권장입니다. 급탕 직후 고온 구간은 피하고, 온수용은 내열 사양(YF-S201C 등)을 확인합니다.

Q. 수압이 세지면 센서가 터지지 않나요? A. 정격 사용 압력(약 1.75MPa 내외)을 넘지 않으면 괜찮습니다. 수격(워터해머)이 잦은 곳은 앞단에 감압·완충을 두는 것이 좋습니다.

Q. 값이 실제 계량기와 안 맞아요. A. 대부분 보정계수 문제입니다. 계량기 눈금과 센서 누적값을 같은 구간에서 비교해 계수를 재조정하면 오차가 크게 줄어듭니다.

우리집 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편] 집 안 상태가 한 화면에 보이기 시작했다 · 슬롯 전체