라즈베리 파이 2 + 윈도우 10 IoT로 구축하는 스마트 홈 자동화
프로젝트 개요
라즈베리 파이 2 모델 B와 윈도우 10 IoT 코어를 메인 컨트롤러로, 각 방마다 아두이노 우노를 I2C 슬레이브로 배치해 조명, 선풍기, 콘센트 등 가전제품을 제어하고 센서(온도, 조도, 인체 감지) 데이터를 수집하는 전체 홈 자동화 시스템입니다. C# UWP(유니버설 윈도우 플랫폼) 앱으로 터치스크린/마우스/키보드 조작 가능한 GUI를 제공합니다.
시스템 아키텍처
전체 구성
- 마스터: 라즈베리 파이 2 (윈도우 10 IoT Core) - 스케줄링, UI, 데이터 로깅, 외부 통신
- 슬레이브 (방당 1대): 아두이노 우노 - 릴레이 제어, 센서 수집, I2C 통신
- 통신: I2C 버스 (풀업 저항 필요, 최대 127개 슬레이브 주소 가능)
- 전원 제어: 릴레이 모듈 → 접촉기(Contactor) → 수펌프/온수기 등 고전력 기기
방 단위 구성 (Room Architecture)
각 방의 아두이노 우노가 담당하는 것:
- 제어 대상: 조명, 선풍기, 벽면 콘센트 등 (릴레이 모듈 통해)
- PIR 모션 센서: 인체 감지
- LM35 온도 센서: 실내 온도 측정
- LDR (조도 센서): 창가 조도 측정
장치 주소 체계
장치 주소 = 방 번호 × 100 + 장치 번호 (예: 1번 방 3번 조명 = 103)
이를 통해 라즈베리 파이가 최대 99개 방, 방당 99개 장치까지 식별 가능.
하드웨어 상세
주요 부품
| 부품 | 수량 | 비고 |
| 라즈베리 파이 2 모델 B | 1 | 메인 컨트롤러 |
| 아두이노 우노 | 방 개수만큼 | 방당 1대, I2C 슬레이브 |
| PIR 모션 센서 | 방 개수만큼 | 인체 감지용 |
| LDR (조도 센서) | 방 개수만큼 | 창가 조도 측정 |
| LM35 온도 센서 | 방 개수만큼 | 아날로그 온도 측정 |
| 릴레이 모듈 | 장치 개수만큼 | 채널 수 = 제어 장치 수 |
| 지멘스 컨택터 3TF32 00-0AP0 | 1 | 수펌프 제어용 (16A, 415VAC) |
| 미니어처 차단기 (MCB) 1P C16A | 1 | 수펌프 과전류 보호 |
| 브레드보드, 점퍼 와이어 | 적당량 | |
고전력 기기 제어 회로 (수펌프/온수기)
릴레이 모듈 직접 연결 불가 (릴레이 정격 초과, 화재 위험).
올바른 구성: 릴레이 → 컨택터 코일 (250VAC) → 컨택터 메인 접점 → MCB → 수펌프/온수기
컨택터 정격은 기기 정격보다 여유 있게 선택 (예: 16A 펌프 → 20A 이상 컨택터).
I2C 버스 확장
여러 아두이노 연결 시 I2C 버스 스트라이프(배선 보드) 사용. 각 아두이노는 고유한 I2C 슬레이브 주소(예: 0x40, 0x41, 0x42...) 설정 필요.
소프트웨어 아키텍처
통신 프로토콜 (I2C)
마스터(라즈베리 파이) → 슬레이브(아두이노): 3바이트 고정
| 바이트 | 내용 | 비고 |
| 1 | 모드 (Mode) | 0: 센서 읽기, 1: 장치 상태 읽기, 2: 장치 제어 |
| 2 | 핀 번호 (Pin) | 모드 2에서만 유효 |
| 3 | 값 (Value) | 모드 2에서만 유효 (0/1) |
슬레이브 → 마스터 응답: 14바이트 고정
| 모드 | 응답 내용 |
| 0 (센서) | [조도(0-255), PIR(0/1), 온도 부호(0/1), 온도 절대값, 예약 x10] |
| 1 (장치 상태) | 핀 0,1,3-13,A2,A3 총 14개 핀의 HIGH/LOW 상태 |
| 2 (제어 결과) | [제어된 핀의 현재 상태, 예약 x13] |
C# 클래스 구조 (UWP 앱)
- Home: 최상위 컨테이너, `List` 보유, 직렬화/역직렬화로 설정 저장/로드
- Room: `List` + `SensorData` (조도, PIR, 온도) 캡슐화, 주기적 센서 갱신
- Device: 장치 메타데이터 + `TurnOn()`/`TurnOff()` 메서드 (프로토콜 모드 2 사용)
- 센서 클래스들: `AmbientLight`, `PassiveIR`, `Temperature` - 환경 데이터 추상화
UI 화면 구성 (와이어프레임 기반)
- 홈 페이지: 전체 장치 상태 요약, 날짜/시간, 잠금 기능
- 즐겨찾기 장치: 자주 쓰는 장치 바로가기
- 방 페이지: 방별 장치 제어 및 센서 모니터링
- 공용 수전 장치: 수펌프, 온수기 별도 관리
- 설정/구성: 방/장치 추가·수정·삭제, I2C 주소 할당
개발 환경 및 배포
- 아두이노 펌웨어: 아두이노 IDE에서 컴파일/업로드 (제공된 스케치 사용)
- 라즈베리 파이 앱: 비주얼 스튜디오 2015 커뮤니티 에디션 (무료) + 윈도우 10 IoT Core SDK
- 배포: 비주얼 스튜디오에서 ARM 아키텍처로 빌드 → 라즈베리 파이 2에 원격 배포
- 시작 앱 등록: "Windows 10 IoT Core: Setting Startup App" 가이드 참조
알려진 이슈 및 해결책
| 이슈 | 원인 | 해결책 |
| 아두이노 부팅 시 D13 깜빡임 | 옵티부트 부트로더가 D13 토글 | D13에 릴레이 연결 안 함, 또는 커스텀 부트로더 굽기 |
| 라즈베리 파이 RTC 없음 | 하드웨어 RTC 칩 미탑재 | 외부 RTC 모듈(I2C) 장착, 또는 NTP/아두이노 통해 시간 동기화 |
| UWP 디버깅 난해 | 비동기 예외 시 스택 트레이스 손실 | 예상 지점 전에 브레이크포인트 배치, 로깅 강화 |
향후 확장 계획
- RF/IR 원격 제어 지원 (I2C 배선 없이 방 추가)
- 애저(Azure) 연동 웹 관리 포털 → 모바일 앱에서 제어
- RTC 칩 연동 스케줄 자동화 (예: 오후 7시 뒷마당 조명 ON, 오후 10시 OFF)
- 이벤트 기반 자동화 (조도 임계값 이하 시 정원 조명 자동 점등 등)
- 음성 제어 (Cortana/알렉사 연동)
소스 코드 및 자료
- 아두이노 스케치: 본문 내 포함 (프로토콜 구현 완료)
- 라즈베리 파이 UWP 앱: GitHub 저장소
- 프리츠 회로도 파일:
Home Automation Schematic - Anurag S Vasanwala.fzz
마무리
이 프로젝트는 임베디드 하드웨어(I2C, 릴레이, 센서), 펌웨어(아두이노 슬레이브), 애플리케이션(C# UWP, MVVM 패턴), 프로토콜 설계, OOP 모델링, 와이어프레임 기반 UI 설계까지 풀스택 임베디드 시스템 개발의 핵심 요소를 모두 다룹니다. 윈도우 10 IoT Core와 라즈베리 파이 2의 조합은 .NET 개발자에게 친숙한 환경에서 강력한 임베디드 솔루션을 구축할 수 있게 해줍니다.