# 스마트 홈 환경 제어 IoT 시스템 Arduino Mega로 집 안팎의 센서 값을 읽고, 전기매트, 보일러, 창문을 조건에 따라 제어한 프로젝트입니다. Ethernet Shield로 서버와 통신합니다. 서버 화면에서는 현재 센서값과 장치 상태를 확인하고, 일부 값을 수동으로 바꿀 수 있습니다. ## 기간 - 2022.12 ~ 2023.02 ## 사용한 것 - `Arduino Mega` - `Ethernet Shield` - `DHT22` - `MQ-5` - `MQ-7` - `RTC DS3231` - `Relay` - `EEPROM` - `PHP` - `JavaScript` ## 하드웨어 | 구성 | 역할 | | --- | --- | | DHT22 | 실내, 실외, 매트 온습도 측정 | | MQ-5 | LPG 가스 감지 | | MQ-7 | CO 가스 감지 | | 조도 센서 | 실내 밝기 측정 | | 빗물 센서 | 강우 감지 | | 리니어 액추에이터 | 창문 개폐 | | 릴레이 | 전기매트, 보일러 제어 | | RTC DS3231 | 시간 기준 제어 | ## 동작 ### 전기매트 - 매트 쪽 온도 센서를 읽습니다. - 설정한 하한 온도보다 낮으면 릴레이를 켭니다. - 설정한 상한 온도에 도달하면 릴레이를 끕니다. - 하한/상한을 나눠 릴레이가 짧은 간격으로 반복 전환되지 않게 했습니다. ### 보일러 - 실내 온도와 설정값을 비교합니다. - 귀가 시간, 창문 상태, 요일 값을 조건에 넣습니다. - 보일러 온도조절기 배선에 릴레이 회로를 연결해 제어했습니다. ### 창문 - 실내 공기질, 실외 공기질, 강우 여부를 함께 봅니다. - 비가 오지 않고 환기가 필요하면 리니어 액추에이터를 움직입니다. - 전압값으로 과부하를 감지하고, 과부하가 있으면 이동을 멈춘 뒤 이전 위치 기준으로 복구를 시도합니다. ## 서버 - `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에는 장치 상태와 설정값 일부를 저장합니다. - 창문 구조물은 실제 창틀에 맞춰 계속 수정이 필요했습니다. - 자동 제어 조건은 실제 생활 패턴에 맞춰 조정했습니다.