[센서/IR] 가장 저렴한 통신방식인 IR(적외선) 리모콘을 아두이노(Arduino)로 해킹 해보자
집안의 가전 리모콘을 복사하여 아두이노로 해당 리모콘을 에뮬하기
▶ 이 가이드를 따라하면,
- 적외선(IR) 통신 송신과 수신을 이해하고 구현할 수 있다
- 주변의 알려진 표준을 사용하는 리모콘을 복제하여 제어할 수 있다.
▶ 먼저 읽으면 좋은 글
- 라이브러리 설치 방법 : http://bbangpan.tistory.com/1
▶ 부품 설명 및 회로 구성
적외선 LED와 수신 회로를 통해 간단하게 적외선 리모콘을 아두이노로 쉽게 해킹할 수 있다(부품 가격도 잘하면, 2천원 안에서 구성이 가능하다). IR 통신에 대한 표준 몇가지가 공개되어 있고 이를 수신 및 송신할 수 있는 라이브러리도 존재해서 이를 활용하면 된다. 이를 위한 IR신호 수신 및 송신 회로도, 부품들은 아래와 같다. (부품소개 및 구매 : http://www.artrobot.co.kr/front/php/product.php?product_no=426 , 개별 부품을 타 사이트에서도 주문 가능하다.)
여기서는 간단히 리모콘 신호를 캡춰하기 위하여 상기 그림의 적외선 신호 수신회로를 먼저 구성해보자.
<수신회로 구성/5V,GND,D11 세 종류 핀을 연결한다>
<부품 및 연결 회로도/robobob.co.kr 발췌>
상기 배선은 IRremote 라이브러리 사용을 가정하였다. 이후 캡춰 완료 후 송신하기 위한 환경은 아래와 같이 구성한다.
<송신회로 구성/D3(PWM)에 IR LED를 연결한다>
이제 수신 회로구성한 것으로 리모콘의 신호를 캡춰하고, 송신 회로로 이 캡춰한 신호를 보내 실제 리모콘이 복제되는지 확인하자.
회로 구성시 IR LED는 다리가 긴 쪽이 (+)임을 주의한다.
▶ 소스 코드 입력 및 구동
라이브러리는 IRremote: https://github.com/shirriff/Arduino-IRremote 를 사용한다. Arduino 기본 IDE 강좌(http://bbangpan.tistory.com/1 )를 참조로 해당 라이브러리 zip을 다운받아 아두이노설치폴더/libraries/IRremote/* 에 해당 소스들과 examples폴더가 위치하도록 한다.
이렇게 설치한 후 Sketch를 재시작하면 해당 라이브러의 예제코드를 사용해볼 수 있다. 아래 화면을 참조하여 예제코드 중 IRrecvDump를 선택해서 실행하자. 그러면 다양한 종류의 리모콘 신호를 받아 화면에 출력해볼 수 있다.
<수신회로 구성 후 예제/IRremote/IRrecvDump선택 후 컴파일/업로드>
이렇게 구동하고 나서 Sketch->도구->시리얼 모니터를 수행하고 집안의 리모콘 중 적당한 것을 가져다 눌러서 신호를 캡춰해본다. 여기서는 올레TV 셋탑 리모콘을 한번 해보았다. 대개 TV리모콘 등은 모두 작동하고, 에어컨은 자체 표준을 따를 수도 있어 작동하지 않을 수 있다.
<올레TV 셋탑 리모콘의 전원 버튼 누를시 모습/ 셋탑과 TV전원 켜는 2개 신호를 내보낸다>
<사용한 리모콘 모습/빨간 단추를 눌렀다>
상기와 같은 방법으로 해당 리모콘 모든 버튼의 코드를 발췌할 수 있다. 중요한 것은 실제 코드와 방식, 코드 길이로서, 이 경우는 NEC방식, 32bits 길이, 20DF10EF 혹은 9CA800FF임을 알 수 있다.
이를 에뮬하기 위한 송신회로를 위한 소스 코드는 아래와 같다. 상기 전원부 제어 외에도 다른 다양한 버튼 정보도 함께 소스코드 상에 넣었으니 활용할 수 있다. 아래는 10초에 한번씩 TV와 셋탑을 껐다 켠다. 대개 10m정도의 거리에서도 LED의 방향만 맞으면 제어가 가능하다.(고출력 회로 구현시) 실제 구동하여 리모콘이 에뮬되는지 확인한다.
GitHub 원본 소스 링크 / https://github.com/bbangpan/bbangpan.com/blob/master/neibc_irsend_ollehtv/neibc_irsend_ollehtv.ino
http://www.bbangpan.com ----------------------------------
/* Originally posted on www.bbangpan.com
Program Description: IR send test(olleh TV turn on/off) code
Needed library : IRremote
Tested on : Arduino 1.0.6, Arduino UNO R3, IR LED
Copyright (c) 2015 www.bbangpan.com. All right reserved.
This program can be used for any non-commercial purpose freely. */
#include <IRremote.h>
IRsend irsend;
void setup()
{
Serial.begin(9600);
}
void loop() {
sendIR_OTS(1);
delay(10000);
}
void sendIR_OTS(int type) {
if (type == 1) { // turn on/off OLLEH TV
sendIR_OTS(2);
sendIR_OTS(3);
} else if (type == 2) {
irsend.sendNEC(0x20DF10EF, 32); //IR_TVPOWER
} else if (type == 3) {
irsend.sendSony(0x9CA800FF, 32); // IR_STBPOWER
} else if (type == 4) {
irsend.sendNEC(0x9CA88E71, 32); // IR_MOVIE
} else if (type == 5) {
irsend.sendNEC(0x9CA84EB1, 32); // IR_TVREVIEW
} else if (type == 6) {
irsend.sendNEC(0x9CA8AE51, 32); // IR_APPSTORE
} else if (type == 7) {
irsend.sendNEC(0x9CA8827D, 32); // IR_MENU
} else if (type == 8) {
irsend.sendNEC(0x9CA8D827, 32); // IR_EPG
} else if (type == 9) {
irsend.sendNEC(0x9CA8F807, 32); // IR_VOLUP
} else if (type == 10) {
irsend.sendNEC(0x9CA802FD, 32); // IR_VOLDN
} else if (type == 11) {
irsend.sendNEC(0x9CA8C837, 32); // IR_OK
} else if (type == 12) {
irsend.sendNEC(0x9CA8926D, 32); // IR_CHUP
} else if (type == 13) {
irsend.sendNEC(0x9CA852AD, 32); // IR_CHDN
} else if (type == 14) {
irsend.sendNEC(0x9CA848B7, 32); // IR_GOFIRST
} else if (type == 15) {
irsend.sendNEC(0x9CA828D7, 32); // IR_GOLAST
} else if (type == 16) {
irsend.sendNEC(0x9CA88877, 32); // IR_UP
} else if (type == 17) {
irsend.sendNEC(0x9CA8A857, 32); // IR_DOWN
} else if (type == 18) {
irsend.sendNEC(0x9CA88679, 32); // IR_PREV
} else if (type == 19) {
irsend.sendNEC(0x9CA818E7, 32); // IR_MUTE
} else if (type == 20) {
irsend.sendNEC(0x9CA846B9, 32); // IR_EXIT
} else if (type == 21) {
irsend.sendNEC(0x9CA8A659, 32); // IR_REW
} else if (type == 22) {
irsend.sendNEC(0x9CA806F9, 32); // IR_PAUSE
} else if (type == 23) {
irsend.sendNEC(0x9CA8C639, 32); // IR_STOP
} else if (type == 24) {
irsend.sendNEC(0x9CA826D9, 32); // IR_FF
} else if (type == 25) {
irsend.sendNEC(0x9CA8C03F, 32); // IR_NUM1
} else if (type == 26) {
irsend.sendNEC(0x9CA820DF, 32); // IR_NUM2
} else if (type == 27) {
irsend.sendNEC(0x9CA8A05F, 32); // IR_NUM3
} else if (type == 28) {
irsend.sendNEC(0x9CA8609F, 32); // IR_NUM4
} else if (type == 29) {
irsend.sendNEC(0x9CA8E01F, 32); // IR_NUM5
} else if (type == 30) {
irsend.sendNEC(0x9CA810EF, 32); // IR_NUM6
} else if (type == 31) {
irsend.sendNEC(0x9CA8906F, 32); // IR_NUM7
} else if (type == 32) {
irsend.sendNEC(0x9CA850AF, 32); // IR_NUM8
} else if (type == 33) {
irsend.sendNEC(0x9CA8D02F, 32); // IR_NUM9
} else if (type == 34) {
irsend.sendNEC(0x9CA8728D, 32); // IR_ASTER
} else if (type == 35) {
irsend.sendNEC(0x9CA830CF, 32); // IR_NUM0
} else if (type == 36) {
irsend.sendNEC(0x9CA8F20D, 32); // IR_SHARP
} else if (type == 37) {
irsend.sendNEC(0x9CA82ED1, 32); // IR_SEARCH
} else if (type == 38) {
irsend.sendNEC(0x9CA86897, 32); // IR_ERASE
} else if (type == 39) {
irsend.sendNEC(0x9CA8B04F, 32); // IR_KORTOGGLE
} else if (type == 40) {
irsend.sendNEC(0x9CA838C7, 32); // IR_RED
} else if (type == 41) {
irsend.sendNEC(0x9CA8B847, 32); // IR_ORANGE
} else if (type == 42) {
irsend.sendNEC(0x9CA858A7, 32); // IR_GREEN
} else if (type == 43) {
irsend.sendNEC(0x9CA87887, 32); // IR_BLUE
} else if (type == 44) {
irsend.sendNEC(0x9CA856A9, 32); // IR_MYMENU
} else if (type == 45) {
irsend.sendNEC(0x9CA86E91, 32); // IR_SHOPPING
} else if (type == 46) {
irsend.sendNEC(0x9CA8C23D, 32); // IR_WIDGET
} else if (type == 47) {
irsend.sendNEC(0x9CA8B24D, 32); // IR_WEBSEARCH
} else if (type == 48) {
irsend.sendNEC(0x20DFD02F, 32); // IR_EXTINPUT
} else if (type == 49) {
irsend.sendNEC(0x20DF40BF, 32); // IR_TVVOLUP
} else if (type == 50) {
irsend.sendNEC(0x20DFC03F, 32); // IR_TVVOLDN
}
}
---------------------------------------------------------
▶ 구매 가이드
IR LED등 : http://www.artrobot.co.kr/front/php/product.php?product_no=426
IR 송수신 킷: http://www.artrobot.co.kr/front/php/product.php?product_no=930&main_cate_no=&display_group=
기타 이를 개별로도 구매할 수 있다.
▶ 강의 키워드
IR리모콘 해킹, IR 제어, IR 통신, 적외선 통신, 적외선 제어, 적외선 리모콘, 아두이노, Arduino