Home IoT Hub Series · 08
[8편] 보일러가 실제로 도는지 배관 온도로 확인하자 - 난방·온수 DS18B20 모니터링
![[8편] 보일러가 실제로 도는지 배관 온도로 확인하자 - 난방·온수 DS18B20 모니터링 대표 이미지](/iot-lab/assets/boiler-hot-water-temperature-hero.png)
이 글은 2편: 두뇌 만들기에서 구축한 중앙 NodeMCU 서버에 연결되는 우리집 IoT 허브 구성 문서입니다. 두 개의 DS18B20이 난방수와 온수 배관 온도를 동시에 보내 난방 가동·온수 사용·동파 위험을 구분하게 합니다. 수집된 데이터는 로컬 무선망
IoT_Hub_Net을 통해 중앙 서버의 5번 보일러 배관과 17번 온수 배관 슬롯(/set?no5=보일러&no17=온수)을 갱신하며, 20채널 스마트홈 통합 컨트롤러의 판단 근거로 사용됩니다.DS18B20은 OneWire 버스 하나에 여러 개를 병렬로 연결할 수 있습니다. 이 특징을 활용해 보일러 배관 온도(5번 Boiler)와 온수 배관 온도(17번 Hot Water)를 한 번에 측정합니다.
준비물과 가격
| 부품 | 수량 | 개당 가격 |
|---|---|---|
| Wemos D1 Mini | 1개 | 2,000원 |
| DS18B20 방수형 | 2개 | 4,000원 |
| 4.7kΩ 저항 | 1개 | 100원 |
| 점퍼 와이어 | 4개 | — |
| 합계 | 6,100원 |
핀 연결
두 DS18B20의 리드선을 같은 색끼리 묶어서 D1 Mini에 연결한다. OneWire 버스 하나에 여러 장치를 병렬로 붙이는 구조다.
| 센서/모듈 | 보드 연결 |
|---|---|
| 빨강 | 3.3V |
| 검정 | GND |
| 노랑 | D1 (GPIO5) |
전체 코드
#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); }
업로드 및 확인
시리얼 모니터에 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℃ 이하 접근 시 사전 경보를 둡니다. |
다음 글 예고
가스레인지 사용 감지는 열전대를 화구 근처에 설치해 요리 중인지 판별하는 구성입니다.
보일러 + 온수 배관 온도로 무엇을 할 수 있나
DS18B20 두 개를 하나의 OneWire 버스에 물려 보일러 난방수 배관과 온수 배관 온도를 동시에 읽으면, 단순한 숫자를 넘어 집 안 에너지 흐름을 실시간으로 파악할 수 있습니다.
활용 방안
- 보일러 가동 확인: 배관 온도가 5~10분 안에 40℃ 이상으로 오르면 정상 점화, 그대로면 점화 실패나 가스 차단을 원격에서 감지합니다.
- 난방·온수 효율 분석: 입수관과 출수관의 온도차(ΔT)를 기록하면 보일러가 실제로 물을 얼마나 데우는지, 순환이 원활한지 판단할 수 있습니다.
- 동파 예방 경보: 실외 배관 온도가 3℃ 밑으로 떨어지면 스마트폰 알림을 보내 미리 온수를 흘리거나 보일러를 켜도록 합니다.
- 외출모드 난방 점검: 외출 중에도 배관이 얼지 않을 최소 온도를 유지하는지 확인하고, 필요할 때만 잠깐 가동해 낭비를 줄입니다.
- 가스요금 절감: 온수 배관이 이미 뜨거운데 재가동되는 낭비, 야간 과열 난방 등을 데이터로 찾아 설정을 조정하면 겨울 요금이 눈에 띄게 줄어듭니다.
추천 설치 장소
- 배관 표면 밀착: 센서 금속면에 열전도 그리스를 얇게 바르고 알루미늄 테이프로 배관에 눌러 붙인 뒤, 그 위를 단열 테이프로 감싸 실내 공기 영향을 차단합니다.
- 입수·출수관 구분: 보일러 몸체에서 나가는 관(출수·뜨거움)과 돌아오는 관(입수·미지근)에 각각 부착해 ΔT를 계산합니다.
- 실외 동파 지점: 계량기함, 외벽을 타고 오르는 노출 배관, 보일러실 찬 구석 등 가장 먼저 어는 곳에 실외 센서를 둡니다.
실전 팁·주의점
- 표면온도 오차: 배관 표면온도는 내부 물 온도보다 보통 3~8℃ 낮게 읽힙니다. 절대값보다 변화 추세와 ΔT로 판단합니다.
- 다중센서 주소 구분: 두 센서는 각자 고유 64bit 주소가 있으므로, 설치 전 하나씩 연결해 주소를 기록하고 코드에서 "보일러/온수"로 라벨링합니다.
- 케이블 내열: 온수관은 60℃를 넘기 쉬우므로 일반 PVC 피복 대신 실리콘·테프론 내열 케이블을 쓰고 배관 밀착부 결선을 깔끔히 마감합니다.
- 단열 마감: 센서 위 단열이 부실하면 실내 온도에 끌려가 값이 흔들립니다. 최소 2~3겹 감아 안정시킵니다.
자주 묻는 질문
- Q. 배관을 뜯지 않고 표면에만 붙여도 쓸모가 있나요? 네. 절대 온도가 조금 낮게 나올 뿐, 가동·정지 판단과 ΔT 분석에는 표면 부착만으로 충분합니다.
- Q. 두 센서가 값이 뒤바뀌어 나옵니다. 코드에서 주소 매핑이 반대일 가능성이 큽니다. 한쪽을 손으로 데워 어느 라벨이 오르는지 확인해 주소를 교정합니다.
- Q. 실외 센서 방수는 어떻게 하나요? 스테인리스 방수형 DS18B20을 쓰고, 케이블 인입부는 열수축 튜브와 부틸 테이프로 이중 방수하면 겨울 내내 안정적입니다.
이 글은 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편] 집 안 상태가 한 화면에 보이기 시작했다 · 슬롯 전체