IR 무선 적외선리모컨 실험

이 번에는 아두이노에서 적외선 리모컨을 사용하는 방법을 소개합니다. IR 또는 적외선은 가전기기를 포함한 단순 무선 통신에 광범위하게 사용되며 구현함에 있어서 매우 쉽고 가격이 저렴한 것이 특징입니다. 적외선은 가시 광선과 매우 유사하지만 파장이 길며 사람의 눈에는 보이지 않습니다. 일반적으로 TV등 적외선 리모컨을 사용하는 경우 리모컨의 IR LED로 초당 38,000번 반복하는 신호를 발사하며 수신 센서에서는 이 신호를 전송받고 수신코드에 따라 동작(TV 전원 온오프 등)을 하게 됩니다.

적외선 리모컨 신호는 2진 펄스로 구성됩니다. 무선 전송 중에 다른 적외선 신호로부터 보호하기 위해 일반적으로 특정 캐리어 주파수로 변조된 다음 적외선 다이오드를 통해 전송됩니다. 수신부에서는 신호를 수신하여 복조과정을 통해 신호를 걸러내게 됩니다.

여기서 사용하는 리모컨은 NEC프로토콜을 사용하며 캐리어주파수는 38KHz입니다.

아두이노 보드에서 리모컨의 적외선 신호를 수신받기 위해 1838 IR수신 센서를 사용하게 됩니다.

 

적외선 수신센서의 VCC는 5V에 연결하고 GND는 GND에 SIGNAL은 아두이노 보드의 11번에 연결합니다.

아래는 적외선 리모컨의 코드표입니다.

 

이번 실험을 위해서는 적외선 리모컨 라이브러리를 반드시 설치해야 하며, 라이브러리가 설치되지 않았거나 잘못 설치된 경우 컴파일 시 오류가 발생합니다.

라이브러리는 아래 링크에서 다운로드하고 아두이노 프로그램 메뉴에서 스케치->라이브러리 포함하기->.ZIP 라이브러리 추가를 누르고, 파일선택창이 나오면 다운받은 라이브러리 파일을 선택하시면 됩니다.

라이브러리

소스코드

아래는 소스코드입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드합니다.

// IR 무선 적외선리모컨 실험

#include <IRremote.h>//IR리모컨라이브러리

int RECV_PIN = 11;//IR 수신센서 포트설정
IRrecv irrecv(RECV_PIN);
decode_results results;//구조체정의
int ledpin = 13; //LED IO핀(내부 LED 사용)
int on = 0;//플래그
unsigned long last = millis();

void setup()
{
  pinMode(ledpin, OUTPUT);////디지털IO핀을 출력으로 지정
  Serial.begin(9600);//시리얼포트 속도를 9600bps로 지정
  irrecv.enableIRIn(); // 리모컨 수신 시작
}

void loop()
{
  if (irrecv.decode(&results)) //IR리모컨 라이브러리 호출
  {
    if (millis() - last > 250) //수신신호 결정
    {
      on = !on;//수신신호 반전
      digitalWrite(ledpin, on ? HIGH : LOW);//리모컨 수신시 LED(13)로 표시
    }
    Serial.println(results.value, HEX); //리모컨 수신코드를 출력
    last = millis();      
    irrecv.resume(); // 다음 값을 수신
  }
}

 

시리얼모니터 창을 열고 리모컨을 누르면 수신된 코드가 표시됩니다. FFFFFFF코드는 리모컨 키를 계속누르고 있는 경우 반복되어 수신되는 코드입니다.