본문 바로가기
Arduino(아두이노) 키트 강좌

Step.31 Arduino Uno 로 IR 적외선 원격제어 키트를 이용해 LED 제어해 보기

by 오마이엔지니어 2020. 5. 8.
반응형

 

Arduino Uno 로 IR 적외선 원격제어 키트를 이용해 적외선 송수신으로 LED를 제어해보는 프로젝트 입니다

적외선 이란?
IR(Infrared)라고 부르며, 가시광선보다 파장이 길며, 햇빛이나 백열된 물체로 부터 방출되는 빛을 스펙트럼으로 분산시켜 보면 적색스펙트럼 보다 더 바깥쪽에 있으므로 적외선이라고 부릅니다

 

 

 


<적외선의 파장은 0.75um부터 1,000um사이에 위치합니다>

적외선 통신 (IR통신) 은 이런 적외선을 쏘아서 이를 통해 정보를 전달하는 통신 방식입니다
적외선 통신은 송신부와 수신부 2가지로 나눠지고 송신부에서 적외선을 발산하면 수신부에서 포토다이오드를 통해 적외선을 수신합니다
주로 TV나, 에어컨 등에서 사용되는 리모컨이 IR통신 방식을 사용합니다

 

 



적외선 통신 방법
적외선 통신에서 송신부는 정보를 전달할때 메시지 신호를 일정한 진폭의 반송파로 변조하여 전송합니다
변조를 하게 되면 효율적으로 정보를 전달할 수 있고 외부 빛이나 노이즈에 대한 영향을 덜 받게됩니다

아래 그림처럼 High과 Low으로 이루어진 하나의 펄스 Message Signal 을 변조해서 출력하면 Modulated Output 처럼 신호가 출력이 됩니다
변조과정은 Message Signal이 High 일때 변조할 주파수의 성분을 펄스형태로 최종 반송파 신호를 생성해서 출력하는것 입니다

적외선 통신은 37 ~ 42 kHz로 변조를 하며, 보통 리모컨에서는 38kHz로 변조를 합니다

 

 



수신부포토다이오드(Photodiode)로 송신부에서 전달된 적외선을 검출하는데, 포토다이오드는

빛에너지를 전기에너지로 바꾸어 전류를 흘러보내는 특성을 가지고 있습니다

보통 포토다이오드의 경우 검정색인데 검정색인 이유는 적외선만을 검출하기 위한 필터의 역할을 하기 때문입니다

 


위에서 송신부에서는 변조과정을 거친다고 했는데 수신부에서는 쌍을 이루는 송신부에서 보내는 적외선만을 검출해야 합니다
그렇기 때문에 별도의 필터를 통해 특정 주파수(38kHz) 의 적외선만 검출하게 되는데 아래 사진과 같은 IR Photodiode 을 사용합니다

 

 

 

최종적으로 적외선 통신을 구현을 한다면 아래와 같은 형태가 됩니다


 

 



IR 적외선 원격제어 키트 원격으로 무선 로봇, 장치, 모듈 등을 제어하는 데 응용 가능합니다

 

17버튼 구성의 38KHz 주파수 리모콘과 IR 적외선 수신 모듈, IR LED로 다양한 프로젝트를 수행 해 볼 수 있습니다

아두이노와 호환 가능하며 실내 최대 8M 전송거리 사양으로 간단한 원격제어 프로젝트를 실행하는데 적합 합니다

 


<IR 적외선 원격 제어 키트 구성품 이미지>

 

 

<IR 적외선 원격 제어 키트 상세 사양 설명>

 

사용된 부품

Arduino Uno R3 (Italy)
미니 브래드 보드

IR 적외선 원격제어 키트(IR 적외선 리모콘& IR 적외선 수신모듈, IR LED 구성)

220 Ohm 저항 - 4개

5mm LED - 4개

점퍼케이블

 

사용된 키트

Arduino Starter kit (클릭)

구성 배선도 (적외선 리모컨 버튼의 IR 코드 확인해 보기) 

 


구성 배선도 (적외선 송수신으로 LED 제어해 보기)

 

 

사용된 예제소스  

Finding-IR-Codes.txt

IRremote_LEDS.txt

 

사용된 라이브러리

IRremote.zip


IR 적외선 원격제어 키트는 라이브러리를 추가해 주어야 합니다
라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요


첫번째 "Finding-IR-Codes" 예제는 적외선 리모콘의 버튼 별 IR 코드를 확인해 보는 예제 코드 입니다

두번째 "IRremote_LEDS" 은 적외선 리모콘과 수신모듈 IR LED를 이용해서 아두이노에 연결 된 LED를 제어해 보는 예제 코드 입니다

 

먼저 적외선 리모컨 마다 IR 코드가 전부 틀리기 때문에 보유하고 있는 적외선 리모컨의 IR 코드를 정확하게 확인해야 합니다
때문에 먼저 Finding-IR-Codes 예제를 먼저 테스트 합니다

예제코드를 살펴보면
#include <IRremote.h>
IRremote.h 라이브러리를 사용합니다

int RECV_PIN = 11;
적외선 수신기의 시그널핀은 아두이노의 11번에 연결합니다

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();
}
보드레이트 9600 으로 시리얼 통신해서

 

void loop()
{
  if (irrecv.decode(&results))
    {
    int value = results.value;
    Serial.println(" ");
    Serial.print("Code: ");
    Serial.println(results.value); //prints the value a a button press
    Serial.println(" ");
    irrecv.resume();              // Receive the next value
    Serial.println("*****************");
      }
}
버튼 별 IR 코드 값을 시리얼 모니터로 출력해 줍니다

적외선 리모컨의 1,2,3,4 버튼을 사용할 것이기 때문에 적외선 리모컨의 1,2,3,4 번 버튼을 눌러서
시리얼 모니터에 출력되는 IR 코드값을 확인해 줍니다
하단 동영상에서도 확인할 수 있듯이
 
1번 버튼 16753245
2번 버튼 16736925
3번 버튼 16769565
4번 버튼 16720605

이렇게 IR 코드값을 확인하였습니다

이제 두번째 예제코드인 IRremote_LEDS 예제를 업로드해 줍니다
예제코드를 살펴보면
#include <IRremote.h>
IRremote.h 라이브러리를 사용합니다

#define first_key  16753245
#define second_key  16736925
#define third_key  16769565
#define fourth_key  16720605
첫번째부터 네번째까지 버튼 설정입니다, 먼저 Finding-IR-Codes 예제에서 확인 한
적외선 리모컨의 
1,2,3,4 번 버튼 별 IR 코드가 입력되어 있으면 됩니다

int receiver_pin = 8;  
적외선 수신기의 시그널핀은 아두이노의 8번에 연결합니다

int first_led_pin = 7;
int second_led_pin = 6;
int third_led_pin = 5;
int fourth_led_pin = 4;
4색상 5mm LED는 차례대로 아두이노의 7,6,5,4 번 핀에 연결 합니다

void setup()
{
  Serial.begin(9600);
  receiver.enableIRIn(); 
  pinMode(first_led_pin, OUTPUT);
  pinMode(second_led_pin, OUTPUT);
  pinMode(third_led_pin, OUTPUT);
  pinMode(fourth_led_pin, OUTPUT);
  }
void setup 1~4번 LED를 역시 보드레이트 9600 속도로 시리얼 통신으로 출력하며 시작하고

void loop() {
  if (receiver.decode(&output)) {
    unsigned int value = output.value;
    switch(value) {
       case first_key:   
         if(led[1] == 1) {      
            digitalWrite(first_led_pin, LOW);
            led[1] = 0;          
         } else {                     
             digitalWrite(first_led_pin, HIGH);
             led[1] = 1;         
         }
          break;
       case second_key:
     
         if(led[2] == 1) {
            digitalWrite(second_led_pin, LOW);
            led[2] = 0;
         } else {
             digitalWrite(second_led_pin, HIGH);
             led[2] = 1;
         }
          break;
       case third_key:
     
         if(led[3] == 1) {
            digitalWrite(third_led_pin, LOW);
            led[3] = 0;
         } else {
             digitalWrite(third_led_pin, HIGH);
             led[3] = 1;
         }
          break;  
          case fourth_key:
     
         if(led[4] == 1) {      
            digitalWrite(fourth_led_pin, LOW);
            led[4] = 0;          
         } else {                     
             digitalWrite(fourth_led_pin, HIGH);
             led[4] = 1;         
         }
          break;       
    }
    Serial.println(value);
    receiver.resume();
  }
}
void loop 부분에서 데이터가 0일때 LOW 1일때 HIGH 로 LED를 온오프 시키며 반복합니다

프로젝트 동영상

 

이렇게 IR 적외선 송수신 방법으로 아두이노에 연결 된 LED를 제어할 수 있습니다


활용강좌
Arduino Uno 로 IR 적외선 원격제어 키트를 사용해서 RGB LED 제어하기

동일한 방법으로 IR Kit 을 사용해서 3색 신호등 모듈을 제어할 수 있습니다
포스팅 위쪽 예제코드를 그대로 사용해서 테스트 하면 되고 신호등 모듈은 LED가 3개 이므로
7번은 연결하지 않습니다 배선도는 아래를 참조해서 배선합니다

구성 배선도 (적외선 송수신으로 3색 신호등 모듈 제어해 보기)

프로젝트 동영상-적외선 송수신으로 3색 신호등 모듈 제어해 보기

반응형

댓글