윈도우 10 IoT 코어, 라즈베리 파이, 아두이노로 가정용 전원 콘센트 자동화하기
부품 및 소모품
부품 수량
라즈베리 파이 2 모델 B 1
XBee 모듈 2
아두이노 우노 1
FTDI 케이블 2
4채널 릴레이 쉴드 (아두이노용) 1
스파크펀 XBee 쉴드 1
앱 및 온라인 서비스
XCTU (XBee 설정 도구)
비주얼 스튜디오 2015+
아두이노 IDE
마이크로소프트 애저
마이크로소프트 윈도우 10 IoT 코어
프로젝트 개요
소개
이 프로젝트에서는 라즈베리 파이(윈도우 10 IoT 코어 구동), XBee, 아두이노를 사용하여 가정용 전원 콘센트를 로컬 네트워크와 클라우드에서 제어하는 방법을 다룹니다. 모든 코드 샘플은 GitHub 에 있습니다.
왜 전원 콘센트를 자동화하는가?
클라우드에서 개별 기기를 제어하는 대신, 전원 콘센트 자체를 자동화하면 콘센트에 연결된 모든 기기를 제어할 수 있습니다. 이 프로젝트에서는 선풍기와 조명 제어를 예시로 다룹니다.
XBee 모듈 시작하기
무선 신호 전송을 위해 XBee를 사용합니다. 코디네이터 역할을 하는 XBee 하나는 라즈베리 파이에, 라우터 역할을 하는 다른 하나는 전원 콘센트 측 아두이노에 연결됩니다. 코디네이터는 사용자 입력에 따라 라우터로 신호를 보내 전원 콘센트를 제어합니다.
AT 모드로 XBee 설정하기
XCTU 다운로드 및 설치
아다프루트 FTDI 어댑터로 XBee 펌웨어 업데이트
XBee AT 모드 설정 튜토리얼 영상 참조
다음 단계로 진행하기 전에 두 XBee가 서로 통신하는지 확인하세요.
수신부(Receiver) 설정
필요 부품: 지그비 라우터, 아두이노 우노 R3, 아두이노용 XBee 쉴드, 아두이노 릴레이 쉴드
아두이노 스케치
코디네이터 지그비에서 수신한 데이터가 "ON1"이면 릴레이 1 ON, "ON2"면 릴레이 2 ON, "OFF1"이면 릴레이 1 OFF, "OFF2"면 릴레이 2 OFF로 동작합니다.
#define RELAY1 7
#define RELAY2 5
String state = "OFF";
void setup() {
Serial.begin(9600);
pinMode(RELAY1, OUTPUT);
}
void loop() {
if(Serial.available() > 0){
state = Serial.readString();
Serial.println(state);
}
if(state == "ON1\r\n") digitalWrite(RELAY1, 1);
else if(state == "ON2\r\n") digitalWrite(RELAY2, 1);
else if(state == "OFF1\r\n") digitalWrite(RELAY1, 0);
else if(state == "OFF2\r\n") digitalWrite(RELAY2, 0);
else {
digitalWrite(RELAY1, 0);
digitalWrite(RELAY2, 0);
}
}
전원 콘센트 구성 (고전압 주의!)
릴레이를 이용한 전원 콘센트 제어 회로
릴레이는 전자 분야에서 오랜 역사를 가진 스위치 기술입니다. 입력 측에 AC 전압(110~240V)을 연결하고, 아두이노 같은 마이크로컨트롤러로 릴레이를 ON/OFF 제어합니다.
고전압을 다루므로 감전 위험이 있습니다. 극도로 주의하여 진행하세요. 본인 책임 하에 작업하십시오.
직접 콘센트를 개조하는 대신 연장 코드를 사용했습니다. 원리는 동일합니다. 연장 코드에서 한 선은 그대로 두고, 다른 선을 잘라 릴레이의 COM(공통)과 NO(상시 개방) 단자에 연결합니다.
연장 코드와 릴레이 연결
릴레이 쉴드를 아두이노에 장착하고, 그 위에 XBee 쉴드를 쌓습니다. 라우터로 설정된 지그비를 XBee 쉴드에 꽂습니다.
완성된 수신부 (아두이노 + 릴레이 쉴드 + XBee 쉴드)
전원 코드를 연결하고 아두이노에 외부 배터리로 전원 공급하면 수신부 완성입니다.
서버(라즈베리 파이) 구성
윈도우 10 IoT가 설치된 라즈베리 파이 2와 코디네이터로 설정된 지그비가 필요합니다.
지그비를 FTDI 어댑터에 연결하고, 6핀 FTDI RS-232 USB 케이블로 라즈베리 파이 USB 포트에 연결합니다. UWP(유니버설 윈도우 플랫폼)로 라즈베리 파이에 웹서버를 구축합니다. 서버는 사용자 입력을 대기하다가 선택에 따라 FTDI 케이블이 연결된 USB 포트로 시리얼 데이터를 전송하고, 지그비가 이를 무선 신호로 송신합니다. 이미 라우터의 DH/DL을 코디네이터 지그비에 설정해두었으므로 올바른 라우터로 메시지가 전달됩니다.
라즈베리 파이용 FTDI 드라이버 정보: GitHub ftdisample
라즈베리 파이와 FTDI 어댑터 연결
라즈베리 파이 서버 설정 영상 튜토리얼 참조. 모든 코드 샘플은 GitHub에 있습니다.
애저(Azure) 클라우드 연동
전 세계 어디서든 집을 제어하려면 클라우드 서비스를 연동해야 합니다.
웹사이트를 만들어 애저에 호스팅
애저 SQL DB 생성으로 사용자 인증/인가 처리
애저 클라우드 스토리지 서비스(Table Storage)로 명령 저장
라즈베리 파이 블링키 앱에서 명령 처리하여 홈 제어
참고 자료:
- 스토리지 테이블 생성: Azure 문서
- SQL 테이블 생성: Azure 문서
데모
두 가지 방식으로 전원 콘센트 제어 시연:
로컬 네트워크 내 라즈베리 파이 웹서버 URL 접속
애저에 호스팅된 ASP.NET 5 웹 애플리케이션을 통한 제어
결론
조도/모션 센서 추가로 조명 자동 제어 및 에너지 절약 가능
노약자가 리모컨으로 전원 콘센트 제어 가능 (RFID 장치 추가 필요)
조명 예약 ON/OFF로 전력 절약
침입 감지 시 모든 조명 점등
휴가 중 원클릭으로 전체 전원 차단
실내 온도 상시 유지 불필요, 필요할 때만 난방/냉방으로 에너지 절약
코드
릴레이 제어 아두이노 코드
#define RELAY1 7
#define RELAY2 5
String state = "OFF";
void setup() {
Serial.begin(9600);
pinMode(RELAY1, OUTPUT);
}
void loop() {
if(Serial.available() > 0){
state = Serial.readString();
Serial.println(state);
}
if(state == "ON1\r\n") digitalWrite(RELAY1, 1);
else if(state == "ON2\r\n") digitalWrite(RELAY2, 1);
else if(state == "OFF1\r\n") digitalWrite(RELAY1, 0);
else if(state == "OFF2\r\n") digitalWrite(RELAY2, 0);
else {
digitalWrite(RELAY1, 0);
digitalWrite(RELAY2, 0);
}
}
샘플 코드 전체
GitHub 저장소
회로도
전원 코드를 릴레이에 연결하는 방법