2.4 KiB
2.4 KiB
스마트 홈 환경 제어 IoT 시스템
Arduino Mega로 집 안팎의 센서 값을 읽고, 전기매트, 보일러, 창문을 조건에 따라 제어한 프로젝트입니다.
Ethernet Shield로 서버와 통신합니다. 서버 화면에서는 현재 센서값과 장치 상태를 확인하고, 일부 값을 수동으로 바꿀 수 있습니다.
기간
- 2022.12 ~ 2023.02
사용한 것
Arduino MegaEthernet ShieldDHT22MQ-5MQ-7RTC DS3231RelayEEPROMPHPJavaScript
하드웨어
| 구성 | 역할 |
|---|---|
| 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에는 장치 상태와 설정값 일부를 저장합니다.
- 창문 구조물은 실제 창틀에 맞춰 계속 수정이 필요했습니다.
- 자동 제어 조건은 실제 생활 패턴에 맞춰 조정했습니다.