본문 바로가기

Arduino(아두이노)

[버섯][Arduino] KEYS IR KIT을 이용한 IR 제어 샘플

안녕하세요 버섯돌이 유재성입니다.


작년에 선물 받은 부품 중 KEYS IR KIT(KY-022 모델)을 아두이노에서 제어하기 위해 구글링 후 간단히 샘플을 만들어봤습니다.


::외형::



위처럼 IR 리모컨과 IR 수광 모듈로 구성되어있습니다.


::핀맵::

아두이노와의 결선은 아래 핀 맵을 참고 하셔서 결선하시기 바랍니다.


Arduino GND          --> IR Module -표시 핀

Arduino +5V           --> IR Module 중앙 핀

Arduino Digital pin 11 --> IR Module S표시 핀


간단히 설명 드리자면 위 사진처럼 정면을 기준으로 좌측부터 GND와 +5V에 연결하시고..
마지막 핀은 신호를 수신하는 핀이므로 아두이노의 희망하는(여기서는 11번)핀에 연결하시면 됩니다.

혹시라도 결선을 잘 못하더라도 IR 모듈이 곧바로 사망하지는 않고 점점 뜨거워지다가 오래되면 사망하기 때문에
전원을 연결하신 뒤에 몇 초정도 으로 만졌을 때 점점 뜨거워지면 잘 못 연결한 것이니 결선을 바꿔 보시기 바랍니다.
잘 못 연결된 상태로 장시간 노출된 경우에는 엄청 뜨거울 수 있으니 화상에 주의하면서 확인하시기 바랍니다.


::IR 제어::

IR 제어와 관련해서는 https://github.com/shirriff/Arduino-IRremote 에서 라이브러리를 다운로드 받으면 샘플이있으며,

http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html 에 세부 설명이 존재합니다.


라이브러리 설치 방법은 라이브러리를 다운로드 받은 후 "스케치 > 라이브러리 가져오기"의 "Add Library.."를 선택후

다운로드 받은 Arduino-IRremote-master.zip 파일을 선택하면 자동으로 라이브러리가 추가됩니다.


제 경우 다른 라이브러리와 충돌나는지 빌드하면 "libraries\RobotIRremote" 폴더에서 에러가 발생하더군요.

오랜만에 IR을 다시 만질 일이 있어서 최신 버전으로 테스트하면서 내용을 좀 더 추가해 놓습니다.



Arduino-IRremote-master.zip


keys-ir-test01.ino


위처럼 라이브러리는 추가되었지만 아두이노에서 추가된 라이브러리를 사용하지 않아서 에러가 발생하는 듯 싶네요.

아무래도 기본 제공되는 라이브러리와 추가한 라이브러리 간의 충돌인 듯싶지만 제 경우 추가한 라이브러리가 더 편한지라...^^;;

Used라고 표시된 라이브러리를 이용하지 못 하도록 에러가 발생하는 라이브러리 (RobotIRremote) 폴더 자체를 삭제 후

다시 컴파일 했지만 기존 환경이 메모리에 로드된 상태라 그런지 여전히 에러가 발생하더군요.


아두이노 IDE를 재시작한 뒤 다시 컴파일하니 오류가 없음을 확인했습니다. (참고로 저는 아두이노를 잘 모릅니다.^^)

훗 날 제가 다시 참고할 목적으로 작성하는 글인지라 혹시라도 제 글을 참고하실 분들은....

비슷하게 해결하시거나 정상적인(?) 방법으로 멋지게 해결하시기 바랍니다.^^;;;



아래 소스는 IR KIT의 모든 버튼을 맵핑 시켜놨으니 적절히 활용하시면 될 듯 싶습니다.

저도 이제 막 입문한 상태인데다 간단히 애기가 갖고 놀 목적으로만 작성했으니 욕하지 마시고 적당히 활용하세요^^;;


참고로, 소스중 if (irrecv.decode(&results)) 부분에서 IR이 수신될 때까지 멈춰있는게 아니라...

IR 신호가 수신될 때에만 if문 안의 내용이 실행되기 때문에 다른 코드들은 실시간으로 처리가 가능할 거라 봅니다.

워낙 라이브러리가 좋고 소스 내용도 아주 심플하니 설명은 필요 없을것 같네요.^^


똑같은 제품이 아닌 다른 IR 송/수신 모듈을 이용하시는 분들은 IR 값이 다를 테니...

소스에서 default: 부분의 주석을 없앤 뒤 모니터링 화면을 띄우시고...

송신기(예:리모컨)의 원하는 버튼을 눌러 보시면 시리얼 모니터에 해당 버튼의 HEX 값이 출력됩니다.

이 값을 확인 후 적당히 맵핑해서 사용하시면 될 거라 봅니다.


잘 안되는 경우에는 저도 모르니 구글링하세요~~

 

//============================================================================================
// KEYES IR Kit Sample Code
//--------------------------------------------------------------------------------------------
// date : 2014-12-25
// Ver : 0.1
// Program by Yoo JaeSung ( http://blog.naver.com/dev4unet )
// used library :  https://github.com/shirriff/Arduino-IRremote
//============================================================================================
#include <IRremote.h>

#define IR_KEY_PRESSED 0xFFFFFFFF

#define IR_KEY_UP 0xFF629D
#define IR_KEY_DOWN 0xFFA857
#define IR_KEY_LEFT 0xFF22DD
#define IR_KEY_RIGHT 0xFFC23D

#define IR_KEY_OK  0xFF02FD
#define IR_KEY_ASTERISK  0xFF42BD  // *
#define IR_KEY_SHARP  0xFF52AD    // #

#define IR_KEY_1 0xFF6897        // 1
#define IR_KEY_2 0xFF9867
#define IR_KEY_3 0xFFB04F
#define IR_KEY_4 0xFF30CF
#define IR_KEY_5 0xFF18E7
#define IR_KEY_6 0xFF7A85
#define IR_KEY_7 0xFF10EF
#define IR_KEY_8 0xFF38C7
#define IR_KEY_9 0xFF5AA5
#define IR_KEY_0 0xFF4AB5    // 0

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

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

void loop() {
  if (irrecv.decode(&results)) {
    switch(results.value) {
        case IR_KEY_PRESSED:
                break;

        case IR_KEY_UP:
         Serial.println("IR_KEY_UP");
         break;
        
        case IR_KEY_DOWN:
         Serial.println("IR_KEY_DOWN");
         break;
        
        case IR_KEY_LEFT:
         Serial.println("IR_KEY_LEFT");
         break;
        
        case IR_KEY_RIGHT:
         Serial.println("IR_KEY_RIGHT");
         break;
        
        
        case IR_KEY_OK :
         Serial.println("IR_KEY_OK ");
         break;
        
        case IR_KEY_ASTERISK :
         Serial.println("IR_KEY_ASTERISK ");
         break;
        
        case IR_KEY_SHARP :
         Serial.println("IR_KEY_SHARP ");
         break;
        
        
        case IR_KEY_1:
         Serial.println("IR_KEY_1");
         break;
        
        case IR_KEY_2:
         Serial.println("IR_KEY_2");
         break;
        
        case IR_KEY_3:
         Serial.println("IR_KEY_3");
         break;
        
        case IR_KEY_4:
         Serial.println("IR_KEY_4");
         break;
        
        case IR_KEY_5:
         Serial.println("IR_KEY_5");
         break;
        
        case IR_KEY_6:
         Serial.println("IR_KEY_6");
         break;
        
        case IR_KEY_7:
         Serial.println("IR_KEY_7");
         break;
        
        case IR_KEY_8:
         Serial.println("IR_KEY_8");
         break;
        
        case IR_KEY_9:
         Serial.println("IR_KEY_9");
         break;
        
        case IR_KEY_0:
         Serial.println("IR_KEY_0");
         break;

        default:
         //Serial.print("Unknown Key:");
         //Serial.println(results.value, HEX);
         break;
    }
    irrecv.resume(); // Receive the next value
  }
}

 

ㅎㅎ..영상도 첨부해 놓으려고 했는데 너무 오래되어서 안 보이는군요^^;;

워낙 쉽고 직관적이니 사용에 무리는 없으리라 봅니다.



[기타 참고할 사이트]

Arduino KY-022 Infrared sensor receiver module - IR 수신 모듈

https://tkkrlab.nl/wiki/Arduino_KY-022_Infrared_sensor_receiver_module 


Arduino KY-005 Infrared emission sensor module - IR 송신 모듈

https://tkkrlab.nl/wiki/Arduino_KY-005_Infrared_emission_sensor_module 



[목차] 버섯돌이와 함께하는 아두이노(Arduino) 기초 목차