Home IoT Hub Series · 08

[8편] 보일러가 실제로 도는지 배관 온도로 확인하자 - 난방·온수 DS18B20 모니터링

[8편] 보일러가 실제로 도는지 배관 온도로 확인하자 - 난방·온수 DS18B20 모니터링 대표 이미지
시스템 아키텍처 및 데이터 파이프라인 안내
이 글은 2편: 두뇌 만들기에서 구축한 중앙 NodeMCU 서버에 연결되는 우리집 IoT 허브 구성 문서입니다. 두 개의 DS18B20이 난방수와 온수 배관 온도를 동시에 보내 난방 가동·온수 사용·동파 위험을 구분하게 합니다. 수집된 데이터는 로컬 무선망 IoT_Hub_Net을 통해 중앙 서버의 5번 보일러 배관과 17번 온수 배관 슬롯(/set?no5=보일러&no17=온수)을 갱신하며, 20채널 스마트홈 통합 컨트롤러의 판단 근거로 사용됩니다.

DS18B20은 OneWire 버스 하나에 여러 개를 병렬로 연결할 수 있습니다. 이 특징을 활용해 보일러 배관 온도(5번 Boiler)와 온수 배관 온도(17번 Hot Water)를 한 번에 측정합니다.

준비물과 가격

부품수량개당 가격
Wemos D1 Mini1개2,000원
DS18B20 방수형2개4,000원
4.7kΩ 저항1개100원
점퍼 와이어4개
합계6,100원

핀 연결

[8편] 보일러가 실제로 도는지 배관 온도로 확인하자 - 난방·온수 DS18B20 모니터링 배선도

두 DS18B20의 리드선을 같은 색끼리 묶어서 D1 Mini에 연결한다. OneWire 버스 하나에 여러 장치를 병렬로 붙이는 구조다.

센서/모듈보드 연결
빨강3.3V
검정GND
노랑D1 (GPIO5)
저항은 하나만 있으면 된다. 모든 센서가 같은 DATA 라인을 공유하기 때문이다.

전체 코드

[8편] 보일러가 실제로 도는지 배관 온도로 확인하자 - 난방·온수 DS18B20 모니터링 - 전체 코드
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>

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

#define ONE_WIRE_BUS 5
#define INTERVAL     15000

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(115200);
  sensors.begin();

  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! " + WiFi.localIP().toString());
}

void loop() {
  sensors.requestTemperatures();

  // 인덱스 0 = 먼저 인식된 센서, 1 = 나중에 인식된 센서
  // 둘 중 어느 게 보일러고 어느 게 온수인지는 온도값으로 구분한다
  float t0 = sensors.getTempCByIndex(0);
  float t1 = sensors.getTempCByIndex(1);

  // 더 뜨거운 쪽이 보일러(난방 배관), 덜 뜨거운 쪽이 온수
  float boiler = (t0 > t1) ? t0 : t1;
  float hotWater = (t0 > t1) ? t1 : t0;

  if (boiler < -50 || hotWater < -50) {
    Serial.println("Sensor error, retry...");
    delay(2000); return;
  }

  Serial.printf("Boiler: %.1f C, HotWater: %.1f C\n", boiler, hotWater);

  WiFiClient client; HTTPClient http;
  String url = String(hubURL) + "/set?no5=" + String(boiler)
             + "&no17=" + String(hotWater);
  http.begin(client, url);
  int code = http.GET(); http.end();
  Serial.print("HTTP "); Serial.print(code);
  Serial.print(" -> "); Serial.println(url);
  Serial.println();

  delay(INTERVAL);
}
인덱스 0, 1은 센서가 인식된 순서라서 누가 보일러고 누가 온수인지 모른다. 그래서 코드에서 더 뜨거운 쪽을 보일러로 판정한다. 난방 배관이 보통 40~60℃, 온수 배관이 30~45℃니까 대부분 맞는다.

업로드 및 확인

시리얼 모니터에 Boiler: 45.0 C, HotWater: 38.5 C 출력, 두뇌 OLED 5번 Boiler, 17번 Hot Water 확인.

시리얼 모니터

업로드가 끝나면 Arduino IDE의 툴 → 시리얼 모니터를 열고 보드레이트를 115200으로 맞춥니다. 다음은 정상 동작을 확인하기 위한 시리얼 모니터 출력 예시입니다. 이 로그는 실제 캡처가 아니라, 난방 배관과 온수 배관 온도가 5번·17번 슬롯으로 들어가는지 확인하는 예시입니다.

[BOOT] Home IoT Node #08 - Boiler and hot-water pipes
[1-WIRE] boiler sensor OK, hot-water sensor OK
[SENSOR] boiler_pipe=43.7C hot_water_pipe=51.2C
[FILTER] thermal_lag=stable, offset=0.0C
[HTTP] GET /set?no5=43.7&no17=51.2
[HUB] 200 OK - slots no5/no17 updated
[STATE] heating=ON, hot_water=ON
  • Connected 또는 connected가 보이면 Wi-Fi 연결 단계는 통과한 것입니다.
  • HTTP 200 또는 200 OK가 보이면 두뇌 서버에 값이 전달된 것입니다.
  • 값이 갱신되지 않으면 먼저 URL의 슬롯 번호와 센서 배선을 함께 확인합니다.

안 될 때 체크포인트

증상원인해결
한 센서만 읽힘접촉 불량각 센서의 노란선이 DATA 라인에 확실히 물렸는지 확인
두 센서 다 -127풀업 저항 누락4.7kΩ 저항 확인
보일러/온수가 바뀜온도 차이가 애매함배관이 식은 상태에서는 구분이 안 될 수 있음. 보일러를 잠깐 켜서 확인

현장 추가 체크포인트

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

증상가능한 원인현장 해결 방법
배관 온도가 실제보다 낮게 나옴센서가 배관에 밀착되지 않아 실내 공기 온도를 함께 읽음센서 금속면에 서멀 구리스를 바르고 케이블타이로 강하게 묶은 뒤 알루미늄/단열 테이프로 감쌉니다.
보일러와 온수 라벨이 뒤바뀜OneWire 센서 인식 순서가 부팅마다 바뀌거나 온도 기반 판정이 애매함설치 전 각 센서 주소를 기록해 코드에서 고정 매핑하고, 임시 가열 테스트로 라벨을 검증합니다.
값이 계단식으로 늦게 오름배관 표면과 내부 물 사이에 열 지연이 있음순간 온도보다 3~5분 변화율과 입출수 온도차를 함께 봅니다.
겨울철 실외 배관 경보가 늦음센서 위 단열이 부족해 외기와 배관 온도가 섞여 읽힘동파 지점은 센서 위를 2~3겹 이상 단열하고, 3℃ 이하 접근 시 사전 경보를 둡니다.

다음 글 예고

가스레인지 사용 감지는 열전대를 화구 근처에 설치해 요리 중인지 판별하는 구성입니다.

준비물: Wemos D1 Mini (2,000원), K타입 열전대 + MAX6675 모듈 (3,000원)

보일러 + 온수 배관 온도로 무엇을 할 수 있나

DS18B20 두 개를 하나의 OneWire 버스에 물려 보일러 난방수 배관온수 배관 온도를 동시에 읽으면, 단순한 숫자를 넘어 집 안 에너지 흐름을 실시간으로 파악할 수 있습니다.

활용 방안

  • 보일러 가동 확인: 배관 온도가 5~10분 안에 40℃ 이상으로 오르면 정상 점화, 그대로면 점화 실패나 가스 차단을 원격에서 감지합니다.
  • 난방·온수 효율 분석: 입수관과 출수관의 온도차(ΔT)를 기록하면 보일러가 실제로 물을 얼마나 데우는지, 순환이 원활한지 판단할 수 있습니다.
  • 동파 예방 경보: 실외 배관 온도가 3℃ 밑으로 떨어지면 스마트폰 알림을 보내 미리 온수를 흘리거나 보일러를 켜도록 합니다.
  • 외출모드 난방 점검: 외출 중에도 배관이 얼지 않을 최소 온도를 유지하는지 확인하고, 필요할 때만 잠깐 가동해 낭비를 줄입니다.
  • 가스요금 절감: 온수 배관이 이미 뜨거운데 재가동되는 낭비, 야간 과열 난방 등을 데이터로 찾아 설정을 조정하면 겨울 요금이 눈에 띄게 줄어듭니다.

추천 설치 장소

  • 배관 표면 밀착: 센서 금속면에 열전도 그리스를 얇게 바르고 알루미늄 테이프로 배관에 눌러 붙인 뒤, 그 위를 단열 테이프로 감싸 실내 공기 영향을 차단합니다.
  • 입수·출수관 구분: 보일러 몸체에서 나가는 관(출수·뜨거움)과 돌아오는 관(입수·미지근)에 각각 부착해 ΔT를 계산합니다.
  • 실외 동파 지점: 계량기함, 외벽을 타고 오르는 노출 배관, 보일러실 찬 구석 등 가장 먼저 어는 곳에 실외 센서를 둡니다.

실전 팁·주의점

  • 표면온도 오차: 배관 표면온도는 내부 물 온도보다 보통 3~8℃ 낮게 읽힙니다. 절대값보다 변화 추세와 ΔT로 판단합니다.
  • 다중센서 주소 구분: 두 센서는 각자 고유 64bit 주소가 있으므로, 설치 전 하나씩 연결해 주소를 기록하고 코드에서 "보일러/온수"로 라벨링합니다.
  • 케이블 내열: 온수관은 60℃를 넘기 쉬우므로 일반 PVC 피복 대신 실리콘·테프론 내열 케이블을 쓰고 배관 밀착부 결선을 깔끔히 마감합니다.
  • 단열 마감: 센서 위 단열이 부실하면 실내 온도에 끌려가 값이 흔들립니다. 최소 2~3겹 감아 안정시킵니다.

자주 묻는 질문

  • Q. 배관을 뜯지 않고 표면에만 붙여도 쓸모가 있나요? 네. 절대 온도가 조금 낮게 나올 뿐, 가동·정지 판단과 ΔT 분석에는 표면 부착만으로 충분합니다.
  • Q. 두 센서가 값이 뒤바뀌어 나옵니다. 코드에서 주소 매핑이 반대일 가능성이 큽니다. 한쪽을 손으로 데워 어느 라벨이 오르는지 확인해 주소를 교정합니다.
  • Q. 실외 센서 방수는 어떻게 하나요? 스테인리스 방수형 DS18B20을 쓰고, 케이블 인입부는 열수축 튜브와 부틸 테이프로 이중 방수하면 겨울 내내 안정적입니다.
우리집 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편] 집 안 상태가 한 화면에 보이기 시작했다 · 슬롯 전체