Files
iot-project/README.md
T
2026-08-03 04:05:18 +09:00

2.4 KiB

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