라즈베리파이, 아두이노

[간단한 아두이노 코딩] 13. 적외선 센서 & 리모컨 사용하기

포도알77 2020. 11. 24. 10:23

적외선 센서 & 리모컨 사용하기

 

1. 적외선 센서와 리모컨

 TV, IPTV, 에어컨등 많은 생활가전에 사용되는 리모컨은 적외선을 통해서 데이터를 전송한다. 이러한 적외선 장치를 사용하기 위해서는 데이터를 송신하는 리모컨과 송신된 데이터를 수신하는 적외선 센서로 구성된다. 

 적외선 통신은 아날로그 형태로 데이터를 전달하기 때문에 휴대폰의 리모컨 기능처럼 전송 프로토콜만 알고있으면 하나의 송신장치로 제어가 가능하다.

 

 오늘 사용할 리모컨은 아래와 같으며, 리시버로는 VS 1838B이다.

 

 

 마찬가지로 IRemote라는 라이브러리를 이용할 예정이다. 라이브러리 매니저를 통해 아래의 라이브러리를 설치하자.

 

 

2. 회로도

3. 소스코드

 LED(우노의 내장 LED 13번)을 이용하여, 리모컨의 버튼 "1"을 누르면 LED가 켜지고, "2"를 누르면 0.5초 점등 그리고 나머지 버튼의 경우 LED를 끄는 동작을 수행한다.

 

// IRremote.h 헤더
#include <IRremote.h>

// 적외선 리시버 핀8
// LED 핀 13 (Built in)
#define RECEIVER_PIN 8
#define LED_PIN 13

// 적외선 리시버 변수 정의
IRrecv receiver(RECEIVER_PIN);
// 수신 데이터 저장 구조체
decode_results rst;

void setup() {
  // 리시버 enable
  receiver.enableIRIn();
  // LED 핀 모드 설정
  pinMode(LED_PIN, OUTPUT);
  // 리시버 결과를 보기 위하여 시리얼 통신
  Serial.begin(9600);
}

void loop() {
  // 리시버 결과를 decode하여 decord_results에 저장하기 위하여
  // 구조체의 주소값을 전달
  if(receiver.decode(&rst)){
    Serial.println(rst.value, HEX);
    // 결과 값을 바탕으로 switch 구문 실행
    switch(rst.value){
      // 버튼 '1'의 값이면
      case 0xFF30CF:
        // LED 켬
        digitalWrite(LED_PIN, HIGH);
        break;
      // 버튼 '2'의 값이면
      case 0xFF18E7:
        // LED를 0.5초간 켰다 끔
        digitalWrite(LED_PIN, HIGH);
        delay(500);
        digitalWrite(LED_PIN, LOW);
        break;
      // 그 외는 LED끔
      default : 
        digitalWrite(LED_PIN, LOW);
    }
    // 50ms 뒤에 다시 receiver의 데이터 수신을 시작
    delay(50);
    receiver.resume();
  }
}
페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사