스마트 홈을 위한 고급 멀티존 난방 제어 시스템
부품 및 소모품
| 아두이노 우노 (Arduino UNO, 5존 초과 시 메가 권장) |
× |
1 |
| Keyes 8채널 5V 릴레이 보드 |
× |
1 |
| Honeywell MT8-230-NC 소형 열전 액추에이터 (230V AC) |
× |
1 |
프로젝트 소개
거실 단일 온도조절기로는 주방이 너무 덥거나 춥습니다. 상용 멀티존 컨트롤러(EvoHome 등)는 고가라, 아두이노 우노로 그 지능을 구현했습니다. 제 문제를 완벽히 해결했습니다.
주요 특징
- 핀 매핑과 존 수만 설정하면 됨
- 아두이노 우노로 최대 5개 바닥 난방 존 제어 가능
- 아두이노 메가 사용 시 존 수 거의 무제한
제어 대상
- 바닥 난방 펌프
- 모든 존을 하나의 온도조절기로 통합해 중앙 난방기(CV)에 전달
- 존별 밸브 개폐
- 워치독 타이머로 무정지 동작 보장
존별 개별 난방
- 존마다 온도조절기(서모스탯)로 난방 요청 감지
- 존마다 릴레이로 밸브 1개 이상 제어 (한 방에 여러 바닥 난방 그룹이면 밸브 병렬 연결)
- 편의성 증대 + 에너지 절약 (과열 방지)
펌프 제어 로직
- 난방 필요 시에만 펌프 가동 → 연간 100~200유로 전기세 절약 (80W 펌프 24/7 가동 대비)
- 난방 요청 없으면 36시간마다 8분 가동 (여름철 펌프 고착 방지)
- 밸브 열리는 시간(3~5분) 기다린 뒤 펌프 시작
바닥 난방 없는 방(라디에이터) 옵션 제어
- 라디에이터에 온도조절 노브가 있으면 차가운 방만 데워짐
- 제어 원하는 방에 서모스탯 추가, No_Zone 입력에 병렬 연결
참고 사항
- 모든 존을 제어할 필요 없음. 너무 덥거나 추운 존만 제어, 나머지는 수동 노브 사용
- 인터넷 연결 의도적으로 배제: 오작동 위험 증가, 원격 제어는 스마트 서모스탯으로 충분
코드
ProjectCV.ino (메인 스케치)
/* Floor Unit heating controller for multiple Rooms/Zones v1.0
* Copyright: GPL-3.0 by Eric Kreuwels, 2017
* Credits: Peter Kreuwels for use-case definitions
* 테스트 전 실사용 검증 필수, 작성자 책임지지 않음 */
#include <avr/wdt.h> // Watchdog
// #define FAST_MODE // 테스트용: 루프 50배 속도, 실펌프 연결 시 주의!
#define VALVE_TIME 3000L // 밸브 개폐 5분 (안전 마진)
#ifdef FAST_MODE
#define PUMP_MAINTENANCE_TIME 108000L // 4분마다 유지보수 런 (테스트)
#else
#define PUMP_MAINTENANCE_TIME 1300000L // 36시간마다 유지보수 런 (실사용)
#endif
#define PUMP_ACTIVATION_TIME 5000L // 펌프 가동 8분 (테스트 10초)
#define COOLDOWN_TIME 18000L // 난방 후 30분 순환 (테스트 40초)
#include "./Devices.h"
struct Zone {
String name;
Valve valve;
Thermostat thermostat;
};
////////////////////////////////////////////////////
// 설정 블록 - 핀 매핑 자유 변경 가능 (아두이노 우노 기준)
#define HEATER_PIN 4 // 중앙 난방기 서모스탯 입력 릴레이
#define FU_PUMP_PIN 5 // 바닥 난방 펌프 릴레이
#define LIVING_VALVE 7 // 존 1 밸브
#define KITCHEN_VALVE 6 // 존 2 밸브
#define DINING_VALVE 3 // 존 3 밸브
#define LIVING_THERMO 8 // 존 1 서모스탯
#define KITCHEN_THERMO 9 // 존 2 서모스탯
#define DINING_THERMO 11 // 존 3 서모스탯
#define NO_ZONE_THERMO 10 // 바닥 난방 없는 방 서모스탯 (옵션)
#define HEATING_LED 12 // 난방 중 켜짐, 쿨다운 시 깜빡임
#define INDICATION_LED 13 // 보드 동작 표시 (제거 시 IO 핀 확보 가능)
#define NR_ZONES 3
Zone Zones[NR_ZONES] = {
{"Living Room", Valve(LIVING_VALVE, "Living Valve"), Thermostat(LIVING_THERMO, "Living Thermostat")},
{"Kitchen Area", Valve(KITCHEN_VALVE, "Kitchen Valve"), Thermostat(KITCHEN_THERMO, "Kitchen Thermostat")},
{"Dining Room", Valve(DINING_VALVE, "Dining Valve"), Thermostat(DINING_THERMO, "Dining Thermostat")}
};
// 설정 블록 끝
////////////////////////////////////////////////////
LED iLED(INDICATION_LED, "Indicator LED");
LED hLED(HEATING_LED, "Heating LED");
Manipulator CV(HEATER_PIN, "CV Heater");
Pump FUPump(FU_PUMP_PIN, "Floor Unit Pump");
Thermostat ZonelessThermo(NO_ZONE_THERMO, "Zoneless Thermostat");
void printConfiguration() {
Serial.println("------ Board Configuration: ---------");
iLED.Print(); hLED.Print(); CV.Print(); FUPump.Print(); ZonelessThermo.Print();
for(int i=0; i0) cooldownCount--; return checkCoolDownNeeded(); }
bool checkCoolDownNeeded() { return cooldownCount>0; }
void Print() {
switch(_State) { case idle: Serial.print("idle"); break; case on: Serial.print("on"); break; case cooldown: Serial.print("cooldown"); break; }
}
};
State CVState;
void setup() {
Serial.begin(115200);
printTimeStamp(); Serial.print(": ");
#ifdef FAST_MODE
Serial.println("CV Zone Controller started in TestMode!\n - Board time runs ca 50 times faster\n - Pump maintenance cycle runs ever 4 minutes instead once per 36 hours");
#else
Serial.println("CV Zone Controller started. Time stamps (dd:hh:mm:ss)");
#endif
Serial.println(" - Time stamps format (dd:hh:mm:ss)");
printConfiguration();
wdt_enable(WDTO_1S); // 워치독 1초
}
void loop() {
#ifdef FAST_MODE
delay(2); // 테스트용 50배 속도
#else
delay(100); // 정상: 초당 약 10루프
#endif
iLED.Alternate(); // 생존 표시
FUPump.Update();
for(int i=0; i
Devices.h (디바이스 헬퍼 클래스)
// IODevice, Thermostat, Manipulator, Valve, Pump, LED 클래스 정의
// 루프에서 Update() 호출로 밸브/펌프 전환 시간 관리
// 워치독, 디바운싱, 상태 전환 로직 내장
전체 코드는 원문에서 다운로드 가능합니다.
회로도
펌프, 밸브, 서모스탯, LED 상세 배선도
여러 컨트롤러 캐스케이드 연결 예시 (층별 컨트롤러)
시리얼 모니터 실제 로그 예시 (밸브 개방 후 5분 뒤 펌프 시작 등 지연 확인 가능)
로그 예시 다운로드