아두이노 원격 조명 제어 시스템 제작기

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

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

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

데모


HomeShit – Tests from tuna on Vimeo.

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

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

제작

Hardware

당시 임베디드에 전무했던 저는 수많은 임베디드 솔루션에서 비교적 진입장벽이 낮은 아두이노를 채택하게 되었습니다. 무슨 방법을 쓰던간에 일단 작동잘되고 유지보수도 용이하게 할 수 있으면 장땡이라 생각했었고, 마침 진행하던 아두이노 프로젝트가 마무리될 무렵에 프로젝트를 진행하면서 습득했던 지식을 가지고 TUNALABS조명제어 시스템 제작을 착수했습니다.

제작은 먼저 브레드보드로 원하는 기능이 잘 작동하는지 테스트 후 만능기판으로 옮겼습니다.

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

[ 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 를 사용하였으며 웹 페이지와 윈도우 프로그램을 통하여 전등을 실시간으로 제어하고 현재 상태를 받아올 수 있도록 구현했습니다.

HomeShit의 미래

그런거 없음

2019년에 이 글을 수정하고 있는데 그냥 사서 쓰는게 정신건강에 좋은것 같습니다.

사용된 라이브러리들

Hardware

Server

Client (HomeShit Anywhere – Web)

Client (HomeShit Mini – C#)


Join the Conversation

2 Comments

Leave a comment

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.