1. IRED

리모컨의 동작 원리죠. 적외선 발광소자 IRED를 이용해서 간단한 신호를 송수신하는 회로 구성법과 아두이노 스케치 코드를 소개합니다. 뇌파로 움직이는 RC카를 제작하면서 실제 적용을 해보니 간단하고 저렴하게 구성이 가능한 장점이 있는 반면, 복잡한 코드를 전송하기는 힘들고 지형지물의 영향을 많이 받는 듯 했습니다. 그래도 어지간한 거리에서는 잘 인식이 됩니다. 회로 구성에 필요한 부품들은 아래 링크를 참고하세요.

http://artrobot.co.kr/front/php/product.php?product_no=426&main_cate_no=&display_group=

2. 연결방법

IR-circ123

그림에서 보듯이 적외선 송신 회로는 2가지 방법으로 구성할 수 있습니다.

그림 1은 일반적인 LED 와 같은 연결방법으로 간단하게 송신회로를 구성할 수 있지만 송신 거리가 짧습니다.

그림 2는 가정용 리모컨에서 사용되는 고출력 송신회로입니다. 수백에서 수백 mA의 고출력 송신이 가능하고 5미터 이상의 원거리로 전송할 수 있습니다. 이를 위해 트랜지스터를 사용합니다. 그림에서 R1 은 330옴, R2는 1옴 입니다. 이 게시물에 사용된 예제코드와 사진은 이 방식을 사용했습니다. 그림에서와 같이 디지털 3번 핀(PWM 지원 핀)에 연결했습니다.

예제에 사용된 IRED 규격:   정격 1.36V ,  최대 1.7V,  피크주파수 940nm, 화각+-20도 

그림 3은 적외선 수신회로입니다. IR 수광모듈은 주변 다양한 파장의 빛에서 원하는 파장만 필터링합니다. 위 링크에서 구입한 제품은 940nm 용으로 송/수신 모듈이 맞춰져 있습니다. 신호 수신을 위해 디지털 11번 핀에 연결합니다. IRED 전용 라이브러리가 송신 D3, 수신 D11에 맞춰져 있습니다.

예제에 사용된 적외선 수광모듈 사양:   감응되는 빛의 파장: 940nm ,  빛 신호의 주파수: 38KHz 

3. 동작방법

IRED를 리모콘 등으로 활용하기 위해서는 전송규약에 맞춰 ON/OFF 제어가 필요합니다만 이걸 직접 구현하기는 상당히 힘드니까 전용 라이브러리를 이용해서 제어합니다. 아래 링크 참고해서 라이브러리 설치하세요.

아두이노에 라이브러리 설치하기 : http://arduinomidi.com/xe/KodyWiki/1078

라이브러리 홈페이지 : http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html

라이브러리 다운로드 : http://arcfn.com/files/IRremote.zip

4. 코드(스케치)

IRED 송신부 : 아래 코드에서 NEC 코드와 소니 코드 중 선택해서 사용하세요. 아래 코드는 소니 코드만 활성화 시켰습니다.

주의 : 아두이노 1.0 사용하시는 분들은 라이브러리 안에 IRRemoteInt.h 메모장이나 워드패드로 열고서 #include <WProgram.h> 를 #include <Arduino.h>로 수정한 후 라이브러리를 추가하셔서 사용하시면 됩니다. Sketch > Import Library > IRremote

#include <IRremote.h>

/* IR send (Uses D3 pin) */
IRsend irsend;

void setup()
{
Serial.begin(9600);
}

void loop()
{
// 소니 코드의 경우 같은 신호를 3번 송신
for (int i = 0; i < 3; i++) {
irsend.sendSony(0x00a9, 16);    // 송신 코드, 송신 코드의 비트 수
delay(100);
}
delay(1000);

// NEC 코드
//irsend.sendNEC( 0xc5000000, 8);

//delay(1000);

}    // End of loop()

IRED 수신부 : 아래와 같이 수신합니다. 수신한 코드를 Serial 로 출력하므로 Serial Monitor에서 값이 제대로 수신되는지 확인해 보시면 됩니다.

#include <IRremote.h>

/* Command from IR */
int RECV_PIN = 11;        // IRED 연결 핀
IRrecv irrecv(RECV_PIN);

void setup() {
irrecv.enableIRIn(); // Start the IR receiver
Serial.begin(9600);
}

void loop() {
/////////////////////////////////////////////////////
// Read data from IR receiver
/////////////////////////////////////////////////////

if (irrecv.decode(&results)) {    // 수신 신호를 디코딩
irCommand = results.value;    // 커맨드 추출

Serial.print(F(“IR Command=”));    // 시리얼 출력
Serial.print(irCommand);
Serial.print(F(“, “));

irrecv.resume();  // Receive the next value
}

}

송신코드 다운로드 : [wpdm_file id=8]

수신코드 다운로드 : [wpdm_file id=9]