본문으로 바로가기

  아두이노(Arduino) 중급 IRremote 적외선 송수신  


애드라이프의 아두이노 모든 포스팅 리스트를 보고 싶으신 분은 공지 읽어주세요.


참고로 중급편 부터는 응용편이 없습니다. 

왜냐하면 고급편에서 중급에 사용했던 부품의 응용편을 다룰 예정이기 때문이죠!!


안녕하세요. 애드라이프 입니다.

오늘은 아두이노를 가지고 적외선 송수신가 TEST를 해볼 예정입니다.

우선 포스팅에 사용될 주요 부품들의 실물을 확인해보도록 하겠습니다.▼

아두이노 적외선 수신센서아두이노 적외선 리모컨

왼쪽▲ 적외선 수신기모듈            오른쪽▲ 적외선 리모컨



가장이해가 빠른것은 우리 TV리모컨을 생각하시면 됩니다.

TV리모컨이나 에어컨 리모컨들을 조작한다고 그 빛이 저희 눈에 보이진 않죠.

그것은 적외선이라는 이름에서 이유를 찾을 수 있습니다.

흔히 눈에 보이는 빛의 파장을 가시광선이라고 하죠.

그중에서 가장 파장이 긴 색이 적색광입니다.

단순히 그 적색광보다 파장이 더 길어서 적색광 바깥에 있는 광선이다.

고로 적(색)외(바깥)선(광선)입니다.


혹시나 하는 마음으로 구글검색을 해봤는데 매우 좋은 시각자료가

저작권없이 수정후 재사용가능한 상태로 하나 있어서 가지고 왔습니다.

빛의 파장에 대한 자료

다른 정보는 복잡하니 그냥 넘기시고 중간에 보면 무지개 색상으로 되어있는 부분이 보이시죠?

그 부분이 가시광선 역영대고 그 옆에 적외선이 있는 것을 확인하실 수 있습니다.

눈으로 볼수 있는 파장이 아니에요.


그럼 오늘은 적외선 리모컨과 수신기를 사용해서 어떤 것을 해볼까요?

오늘 준비한것은 리모컨에서 특정 버튼의 값을 받아와서 그 값이을 이용해 LED를 제어해 보겠습니다.


아두이노 적외선 송부신 회로도

위에 있는 리모콘에 1,2,3 번 버튼을 눌러 각각 LED를 제어해 보도록 하겠습니다.

그럼 먼저 리모콘에 버튼들이 어떤 고유 값들을 가지고 있는지 알아야 겠죠?


이미 개발 되어있는 라이브러리를 이용하여 리모컨 값을 받아와 보겠습니다.



Arduino-IRremote-master.zip


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <IRremote.h>                       //라이브러리를 다운받아 적용시켜주세요.
#include <IRremoteInt.h>                    //라이브러리를 다운받아 적용시켜주세요.
 
 #define IRPIN 2                            //적외선 수신센서의 OUT단자를 아두이노 디지털 핀 2번에 연결해 주세요.
 
 IRrecv ir(IRPIN);
 decode_results res;                      //class decode_results를 상속 받는 res
 
 void setup() {
   Serial.begin(9600);                      //통신속도 9600
   ir.enableIRIn();                           // IR 수신 시작
 }
 
 void loop() {
   if (ir.decode(&res))                     //데이터 수신시 decode_results의 형태의 데이터를 출력
   {
     Serial.print("decode_type : ");
     Serial.print(res.decode_type);
     
     Serial.print("\tvalue : ");
     Serial.print(res.value, HEX);
     
     Serial.print("\tbits : ");
     Serial.println(res.bits);
     
     ir.resume();                           //  다음 값
   }
 }
cs

프로그램의 전체적인 흐름은 주석을 참고해 주세요.


프로그램을 적용하기 전에 몇가지 설명 드릴께 있습니다.▼

설명에도 쓰여있듯이 결과를 리턴해주는 Decoding된 Format입니다.


그중에 decode_type하나만 살펴보면 ▼

enum으로 순차 선언된 decode_type에 대한 목록입니다. 브렌드명이지 않을까 싶습니다.


제가 가지고 있는 리모컨으로 1번을 눌러 나온값을 살펴보면 이해가 더 쉬울 겁니다.

아두이노 적외선 수신센서 시리얼 모니터값

decode_type : 3 >> NEC

Value : FF30CF >>1번 키값

bits : 32



FFFFFFF값은 키를 계속 누르고있으면 출력되는 값이며

반복되지 않는 나머지 값는들은 쓰레기 값이니 무시하셔도 됩니다.


이렇게 제가 가지고 있는 적외선 리모컨의 모든 버튼의 값을 정리했습니다.▼

 CH- : FFA25D

CH  : FF629D 

CH+: FFE21D 

 |<<: FF22DD

 >>|: FF02FD

>|| : FFC23D 

 -   : FFE01F

+  : FFA857 

EQ: FF906F 

 0: FF6897

 100+: FF9867

200+: FFB04F 

 1: FF30CF

 2: FF18E7

3: FF7A85 

 4: FF10EF

 5: FF38C7

6: FF5AA5 

 7: FF42BD

 8: FF4AB5

9: FF52AD 


위 값들을 기준으로 하여 수신되는 조건을 만들어 원하는 동작을 만들어 주기만 하면 됩니다.


바로 아두이노의 적외선 리모컨을 이용한 LED제어 프로그램을 살펴보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <IRremote.h>                       //라이브러리를 다운받아 적용시켜주세요.
 #include <IRremoteInt.h>                   //라이브러리를 다운받아 적용시켜주세요.
 
 #define LED1  3                            //적외선 리모턴 1번 버튼에 제어될 LED를 디지털 포트 3번에 연결시켜주세요.
 #define LED2  4                            //적외선 리모턴 2번 버튼에 제어될 LED를 디지털 포트 4번에 연결시켜주세요.
 #define LED3  5                            //적외선 리모턴 3번 버튼에 제어될 LED를 디지털 포트 5번에 연결시켜주세요.
 
 #define IRPIN 2
 
 IRrecv ir(IRPIN);
 decode_results res;
 
 void setup() {
   pinMode(LED1 , OUTPUT);                 //디지털 포트 3번을 OUT으로 설정 
   pinMode(LED2 , OUTPUT);                 //디지털 포트 3번을 OUT으로 설정 
   pinMode(LED3 , OUTPUT);                 //디지털 포트 3번을 OUT으로 설정 
   Serial.begin(9600);                    //통신속도 9600 
   ir.enableIRIn();                         // IR 수신 시작
 }
 
 void loop() {
   if (ir.decode(&res))
   {
     if(res.value == 0xFF30CF)              // 1번 버튼 KEY 값
     {
       digitalWrite(LED1 , HIGH);         
       digitalWrite(LED2 , LOW);   
       digitalWrite(LED3 , LOW);
     }
     else if(res.value == 0xFF18E7)         // 1번 버튼 KEY 값
     {
       digitalWrite(LED1 , LOW);      
       digitalWrite(LED2 , HIGH);    
       digitalWrite(LED3 , LOW);      
     }
     else if(res.value == 0xFF7A85)         // 1번 버튼 KEY 값
     {
       digitalWrite(LED1 , LOW);      
       digitalWrite(LED2 , LOW);     
       digitalWrite(LED3 , HIGH);      
     }
     ir.resume();    //  다음 값
   }
 }
cs


단순이 위 프로그램에서 res.value값을 받아와 LED를 제어하는 구문만 추가되었을 뿐입니다.

위에 제가 쓰고있는 적외선 리모컨의 키별 값을 정리해놓은 표를 보면 1,2,3번 키에 해당하는 

값으로 LED 3개를 제어하고 있다는 것을 알 수있습니다.


결과를 동영상으로 확인 하시면서 이번 포스팅을 끝내도록 하겠습니다.▼

LED 밝기가 너무 밝아서 처음에 화면 밝기 조절로 인해 화면이 어두어지는 것이니 참고하세요.


지금까지 아두이노(Arduino) 중급 IRremote 적외선 송수신에 대한 포스팅이였습니다.

다음에는 꼭 만들어진 리모컨 말고 제가 따로 송신기를 만들어서 포스팅하겠습니다.

현재는 송신모듈이 없어서....있는 리모컨을 뜯기는 뭐하고...


계속해서 도움되는 포스팅으러 찾아 뵙겠습니다.

by 애드라이프