요새 날씨가 부쩍 추워졌습니다. 이제 정말 겨울이 다가오고 있나 봅니다.
날씨가 추워지면 따뜻한 방바닥에 누워 TV를 보는게 최고 아닐까요?
하지만 퇴근하고 집에 들어가면 아무도 없어 썰렁합니다. ㅠㅠ
그렇다고 하루 종일 보일러를 틀어 놓고 출근할 수도 없지요.
그래서 만들어 봤습니다.
스마트폰으로 집에 있는 보일러 제어하기!!!
세줄요약:
1. 날씨가 춥다. 집이 썰렁하다
2. 스마트폰으로 보일러를 제어해야 겠다. 한번 만들어 볼까?
3. 성공했다. 따뜻한 겨울 나야지...
-------
1. 컨셉
뭔가 보일러를 제어할수 있는 컨트롤러가 있어야 합니다.
이 컨트롤러는 집에 있는 공유기에 무선인터넷으로 연결되어 있어야 하고,
보일러 제어장치(보일러를 키고 끄는 장치 거실 벽에 달려 있는 장치)와도 연결되 있어야 합니다.
스마트 폰으로 집에 있는 공유기를 통해 컨트롤러에 접속해서
보일러의 전원을 키고 끄게 신호를 날리는 것입니다!!!
2. 무엇이 필요할까?
컨트롤러는 와이파이로 공유기에 연결돼 있어야 하고, 보일러의 전원을 제어하는 장치도 필요합니다.
요즘 아두이노가 하드웨어를 제어할 수 있다는 것을 들은적이 있어 일단 검색해 봤습니다.
오~ 가격은 3만원대.
여기에 뭔가 막 프로그래밍하면 마치 보일러를 제어 할 수 있을 것만 같은 느낌이 들었습니다.
어떻게 프로그래밍 하면 되는지 무선랜에는 어떻게 연결하면 되는지 더 찾아 봤습니다.
그런데 문제가 생겼습니다.
아두이노 자체로는 무선랜에 연결할 수 없고, 확장 보드를 구매해 장착해야 한답니다.
이 무선랜 모듈이 무려 12만원입니다. 비싸서 포기..ㅋㅋ
또 어디서 들은게 있어서 라즈베리 파이를 알아봅니다.
오~ 뭔가 이더넷 포트도 있고 USB도 있어 당장 쓸 수 있을 것 같습니다.
가격도 4만원대로 착하네요.
스펙을 살펴보니 유선랜은 기본 지원이나 무선랜은 지원하지 않는다고 합니다.
그래서 USB에 무선랜카드를 달면 되지 않을까 검색해 봅니다.
오호~ 깜찍하기도 해라. 요런 무선랜카드를 USB에 끼워 넣으면 바로 무선랜을 쓸 수 있다고 하네요. ㅋ
그런데 라즈베리파이에서 하드웨어를 제어 할 수 있을까요?
뭔가 저 왼쪽 위에 달려 있는 GPIO라 불리는 핀들이 인터페이스 역할을 할 것 같습니다. 또 검색해 봅니다.
GPIO는 General Purpose Input/Output의 약자로 입출력 신호를 제어할 수 있는 인터페이스라고 합니다.
SPI, I2C, UART 같은 (듣도 보도 못한)통신 등도 가능하다고 하네요.
각각의 GPIO 핀은 아래와 같은 역할을 한다고 합니다.
또한 GPIO를 제어하기 위한 C/C++, Python, Nodejs 기반의 라이브러리가 있다고 하니,
프로그래밍도 어느 정도 가능할 듯 합니다.
이놈의 원리는 간단합니다. 특정 시그널이 들어오면 스위치를 닫아 주는 역할이지요.
보일러 전원을 이 릴레이여 연결하고 라즈베리파이의 GPIO를 통해 시그널을 날려 주면 스위치를 켜 주게 되는 것입니다.
이게 릴레이모듈의 회로도인데요,
처음엔 뭣도 모르고 그냥 되겠지 했는데 이거 잘 이해해야 릴레이 모듈을 GPIO와 연동 할 수 있습니다.
저도 그냥 이해 될 때까지 회로도만 바라 보았습니다. 몇일 계속 보다 보니 이해가 되드라구요..ㅠㅠ
참고로 http://www.youtube.com/watch?v=b6ZagKRnRdM <-- 요 동영상에 잘 설명되어 있습니다.
어쨌든 릴레이모듈과 테스트를 위한 LED, 각종 점퍼케이블, 브레드 보드까지 모두 구매합니다.
4. 개발
라즈베리파이에 OS를 올리는 건 쉽게 됐습니다. 라즈베리파이 홈페이지에서 제공하는 데비안 기반의 라즈비안 이미지를 SD카드에 넣고 끼워주면 끝.
한가지 까다로웠던 것은 데비안에서 무선랜을 설정하는 것이 였는데요, 이건 뭐 이런 저런 삽질 하다 보니 어찌 어찌 됐습니다.
웹페이지를 통해 제어하기로 하고, nginx를 설치합니다. 쉽게 됩니다.
nodejs도 설치 합니다.
GPIO를 제어하기 위한 nodejs 패키지도 설치합니다.
찾아보니 'onoff'라는 패키지가 제일 많이 쓰이는 듯 하네요.
https://github.com/fivdi/onoff
웹페이지를 제작합니다.
nodejs의 exporess를 기반으로 하고
다 개발하려면 시간이 많이 걸리니 UI프레임워크를 사용합니다.
개발된 화면은 다음과 같습니다.
로직은 간단합니다.
페이지가 로딩 될 때 보일러의 현재 상태를 가져와 화면에 보여주고
'on'버튼을 누르면 nodejs의 onoff 패키지의 메소드를 통해
특정 GPIO 핀에 시그널을 보내는 것입니다.
5. 테스트
실제로 보일러제어 장치를 뜯어 내기 전에 제대로 동작하는지 브레드보드에 릴레이와 LED를 연결해 확인합니다.
6. 보일러에 연결
보일러제어장치를 뜯어 전원선을 릴레이에 연결합니다.
다음 영상으로 확인 가능합니다.
7. 앞으로 할일
온도 센서를 달 생각입니다.
특정 온도 이하로 떨어지면 보일러를 1시간동안 켜기 같은 기능을 추가할 예정입니다.
시간 설정 기능도 추가할 예정입니다.
몇시부터 몇시까지 켠다거나 끄는 기능을 넣을 생각입니다.
긴 글 읽어주셔서 감사합니다!
모두들 따뜻한 겨울나세요~