본문 바로가기

프로젝트 (Project)

아두이노 유/무선 미니 매크로

최근 들어 IoT가 많이 강조되고 활성화되면서 나도 IoT라고 내세울 수 있을만한 무엇인가를 만들어보고 싶었다.

때마침 친구가 작고 가벼우면서 매크로 기능이 되는 장비를 만들어 달라며 가능한지 물어봤다.

키보드와 마우스가 제어가능한 아두이노는 레오나르도 시리즈이다.

아두이노 프로 마이크로는 아두이노의 Keyboard.h 와 Mouse.h 라이브러리를 지원하여 이 보드로 선정하였다.

따라서 작고 강력한 매크로 장비를 만들 수 있는 것이다.

 

프로젝트의 구성도는 다음과 같다.

아두이노 프로 마이크로에 버튼을 장착하고 적외선 수신기를 사용하여 무선으로 매크로 조작이 가능하도록 만드는 것이다.

추가로 아두이노 EEPROM에 매크로 데이터를 저장하여 컴퓨터에서 따로 프로그램이 사용되지 않도록 하는 것이 목적이다.

솔직히 말하자면 누워서 노트북 넷플릭스를 조작하기 위해서라고 말해도 프로젝트의 목적이 분명하게 정해진다. ㅎㅎ..

 

아두이노 프로마이크로의 EEPROM은 총 1Kb의 용량이다. 1024개의 바이트를 저장할 수 있다.

버튼의 경우 클릭/더블클릭/길게누르기 이렇게 총 3가지의 이벤트로 동작하게 만들 것이다.

최대한 작게 만드는 것이 목적이기 때문에 아두이노 보드의 크기에 맞게 버튼 개수를 사용할 것이다. 

그리고 적외선 리모컨의 버튼 21개를 합하여 총 (21 + 버튼 x 3) x n개의 매크로 데이터를 저장할 수 있어야한다.

버튼은 총 두 개로 적외선 수신기는 다이렉트로 납땜하였다.

 

매크로는 문자입력, 함수입력, 시간지연 이렇게 총 3개의 기능으로 이벤트가 발생할 수 있도록할 것이다.

매크로 데이터의 경우 Keyboard.write( ~ ) 로 사용하는데 함수의 파라미터 값은 char 형이기 때문에 앞서 계획한 3가지 이벤트를 구분할 수 있도록 데이터를 설계해야한다.

우선 버튼의 클릭/더블클릭/길게누르기를 감지하기 위해서 버튼 클래스를 따로 작성하였다.

최초 클릭 후 200ms 가 넘으면 클릭, 200ms 안에 클릭이 다시 감지되면 더블 클릭, 1초동안 누르면 길게 누르는 동작으로 감지하도록 작성했다. 200ms의 기준은 수정이 가능하고, 내 기준에서는 200ms면 충분히 더블 클릭을 할 수 있을 것이라고 생각했기 때문에 200ms로 설정하였다.

적외선 리모컨을 사용하기 때문에 각 버튼에 대한 KeyCode 값을 배열로 지정하였다.

그리고 버튼과 적외선 리모컨의 매크로 데이터를 저장할 구조체도 만들었다.

각각 20개의 매크로 데이터와 15개의 매크로 데이터를 저장할 수 있다.

총 41 x 6 + 41 x 21 = 246 + 651 = 897 개의 Byte 데이터를 사용한다.

각 구조체의 데이터를 EEPROM으로부터 불러와 구조체 배열 데이터에 저장한다.

EEPROM 라이브러리의 get 함수는 구조체 데이터의 저장과 불러오기가 가능하여 큰 어려움이 없었다.

적외선 리모컨의 조작을 감지하여 감지된 버튼의 매크로 구조체 데이터를 실행하는 구문이다.

하나의 매크로 데이터는 2바이트 데이터로 관리되는데, 10000 x n 자리의 데이터를 3개의 큰 이벤트 (문자, 함수, 시간)으로 나누었다.

그리고 1000 x n 자리의 데이터를 [Click/Press/Release] 이렇게 3개의 이벤트로 나누어 저장한다.

만약 시간지연 이벤트로 저장된 경우 0~9999의 데이터를 시간지연 데이터로 관리한다.

일반 데이터는 0~999의 데이터로 분류한다.

버튼역시 위와 같게 코딩하여 관리되는 구조체 데이터만 다르게 수정하여 작성하였다.

1. 매크로의 데이터 관리

2. 버튼 기능 구현

3. 적외선 리모컨 기능 구현

위 세 가지의 기능을 모두 구현하였다.

 

그리고 아두이노의 매크로를 지정할 수 있도록 프로그램을 따로 만들어야 하는데, 평소 C# 언어를 많이 사용해서 C# 을 사용해서 사용자가 원하는 동작을 수정할 수 있도록 만들었다.

보잘것 없지만 프로그램을 만들기까지 어떻게하면 매크로 데이터를 효율적으로 관리하고 저장할 수 있을까, 저장한 데이터를 불러오려면 어떤 방식을 사용하는 것이 현명할까, 어떻게 매크로 데이터를 출력해야 알아보기 쉬울까.. 등에 있어서 많은 시행착오를 겪은 프로그램이다. 이 프로그램은 3번째로 갈아엎어서 탄생한 녀석이다. 아껴주고 보살펴야한다.. ㅎ

 

아두이노를 연결하면 해당 포트와 연결하여 매크로를 추가 및 제거하여 설정한다.

길쭉한 콤보박스를 클릭하면 아두이노의 포트를 선택하여 연결할 수 있다.

 

사용자가 원하는 매크로 데이터를 지정하여 추가 및 제거 후 저장하기를 누르면 아두이노에 저장할 수 있다.

 

 

아두이노와 통신하여 매크로 데이터를 전달하는 것도 많은 시행착오가 있었다.

아두이노의 프로토콜 통신 부분이다. 다른 프로젝트에 어려움이 있다면 참고하면 좋을 것 같다.

자세한 통신 방법이나 알고리즘 등은 https://chigun.tistory.com/23을 참고하자

 

[Serial] 2. C++ 아두이노와 프로토콜 통신하기

이전 시간에는 아두이노 공식 포럼에서 제공한 시리얼 클래스 라이브러리를 사용하여 아두이노와 시리얼 통신을 해보았다. 이번에는 단순 시리얼 통신이 아니라 프로토콜을 직접 만들어서 통

chigun.tistory.com

 

C# 프로그램의 프로토콜 통신 파트이다.

이 역시 다른 프로젝트를 하는 것에 있어 어려움이 있다면 참고하면 좋을 것 같다.

 

최종 완성이다. 아크릴을 잘라 사각형의 미니미니한 사이즈가 탄생했다. 아주 귀엽게 생겼는데 강력한 매크로 성능을 가지고 있다.

이제 사용자가 원하는 매크로를 지정하여 버튼과 리모컨 조작으로 컴퓨터를 제어할 수 있게된 것이다.

그렇다 누워서 넷플릭스를 리모컨으로 자유자재로 제어할 수 있는 것이다.

조금만 수정한다면 인터넷 켜는 것을 물론이고 발전한다면 게임도 할 수 있을 것이다.

 

이상 아두이노 유/무선 미니 매크로 프로젝트 였다.