79 lines
2.4 KiB
Markdown
79 lines
2.4 KiB
Markdown
# 스마트 홈 환경 제어 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에는 장치 상태와 설정값 일부를 저장합니다.
|
|
- 창문 구조물은 실제 창틀에 맞춰 계속 수정이 필요했습니다.
|
|
- 자동 제어 조건은 실제 생활 패턴에 맞춰 조정했습니다.
|