#2 기획 및 검토 - 적외선 리모컨
방의 전등을 리모컨으로 켜거나 끄고 싶다.
전에 살던 신축 아파트에서 잘 사용했었는데, 이번에 이사온 오래된 아파트에는 없어서 좀 많이 아쉽다. 기존 스위치를 교체하는 방식의 제품들이 판매되고 있긴 한데, 교체과정에서 전선 연결을 바꿔야 하는 것이 좀 부담스러워 포기했었다. 12V 정도의 직류전기면 모를까, 220V 의 교류전기는 내가 손 대기에는 너무 아는게 없었기 때문이다.
그러다가 최근 아두이노를 접하게 되면서, 기존 스위치를 건드리지 않고 기계적인 방법으로 해결이 가능할 거 같다는 생각이 들었다. 리모컨으로 제어되는 서보모터의 끝에 작은 해머를 달고, 이 해머로 전등 스위치를 누르게 하는 것이다. 교재에 나온 예제들중에서 다음의 두 가지를 응용해보기로 했다.
21장 적외선 리모콘 실습
24장 서보모터 실습
21장 적외선 리모콘 실습
교재 내용대로 아래와 같이 회로를 구성한 뒤, USB 케이블로 PC 와 연결했다.
아두이노 IDE 에서 보드를 인식하는 것을 확인한 후, 프로그램 코딩을 시작한다.
교재의 소스를 보면 맨 윗줄에 다음과 같이 적외선 리모컨 제어 관련 라이브러리를 인클루드 하도록 돼 있다.
#include <IRremote.h>
하지만 컴파일하는 과정에서 IRremote.hpp 를 사용하라는 에러 메세지가 나왔다.
인터넷에서 검색해 홈페이지로 들어가보니, 이미 지원이 종료된 구버전(2.x)이었다.
https://github.com/Arduino-IRremote/Arduino-IRremote
GitHub - Arduino-IRremote/Arduino-IRremote: Infrared remote library for Arduino: send and receive infrared signals with multiple
Infrared remote library for Arduino: send and receive infrared signals with multiple protocols - GitHub - Arduino-IRremote/Arduino-IRremote: Infrared remote library for Arduino: send and receive in...
github.com
대신 최신 4.x 버전을 사용하기로 한다.
라이브러리 설치도 아두이노 IDE 의 라이브러리 관리자 기능을 이용해 쉽게 할 수 있었다.
처음에는 윈도우즈10 의 보안 기능으로 인해 설치에 실패했지만, 아두이노 IDE 에 대해 보호된 폴더 액세스를 허용해 주고 나서 다시 설치하니 성공했다.
버전이 올라가면서 함수도 바뀌었으므로, github 의 설명을 보며 최신 버전(4.x)의 코드로 변경했다.
#include <IRremote.hpp>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
void setup() {
Serial.begin(9600);
IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK);
}
void loop() {
if (IrReceiver.decode()) {
if (IrReceiver.decodedIRData.decodedRawData != 0) {
Serial.print(IrReceiver.decodedIRData.protocol);
Serial.print(" : ");
Serial.print(IrReceiver.decodedIRData.decodedRawData, HEX);
Serial.print(" : ");
Serial.print(IrReceiver.decodedIRData.decodedRawData, DEC);
Serial.print(" : ");
Serial.print(IrReceiver.decodedIRData.command, HEX);
Serial.print(" : ");
Serial.println(IrReceiver.decodedIRData.command, DEC);
}
IrReceiver.resume();
}
}
적외선 리모컨으로부터 데이터를 수신하면 IrReceiver.decodedIRData 에 데이터를 저장해 놓는데, 이 중에서 내가 필요한 것은 IrReceiver.decodedIRData.decodedRawData 값이다. 이걸로 리모컨의 어느 버튼이 눌렸는지를 알 수 있다.
처음에는 IrReceiver.decodedIRData.command 를 사용하려고 했는데, 테스트 과정에서 항상 0만 수신되는 리모컨들이 간혹 있어서 사용하지 않기로 했다.
교재에 포함된 리모컨의 + 버튼과 -버튼을 누르면 다음과 같은 값이 들어오는 것을 확인할 수 있다.
이것으로 아두이노에서 리모컨 입력 값을 구분해서 인식할 수 있게 됐다.