반응형

적외선은 우리 생활에서 각종 리모컨, 열감지, 온도측정, 야간카메라 등의 많은 분야에 쓰인다.

아두이노에서는 적외선 센서를 활용하여 감지되는 적외선 신호를 판별 할 수 있다.

간단하게 TV리모컨의 원리와 같다고 보면 된다.


적외선 센서는 VS1838B 라는 센서를 이용한다.

적외선 센서 VS1838B


VS1838B 데이터시트: 

Infrared receiver vs1838b.pdf


라이브러리: 

IRremote library.zip


라이브러리 추가 시 나의 경우는 RobotIRremote 라는 이름의 기본으로 포함된 라이브러리와 다운로드 받은 IRremote 라이브러리가 이름이 같아 충돌이 일어나서 RobotIRremote 라이브러리를 삭제하고 테스트 하였다.



앞면을 볼 때 좌측부터 OUT, GND, VCC 단자이다. 핀의 길이가 모두 똑같기 때문에 연결에 유의해야 한다.



연결은 위와 같이 한다. 물론 노란색 OUT핀은 다른 디지털 단자에 연결해도 상관 없다.




적외선 센서 테스트를 위한 리모컨, 리모컨은 집에 굴러다니는 아무 리모컨이나 이용하면 된다.



테스트 리모컨은 육안으로 보기엔 버튼을 눌러도 아무것도 보이지 않지만 스마트폰 등의 카메라로 촬영할 경우 적외선 신호가 반짝이는 것을 볼 수 있다.



##소스##

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>
int input_pin = 2//입력핀의 설정
IRrecv irrecv(input_pin); //IRrecv 객체생성
decode_results signals;  //수신 데이터 저장 구조체
 
void setup()
{
    Serial.begin(9600);   //시리얼모니터
    irrecv.enableIRIn();   //수신시작
}
 
void loop() {
  
//수신되는 내용이 있을 경우만 시리얼모니터에 표시함  
if (irrecv.decode(&signals)) {
  
        //수신 데이터를 16진수로 표시
        Serial.println(signals.value, HEX);
        
        //수신 데이터의 길이를 10진수로 표시
        Serial.println(signals.bits, DEC);
        
        //다음 신호를 받을 수 있도록 한다
        irrecv.resume();
        
    }
    
}
cs



##결과##

아래와 같이 리모컨으로 적외선 센서를 향하여 버튼을 누르면 해당되는 값을 센서가 수신하여 아두이노로 전송하고 시리얼 모니터 상에 수신값과 수신 데이터의 길이를 표시해 준다. loop 안에 if 나 switch 문 등을 이용하여 특정 값 수신 시 원하는 동작을 하도록 설정도 가능할 것이다.







■ 추가내용 (2017.01.26) : 위에 올려 놓은 라이브러리 파일이 신버전의 아두이노 IDE 에서는 에러가 나는 현상을 제보를 통해 알게 되었다. 원인은 신버전에서 기본 헤더파일명이 변경된 것. 라이브러리 파일 중 IRremoteInt.h 를 메모장으로 열고 윗부분을 보면 #include <WProgram.h> 을 #include <Arduino.h> 로 바꾸면 해결이 된다. 그리고 구버전과 신버전 모두에서 사용이 가능한 수정된 라이브러리 파일을 올려놓는다. 직접 수정을 하거나 또는 아래의 라이브러리로 대체하면 된다.


IRremote.zip



반응형

+ Recent posts