검색
홈으로 마이페이지 주문조회 장바구니
로그인
회원정보 게시판
회사소개 이메일
도서(BOOK)
키트(KIT)
특판 상품
졸업작품&전자기초
응용모듈
전자부품
모터
기구
엔클로져
고객센터 게시판
자유게시판
MCU 통합 게시판
강좌-RaspberryPi
강좌-드론(쿼드콥터)
강좌-아두이노(기초)
강좌-아두이노(응용)
신제품/신기술 소개
DIY 공작 게시판
윤교수의 연구실 칼럼
 ☎ : 02-776-4868

 F: 02-779-6757

☞ 평일 : 09~18시
☞ 주말 : 10~13시


국민822401-04-027758
☞ 예금주 : Ohm사
국민822401-04-027761
☞ 예금주 : R&C사
 
 
1 (주)알트소프트 사이트
 
2 LabVIEW 강좌 사이트
 
3 윤교수의 마이크로프로세서 월드
 
4 전자 엔지니어
 

 

 
강좌-아두이노(기초)
 
2014. 05. 15 (16:31)
제목[아두이노] 9. 적외선 리모콘
작성자 조회 : 9014

9. 적외선 리모콘


이번 강좌는 적외선 리모콘에 대해서 다뤄 보도록 한다. 또한, 이번 강좌에서는 아두이노 개발툴에 라이브러리를 등록해서 사용하는 방법에 대해서도 알아보도록 한다.

적외선 리모콘은 가정에서 사용하고 있는 TV나 오디오 등에 사용되는 것과 유사한 리모콘을 가지고 실험을 하게 되며, 일반적으로 NEC 프로토콜을 사용하고 있는 경우가 많다. 여기서도 NEC 프로토콜을 사용하는 리모콘을 가지고 실험을 하기로 한다.


흔히, 볼 수 있는 적외선 센서는 위 그림과 같다. 별도의 회로 구성 없이 핀에 전원만 연결해서 마이컴 등에서 쉽게 입력을 받을 수 있다.

NEC 프로토콜에 대해서 간단히 소개를 하자면,

위와 같은 '1'과 '0'에 대한 타이밍 구조를 갖고 있다.

전체적인 프로토콜은

기본적으로 38KHz의 주파수로 출력이 되며, 위 타이밍 구성과 같이 초기에 9ms의 ON과 4.5ms의 OFF 신호로 시작하며, 8비트 주소와 8비트의 데이터로 구성되어 있다. 각각의 주소와 데이터는 에러 체크를 위해서 반전된 신호를 연달아서 보내는 구조로 되어 있다. 위 타이밍을 자세히 보면 알 수 있다.  

또한, 리모콘의 스위치를 계속 누르고 있으면, 아래와 같이 반복 신호(Repeat)가 출력이 된다.

회로는 아래와 같고,

아두이노 보드에 다른 부품 없이 적외선 수신부만 연결해서 구성해 보자.

 

프로그램을 작성하기 전에, 첨부 파일에 있는 라이브러리를 아두이노 개발 환경이 설치되어 있는 폴더의 라이브러리 폴더에 압축을 풀어서 복사한다.


C:\Program Files\Arduino\libraries

보통의 경우라면 위의 폴더에 복사를 한다.

아두이노 개발툴을 실행시킨 후에, [파일] – [예제]를 보면, 아래와 같이 추가한 [IRremote] 라이브러리와 예제를 볼 수 있다.

먼저, [IRrecvDump] 예제를 불러와서 실험을 해 보도록 하자..

 

/*

 * IRremote: IRrecvDump - dump details of IR codes with IRrecv

*/

 

#include

 

int RECV_PIN = 2;

 

IRrecv irrecv(RECV_PIN);

 

decode_results results;

 

void setup()

{

  Serial.begin(9600);

 irrecv.enableIRIn() // Start the receiver

}

 

// Dumps out the decode_results structure.

// Call this after IRrecv::decode()

// void * to work around compiler issue

//void dump(void *v) {

//  decode_results *results = (decode_results *)v

void dump(decode_results *results) {

  int count = results->rawlen;

  if (results->decode_type == UNKNOWN) {

    Serial.print("Unknown encoding: ");

  }

  else if (results->decode_type == NEC) {

    Serial.print("Decoded NEC: ");

  }

  else if (results->decode_type == SONY) {

    Serial.print("Decoded SONY: ");

  }

  else if (results->decode_type == RC5) {

    Serial.print("Decoded RC5: ");

  }

  else if (results->decode_type == RC6) {

    Serial.print("Decoded RC6: ");

  }

  else if (results->decode_type == PANASONIC) {      

    Serial.print("Decoded PANASONIC - Address: ");

    Serial.print(results->panasonicAddress,HEX);

    Serial.print(" Value: ");

  }

  else if (results->decode_type == JVC) {

     Serial.print("Decoded JVC: ");

  }

  Serial.print(results->value, HEX);

  Serial.print(" (");

  Serial.print(results->bits, DEC);

  Serial.println(" bits)");

  Serial.print("Raw (");

  Serial.print(count, DEC);

  Serial.print("): ");

 

  for (int i = 0; i < count; i++) {

    if ((i % 2) == 1) {

      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);

    }

    else {

      Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);

    }

    Serial.print(" ");

  }

  Serial.println("");

}

 

 

void loop() {

  if (irrecv.decode(&results)) {

    Serial.println(results.value, HEX);

    dump(&results);

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

  }

}

 

 

위 코드가 리모콘 수신 데이터를 덤프(Dump)하는 프로그램이다. 시리얼 포트를 통해서 덤프 데이터를 출력하여, 실제 데이터를 확인 할 수 있다.

적외선 수신부를 향해서 리모콘 스위치를 누르면, 아래 그림과 같이 다양한 정보를 출력하는 것을 알 수 있다.

위의 빨간 박스의 내용을 보면, [ Decode NEC : FFA857 ]이라고 되어 있다. 또한, 32bits라고 데이터 비트가 표시되어 있다.

위에서 밝힌 것처럼, NEC 프로토콜을 사용하고 있으며,FFA857은 0x00FFA857로, 어드레스 0x00, 데이터 0xA8이다. 0xFF와 0x57은 각각의 반전 데이터이다.

아래의 Raw 데이터는 위에서 설명했던 타이밍에 대한 타이머 데이터이다.

위 코드에서 적색으로 표시된 부분이 이 코드에서 중요한 내용으로 간단히 설명해 보기로 하자.

#include

IR 리모콘을 사용하기 위해서 반드시 추가해야 될 헤더 파일이다. 그 전에 첨부 파일을 꼭 해당 폴더에 복사를 하는 것을 잊지 마시기를…

int RECV_PIN = 2;

적외선 수신 센서의 출력이 연결되는 포트로, 사용자 임의로 연결이 가능하다.

IRrecv irrecv(RECV_PIN);

IRrecv는 적외선 리모콘 사용을 위한 클래스 이름이다. 정의된 클래스를 이용해서 적외선 리모콘 수신을 처리 할 수 있다.

decode_results results;

리모콘 수신 데이터의 디코딩 결과를 처리하는 클래스이다. 디코딩 된 데이터의 프로토콜 타입, 디코딩 데이터, 비트 수, raw 데이터, raw 데이터 길이 등을 처리한다.

irrecv.enableIRIn();

적외선 리모콘의 입력을 시작하는 함수이다. setup() 함수 안에서 사용을 하면 된다.

irrecv.decode(&results)

입력되는 리모콘 데이터를 디코딩한다.

irrecv.resume();

디코딩이 종료된 후 다시 입력을 받기 위한 설정을 초기화 한다.

위 코드를 천천히 보면, 어떻게 사용하는지에 대해 알 수 있으리라 생각된다. 다음 강좌에서 예제를 통해서 알아 보도록 하자.


http://blog.naver.com/rnc_ohm

비밀번호 확인 닫기
name password
  Content name date hits
[아두이노] 9. 적외선 리모콘  
2014/05/15 9014
상호명 : R&C사 사업자등록번호 : 106-02-43112 통신판매업신고번호 : 용산 03564
대표 : 곽민수 사업장소재지 : 서울시 용산구 갈월동 17-1번지 세기빌딩 101호
전화 : ☎ : 02-776-4868 ,F: 02-779-6757 개인정보담당자 : 곽민수
[회사소개] [이용안내] [이용약관] [개인정보취급방침]
Copyright ⓒ 도서출판 OHM사와 학습기기 R&C사 All Rights Reserved.