Home IoT Hub Series · 09
[9편] 외출했는데 가스레인지가 켜져 있지 않을까? 화구 온도로 확인하는 IoT 안전 노드
![[9편] 외출했는데 가스레인지가 켜져 있지 않을까? 화구 온도로 확인하는 IoT 안전 노드 대표 이미지](/iot-lab/assets/gas-stove-thermocouple-hero.png)
이 글은 2편: 두뇌 만들기에서 구축한 중앙 NodeMCU 서버에 연결되는 우리집 IoT 허브 구성 문서입니다. K타입 열전대와 MAX6675가 화구 주변 온도를 읽어 요리 중인지 여부를 중앙 허브에 전달합니다. 수집된 데이터는 로컬 무선망
IoT_Hub_Net을 통해 중앙 서버의 6번 가스레인지 사용 상태 슬롯(/set?no6=값)을 갱신하며, 20채널 스마트홈 통합 컨트롤러의 판단 근거로 사용됩니다.K타입 열전대와 MAX6675 모듈로 화구 근처 온도를 측정합니다. 50℃ 이상이면 "요리 중"으로 판정해 6번 슬롯(Stove)에 1을 보내고, 식으면 0으로 돌아갑니다. 가스레인지가 켜진 상태로 외출하는 상황을 줄이는 용도입니다.
준비물과 가격
| 부품 | 수량 | 개당 가격 |
|---|---|---|
| Wemos D1 Mini | 1개 | 2,000원 |
| K타입 열전대 + MAX6675 모듈 | 1세트 | 3,000원 |
| 점퍼 와이어 | 5개 | — |
| 합계 | 5,000원 |
핀 연결
MAX6675는 SPI 통신을 사용합니다. 열전대를 MAX6675 모듈에 꽂고, 모듈을 D1 Mini에 연결합니다.
| 센서/모듈 | 보드 연결 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SCK | D5 (GPIO14) |
| CS | D6 (GPIO12) |
| SO | D7 (GPIO13) |
선행 작업
MAX6675 library by Adafruit 설치.
전체 코드
50℃를 임계값으로 두고, 넘으면 1(사용 중), 아래면 0을 6번 슬롯으로 보냅니다.
#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #include <max6675.h> const char* ssid = "IoT_Hub_Net"; const char* password = "iothub1234"; const char* hubURL = "http://192.168.1.1"; #define SCK 14 // D5 #define CS 12 // D6 #define SO 13 // D7 #define SLOT_NO 6 #define THRESHOLD 50 // 50℃ 이상 = 사용 중 #define INTERVAL 5000 MAX6675 thermo(SCK, CS, SO); void setup() { Serial.begin(115200); 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() { float temp = thermo.readCelsius(); if (isnan(temp)) { Serial.println("Read error"); delay(2000); return; } int inUse = (temp > THRESHOLD) ? 1 : 0; Serial.print("Stove: "); Serial.print(temp); Serial.print(" C -> "); Serial.println(inUse ? "ON" : "OFF"); WiFiClient client; HTTPClient http; String url = String(hubURL) + "/set?no" + String(SLOT_NO) + "=" + String(inUse); http.begin(client, url); http.GET(); http.end(); Serial.println("HTTP -> " + url); delay(INTERVAL); }
업로드 및 확인
열전대를 손으로 감싸 쥐면 체온(36℃)으로는 0, 라이터로 살짝 가열하면 50℃를 넘어 1로 바뀐다. 두뇌 OLED 6번 Stove가 0↔1로 토글되는지 확인.
시리얼 모니터
업로드가 끝나면 Arduino IDE의 툴 → 시리얼 모니터를 열고 보드레이트를 115200으로 맞춥니다. 다음은 정상 동작을 확인하기 위한 시리얼 모니터 출력 예시입니다. 이 로그는 실제 캡처가 아니라, MAX6675 열전대 값과 6번 슬롯 전송을 점검하기 위한 출력 예시입니다.
[BOOT] Home IoT Node #09 - Gas stove thermocouple [SPI] MAX6675 ready, sample_avg=3 [SENSOR] burner_temp=36.4C [STATE] stove=OFF, spike_filter=PASS [HTTP] GET /set?no6=0 [HUB] 200 OK - slot no6=OFF [WARN] if burner_temp > 80C while away, send alert
Connected또는connected가 보이면 Wi-Fi 연결 단계는 통과한 것입니다.HTTP 200또는200 OK가 보이면 두뇌 서버에 값이 전달된 것입니다.- 값이 갱신되지 않으면 먼저 URL의 슬롯 번호와 센서 배선을 함께 확인합니다.
안 될 때 체크포인트
| 증상 | 원인 | 해결 |
|---|---|---|
| 항상 0만 나옴 | 열전대 접촉 불량 | MAX6675 모듈에 열전대가 단단히 꽂혔는지 확인 (나사 조임식) |
nan만 나옴 | SPI 핀 오배선 | SCK-D5, CS-D6, SO-D7 순서 재확인 |
현장 추가 체크포인트
이 노드는 코드만 보면 짧아 보일 수 있지만, 실제 집에 붙이면 센서 위치·전원·무선망·노이즈 때문에 값이 쉽게 흔들립니다. 아래 항목은 두뇌 서버에 잘못된 판단 근거가 들어가지 않도록 현장에서 먼저 점검할 내용입니다.
| 증상 | 가능한 원인 | 현장 해결 방법 |
|---|---|---|
| 불이 꺼져도 사용 중으로 남음 | 화구 주변 금속의 잔열이 오래 남아 임계값 아래로 천천히 내려감 | 켜짐 임계값과 꺼짐 임계값을 다르게 두고, 꺼짐 판정은 3~5분 연속 낮은 온도일 때만 보냅니다. |
| 온도가 순간적으로 널뜀 | MAX6675 SPI 선이 점화기·전원선 노이즈를 탐 | 센서선과 전원선을 분리하고, 3회 이상 평균 또는 중앙값 필터를 적용합니다. |
| 실리콘 피복이 손상됨 | 열전대 케이블이 화구나 냄비 바닥에 너무 가까움 | 센서 끝만 열원 근처에 두고 케이블은 금속 클립으로 열원에서 떨어뜨려 고정합니다. |
| 요리 종류에 따라 감지가 들쭉날쭉함 | 약불·잔열·뚜껑 사용으로 화구 주변 온도 패턴이 다름 | 처음 며칠은 시리얼 로그를 남겨 실제 주방 기준 임계값을 조정합니다. |
다음 글 예고
가스 누출 경고. MQ-5 가스 센서. 7번 슬롯에 1이 들어가면 부저가 울립니다.
가스레인지 사용 감지 활용 방안
K형 열전대와 MAX6675로 화구 온도를 읽어 50°C를 넘으면 '조리 중'으로 판정하면, 단순한 온도계를 넘어 생활 안전 도구가 됩니다.
- 외출 시 켜둔 채 나감 감지: '조리 중' 상태가 계속되는데 현관 도어센서가 열리고 재실 감지가 없으면 '불 켜둔 채 외출' 경보를 허브로 전송합니다.
- 조리 시간 알림: 50°C 진입 시각을 기록해 20~30분 이상 지속되면 '국 졸임 상태 확인 필요' 푸시를 보냅니다. 끓임·조림 태우기 예방에 효과적입니다.
- 노인·1인가구 안전: 하루 중 한 번도 조리 신호가 없으면 가족에게 '오늘 취사 활동 없음'을 알려 안부 확인 트리거로 활용합니다.
- 자동 알림 시나리오: 임계 초과가 60분 넘게 유지되면 스마트플러그로 주방 환풍기를 켜거나 스마트스피커로 음성 경고를 냅니다.
추천 설치 장소
- 화염 직접 노출 금지: 팁을 불꽃 안에 두면 800°C 이상으로 MAX6675 측정 범위를 넘고 열전대가 급속 산화됩니다. 화구에서 3~5cm 옆·위, 삼발이(그레이트) 가장자리에 붙여 냄비 복사열과 주변 공기 상승 온도를 받게 합니다.
- 고정 방법: 스테인리스 밴드나 세라믹 절연 튜브로 삼발이 다리에 밀착 고정하고, 팁이 흔들려 불꽃 쪽으로 넘어가지 않게 합니다.
- 가연물 이격: 연장선·피복은 화구에서 최소 10cm 이상 떨어뜨리고, 유리섬유·테프론 등 내열 피복선을 사용합니다. 플라스틱 커넥터는 조리대 뒤쪽 저온부에 둡니다.
실전 팁과 주의점
- 임계값 튜닝: 여름 주방 실온이 35°C까지 오르면 오검지가 납니다. 50°C가 낮다면 55~60°C로 올리거나 '상승 기울기'까지 함께 봅니다.
- 잔열 지연: 불을 꺼도 삼발이·냄비 잔열로 수 분간 임계 위에 머뭅니다. '조리 종료'는 온도가 하강세로 5분 이상 지속될 때 판정합니다.
- 분해능·노이즈: MAX6675는 0.25°C 분해능에 SPI 갱신이 약 0.22초입니다. 값이 튀면 3~5회 이동평균으로 안정화하고, 신호선은 가전 전원선과 분리합니다.
- 극성·연장: K형은 (+)크로멜/(-)알루멜 극성이 있어 뒤바꾸면 반대로 읽습니다. 연장 시 반드시 K형 보상도선을 사용합니다. 일반 구리선은 오차를 만듭니다.
- 화상 주의: 설치·점검은 반드시 불을 끄고 충분히 식은 뒤 하고, 금속 팁을 맨손으로 만지지 않는 것이 좋습니다.
자주 묻는 질문
Q. 인덕션에도 되나요? 인덕션은 냄비 자체가 발열하므로 냄비 바닥 복사열은 잡히지만 반응이 느립니다. 가스레인지 화염 감지가 훨씬 정확합니다.
Q. 열전대가 냄비에 직접 닿아야 하나요? 아니요. 공기·복사열만으로 50°C 판정에 충분하며, 직접 접촉은 팁 손상과 조리 방해를 유발합니다.
Q. 정전 후 값이 이상해요. MAX6675는 콜드정션 보정에 몇 초가 필요합니다. 재기동 직후 첫 몇 개 샘플은 버리고 사용합니다.
이 글은 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편] 집 안 상태가 한 화면에 보이기 시작했다 · 슬롯 전체