diff --git a/README.md b/README.md index 56ea7f5..e7edf75 100644 --- a/README.md +++ b/README.md @@ -1,78 +1,105 @@ # 스마트 홈 환경 제어 IoT 시스템 +## 프로젝트 개요 -Arduino Mega로 집 안팎의 센서 값을 읽고, 전기매트, 보일러, 창문을 조건에 따라 제어한 프로젝트입니다. +본 프로젝트는 Arduino 기반 스마트 홈 환경 제어 IoT 시스템으로 실내·실외 환경 정보를 실시간으로 수집하여 전기매트, 보일러, 자동 창문을 시간·환경 조건·사용자 명령에 따라 자동 또는 수동으로 제어한다. -Ethernet Shield로 서버와 통신합니다. 서버 화면에서는 현재 센서값과 장치 상태를 확인하고, 일부 값을 수동으로 바꿀 수 있습니다. +온·습도, 가스, 조도, 빗물, 창문 위치 센서를 복합적으로 사용하며, Ethernet 쉴드를 통해 원격 서버와 양방향 통신을 수행하여 실시간 모니터링 및 제어가 가능한 스마트 홈 환경을 구현하는 것을 목표로 한다. -## 기간 +## 프로젝트 목표 +1. **실내·외 환경의 실시간 감지** +온도, 습도, 체감온도, 조도, 강우, 가스 상태 수집 -- 2022.12 ~ 2023.02 +2. **생활 패턴 기반 자동 제어** +시간대(주/야간), 요일(평일/주말)을 고려한 제어 +난방 및 창문 자동 동작 -## 사용한 것 +3. **안전성과 내구성 확보** +창문 모터 과부하 감지 및 자동 정지 +EEPROM을 활용한 상태 유지 -- `Arduino Mega` -- `Ethernet Shield` -- `DHT22` -- `MQ-5` -- `MQ-7` -- `RTC DS3231` -- `Relay` -- `EEPROM` -- `PHP` -- `JavaScript` +4. **원격 제어 및 모니터링** +서버를 통한 실시간 상태 확인 +원격 명령 기반 수동 제어 지원 -## 하드웨어 +5. **확장 가능한 IoT 구조 설계** +센서 및 제어 장치 추가가 용이한 구조 -| 구성 | 역할 | -| --- | --- | -| DHT22 | 실내, 실외, 매트 온습도 측정 | +## 하드웨어 구성 + +| 구성 요소 | 설명 | +|--------:|-------------| +| Arduino Mega | 메인 제어 보드 | +| Ethernet Shield | 서버와 유선 통신 | +| DHT22 | 실내·실외·매트 온습도 측정 | | MQ-5 | LPG 가스 감지 | | MQ-7 | CO 가스 감지 | | 조도 센서 | 실내 밝기 측정 | | 빗물 센서 | 강우 감지 | -| 리니어 액추에이터 | 창문 개폐 | -| 릴레이 | 전기매트, 보일러 제어 | -| RTC DS3231 | 시간 기준 제어 | +| 리니어 액추에이터 | 자동 창문 개폐 | +| 릴레이 | 전기매트 / 보일러 제어 | +| RTC DS3231 | 실시간 시계 | -## 동작 +## 구현 기능 +### 1) 전기매트 스마트 제어 +전기매트 하부(베개 아래)에 온도 센서를 매립하여 단순 온도 제어가 아닌 체감온도 기반 제어를 구현하였다. + +**동작방식** +- 사용자가 설정한 하한 / 상한 온도 범위를 기준으로 릴레이 제어 +- 일정 온도 범위 내에서 자동으로 ON / OFF 반복 -### 전기매트 +**예시** +- 현재 매트 온도: 38℃ +- 설정값: 하한: 40℃, 상한 45℃ + + 매트는 45℃까지 작동 후 꺼진 뒤, 40℃가 되면 다시 작동을 시작하는 방식으로 항온 유지 -- 매트 쪽 온도 센서를 읽습니다. -- 설정한 하한 온도보다 낮으면 릴레이를 켭니다. -- 설정한 상한 온도에 도달하면 릴레이를 끕니다. -- 하한/상한을 나눠 릴레이가 짧은 간격으로 반복 전환되지 않게 했습니다. +### 2) 보일러 스마트 제어 +기존 보일러 리모컨의 온도 센서를 탈착한 뒤, 관로 포설된 여분의 랜선 가닥을 이용해 직결하였다. +보일러실 내부 온도조절기 배선에는 저항 + 릴레이 회로를 추가하여 현재 온도를 제어하는 방식으로 보일러를 동작시킨다. + +**동작방식** +- 실내 온·습도 센서 기반 +- 시간대 / 창문 상태 / 사용자 설정값 반영 -### 보일러 +**예시** +- 창문 상태: 닫힘 또는 자동 +- 시간: 설정한 귀가 2시간 전 +- 실내 온도: 19.6℃ +- 설정값: 하한: 20℃, 상한 21℃ + + 21℃까지 보일러 가동 후 정지, 20℃가 되면 다시 작동을 시작하는 방식으로 항온 유지 + 전기매트와 동일한 **히스테리시스** 제어 방식 + +### 3) 창문 스마트 제어 +이중창 구조물에 리니어 액추에이터를 고정하여 창문을 직접 밀고 당기는 방식의 자동 개폐 시스템을 구현하였다. -- 실내 온도와 설정값을 비교합니다. -- 귀가 시간, 창문 상태, 요일 값을 조건에 넣습니다. -- 보일러 온도조절기 배선에 릴레이 회로를 연결해 제어했습니다. +**동작방식** +- 실내 공기질 +- 실외 공기질 +- 실외 수분(강우) 센서 +- 시간대 (외출 여부) -### 창문 +실내 공기질이 나쁘고 실외에 비가 오지 않을 경우 창문을 자동으로 개방하여 환기 수행 -- 실내 공기질, 실외 공기질, 강우 여부를 함께 봅니다. -- 비가 오지 않고 환기가 필요하면 리니어 액추에이터를 움직입니다. -- 전압값으로 과부하를 감지하고, 과부하가 있으면 이동을 멈춘 뒤 이전 위치 기준으로 복구를 시도합니다. +**안전 및 복구 기능** +전압 센서 기반 과부하 감지 +과부하 발생 시: + 1. 즉시 창문 이동 중지 + 2. 이전 창문 위치를 기준으로 이동하여 복구 시도 + + 현재까지 구조물 파손 없이 안정적으로 테스트 중 + 구조물 치수 문제로 인해 현재도 지속적인 수정 및 개선 진행 중 -## 서버 +## 추가 예정 기능 -- `server/index.php`: 상태 화면 -- `server/communication.php`: Arduino 통신 처리 -- `server/script.js`: 화면 갱신과 제어 요청 -- `server/setup.php`: 초기 설정 +설계 및 구상 단계 +- 가습기 자동 제어 +- 전등 스위치 스마트화 -## Arduino 코드 +## 개선 계획 -- `IOT_PROJECT_V1.ino`: 메인 루프 -- `communication.ino`: 서버 통신 -- `window_control.ino`: 창문 제어 -- `value_change_check.ino`: 값 변경 확인 -- `watch.ino`: 시간 처리 -- `serial_print.ino`: 디버그 출력 +본 프로젝트는 단순한 스마트 홈 구현이 아니라, +실제 생활 공간에서 상시 운용 가능한 자동화 시스템을 목표로 한다. -## 메모 - -- EEPROM에는 장치 상태와 설정값 일부를 저장합니다. -- 창문 구조물은 실제 창틀에 맞춰 계속 수정이 필요했습니다. -- 자동 제어 조건은 실제 생활 패턴에 맞춰 조정했습니다. +안전, 신뢰성, 확장성을 모두 고려한 설계를 통해 +지속적으로 진화하는 개인 스마트 홈 플랫폼으로 발전시키는 것이 최종 목표이다.