TunaLabs 원격 조명 제어 시스템 제작기

[2016년 11월 – TunaLabs.io 의 홈 조명제어 시스템 구성도 ]

 

지금으로부터 3년전, 침대에 누워서 전등을 제어할 수 있는 방법을 고민해보다가 잘 만들어진 IoT 제품의 가격이 만만치 않았고, 당시 고딩였던 저는 얇은 주머니를 보면 역시 사는건 무리란 생각에 입 맛게 뜯어고칠 수 있게 직접 만들어보면 어떨까란 생각으로 출발한 TunaLabs의 원격 조명 제어 프로젝트, 애플의 HomeKit을 딴 HomeShit(홈똥)을 제작하게 되었습니다.

이번에는 TunaLabs의 원격 조명 제어 시스템의 제작과정과 사용된 라이브러리를 소개합니다.

 

데모


HomeShit – Tests from tuna on Vimeo.

[조명제어와 피드백 – 조명상태 불러오기 – HomeShit Mini 테스트]

위 영상에 나오는것 처럼 기기제약 없이 언제 어디서든지 인터넷이 되는 웹 브라우저에서 바로 전등 제어를 할 수 있고, 윈도우 상에서는 브라우저 없이 C#으로 짜여진 HomeShit Mini 프로그램으로 바로 제어할 수 있습니다.

 

 

제작

Hardware

당시 임베디드에 대한 지식이 전무했고 이래 저리 도움을 구하던 중에 임베디드에 빠삭하신 ☆★위대하신 GOTO님★☆ 덕분에 가장 쉽고 빠르게 저의 Needs를 충족 시켜줄 수 있는 아두이노를 선택하게 되었습니다.

아두이노를 선택한 것은 누구나 카피할 수 있는 오픈소스 임베디드 플랫폼이라 가격도 저렴하고 방대한 라이브러리와 메뉴얼, 커뮤니티 등이 잘 활성화 되어 있어서 원하는 기능을 쉽고 빠르게 구현할 수 있을것 같았습니다.

 

마침 진행하던 아두이노 프로젝트가 마무리될 무렵이였고, 저는 프로젝트를 진행하면서 습득한 지식을 TunaLabs 조명제어 시스템에 적용해보고 싶었습니다. 제작은 먼저 브레드보드로 원하는 기능이 잘 작동하는지 테스트 후 만능기판으로 옮겨서 솔더링했습니다.

[ 2014 / 08 – 보드 만들기전에 브레드보드에 잘 작동하는지 테스트 ]

 

HomeShit – Blink from tuna on Vimeo.

브레드보드에서 테스트할 당시 영상입니다.

 

 

 

[ 2014 / 08 – HTTP POST 요청 테스트 ]

아두이노 이더넷 쉴드와 아두이노 IDE에 기본적으로 내장되어 있는 Ethenrent Web Client와 Web Server로 HTTP POST 요청을 구현하여 GPIO를 제어 했습니다. 친절하게 예제코드까지 있어서 복사 & 붙혀놓고 몇 부분만 수정하면 바로 사용할 수 있습니다.

HTTP POST 요청으로 서버와 JSON 데이터를 교환하며, JSON 데이터 인코딩와 디코딩은 ArduinoJson 라이브러리를 사용했습니다.

 

 

 

[ 2014 / 08 – 삽질끝에 완성된 보드 ]

브레드보드에서 충분한 테스트를 거치고 만능기판에 땜질한 모습입니다.

입력과 출력 모두 16개의 I/O으로 아두이노의 부족한 포트 확장으로는 74HC595 Shift Register를 사용했습니다.

 

 

웹 클라이언트(HomeShit Anywhere)

기기제약 없이 인터넷이 가능한 브라우저에서 언제 어디서든지 원격으로 전등을 제어하고, 현재 전등 상태를 확인 할 수 있는 웹 기반 전등 제어 패널 입니다. Socket.io를 사용하여 JSON 데이터를 서버와 교환하며 전등을 실시간으로 제어하고 상태를 받아옵니다.

 

 

윈도우 클라이언트 – C# (HomeShit Mini)

니터 우측 하단에 있는 조그만한 버튼들이 HomeShit Mini 입니다. 항상 켜져있어서 브라우저를 실행하지 않고도 전등을 제어하고 상태를 편리하게 확인 할 수 있습니다.

C# WPF를 사용했으며 Socket.io와 통신하기 위해 SocketIoClientDotNet 라이브러리를, JSON 데이터 처리는 JSON.NET 라이브러리를 사용했으며, 나머지 기본적인 것은 C#에 내장되어 있는 기능을 사용했습니다.

 

 

시스템 다이어그램

[ 2016년 11월 – TunaLabs.io 의 HOME-SHIT 시스템 다이어그램 ]

 

지금까지 제작된 HomeShit의 시스템 구성입니다.

서버는 사진과 같이 Node.js + Socket.io + Express.js 조합을 사용하여 아두이노 기반 하드웨어로 서버와 HTTP POST 통신으로 JSON 데이터를 주고 받습니다. 클라이언트는 양방향 통신을 가능하게하는 Socket.io 를 사용하였으며 웹 페이지와 윈도우 프로그램을 통하여 전등을 실시간으로 제어하고 현재 상태를 받아올 수 있도록 구현했습니다.

아두이노와 Node.js 모듈들의 공식 메뉴얼이 잘 정리되어 있어서 예제코드를 실험해가며 원리를 파악할 수 있었기 때문에 빠르게 원하는 기능을 구현할 수 있었습니다.

 

 

HomeShit의 미래

귀차니즘 해소와 만드는 재미가 공존한 HomeShit 프로젝트를 시작한지 어느덧 3년이 다되어 가고 있습니다. 처음에는 웹 브라우저에서 겨우 전등 한 두개 정도만 켜고 끌 수 있었고 전등 상태도 받아올 수 없었지만,

사용하면서 불편한 점을 해소해줄 기능들을 하나 둘씩 추가 해오면서 “그나마” 좀 쓸만해진 HomeShit이 아마 다음은 기능 추가 하는것도 귀찮아서 그냥 잘 만들어진걸 사게 될지도 모르겠네요 ㅡㅡ ㅋ (애플 HomeKit이나 좀 써보고 싶은데 ;ㅅ; )

 

지금은 예전과 달리 IoT 시장이 매우 커졌고 사물인터넷과 결합한 가전제품이 일상속에 깊게 자리잡은 현 시점에서 HomeShit 프로젝트를 계속 진행 할 이유를 생각 해봤을 때 귀차니즘은 뒤로하고 만드는 재미가 끝나기 전까지는 계속할 수 있을것 같았습니다.

다른 프로젝트를 진행하면서 항상 시간이 부족하다는 핑계로 HomeShit 프로젝트를 거의 신경쓰지 못하고 있지만.. IoT가 많이 보급된 현 시점에, 이제는 시중에서 판매되는 IoT 제품도 같이 사용하면서 HomeShit을 계속 개선해나가는 방향으로 가고자 합니다.

 

HomeShit 프로젝트를 진행하면서 사용한 라이브러리를 공유합니다.

혹시 HomeShit과 비슷한 프로젝트를 진행하시고자 하는분들께 조금이나마 도움되셨으면 좋겠습니다.

 

 

사용된 라이브러리들

Hardware

 

Server

 

Client (HomeShit Anywhere – Web)

 

Client (HomeShit Mini – C#)

 


 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *