아두이노 파워포인트 포인터 – 무선 프레젠테이션 제어
부품 및 소모품
| 부품 | 수량 |
| 아두이노 레오나르도 | 1 |
| IR 수신기 (범용) | 1 |
| TV 리모컨 | 1 |
프로젝트 소개
파워포인트 발표를 할 때 마우스를 계속 쥐고 있어야 하는 불편함을 겪은 적이 있습니다. '아두이노 입문'이라는 발표를 준비하면서 아두이노의 기능을 시연할 겸 간단한 프레젠테이션 포인터를 만들기로 했습니다.
가장 먼저 떠오른 아이디어는 TV 리모컨을 활용하는 것이었습니다. 리모컨은 마우스보다 프레젠테이션용으로 더 인체공학적으로 설계되어 있습니다.
필요한 부품
- TV 리모컨 1개
- 아두이노 레오나르도 1개 (우노도 가능하나 수정 필요)
- IR 센서 1개 (VS1838B 사용)
- 옵션: 퍼프보드로 간단한 실드 제작
회로 연결
연결은 매우 간단합니다:
- 센서 GND → 아두이노 GND
- 센서 VCC (5V) → 아두이노 5V
- 센서 데이터 핀 → 아두이노 디지털 핀 2
코드 설명
코드는 두 단계로 구성됩니다.
- 1단계: TV 리모컨의 원하는 버튼에서 나오는 IR 신호를 디코딩하여 값 확인
- 2단계: 확인된 값을 코드에 적용해 해당 버튼을 좌/우 화살표 키로 매핑
먼저 IRremote 라이브러리를 설치합니다. GitHub 페이지의 설치 안내를 따르세요.
1단계: 리모컨 코드 읽기 (Code 1)
아래 코드를 업로드하고 시리얼 모니터를 열면 리모컨 버튼을 누를 때마다 다른 숫자가 출력됩니다.
#include <IRremote.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
int key_pressed;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
key_pressed = results.value;
Serial.println(key_pressed);
irrecv.resume();
}
delay(100);
}
사용할 버튼에 해당하는 숫자를 기록해 둡니다. 예제에서는 리모컨의 중앙, 앞으로, 뒤로 버튼을 사용했습니다.
2단계: 키 매핑 및 HID 동작 (Code 2)
기록한 숫자로 코드의 if 조건을 수정하고 업로드합니다.
#include <IRremote.h>
#include "Keyboard.h"
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
int key_pressed;
int last_key_pressed;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
Keyboard.begin();
}
void loop() {
if (irrecv.decode(&results)) {
key_pressed = results.value;
Serial.println(key_pressed);
irrecv.resume();
}
if (key_pressed == last_key_pressed) key_pressed = 0;
if (key_pressed == 18105) { // 본인의 오른쪽 버튼 값으로 변경
Keyboard.press(KEY_RIGHT_ARROW);
Keyboard.releaseAll();
}
if (key_pressed == -22951) { // 본인의 왼쪽 버튼 값으로 변경
Keyboard.press(KEY_LEFT_ARROW);
Keyboard.releaseAll();
}
last_key_pressed = key_pressed;
}
아두이노 레오나르도를 사용하면 업로드 후 선택한 리모컨 버튼이 키보드의 좌/우 화살표 키로 동작합니다.
파워포인트에서 사용하기
프레젠테이션을 '슬라이드 쇼' 모드로 실행하면 리모컨 버튼으로 슬라이드를 넘길 수 있습니다.
다른 아두이노 보드 사용 시
레오나르도, 제로, 듀는 기본적으로 키보드/마우스 HID 장치로 인식되지만, 우노 등 ATmega328P 기반 보드는 ATmega8U2/16U2 펌웨어를 수정해야 합니다. 관련 정보는 아두이노 포럼에서 찾아볼 수 있습니다.
코드
- PPT_Pointer_Code_1.ino (리모컨 코드 읽기)
- PPT_Pointer_Code_2.ino (최종 포인터 코드)
회로도