본문 바로가기
모두의 아두이노

[아두이노][#17] 적외선 IR 리모콘 사용하기

by 로니킴 2021. 12. 8.


본 절은 [적외선 IR] 아두이노 리모컨를 사용하기 위해 알아야 할 내용과 실습 방법에 대해 설명합니다. 아두이노 리모컨의 특징, 동작원리, 사양, 연결 핀 배열, 출력 값, 주의사항을 알아봅니다. 아두이노와 리모컨를 연결하고, 간단한 코딩으로 리모컨를 쉽게 실습할 수 있습니다. 

 

목차

     

     

     


    아두이노 적외선 IR 리모콘 사용하기

     

    적외선 IR 리모컨 모듈은 아두이노와 함께 사용하여 적외선 신호로 데이터를 송수신하는 저비용 모듈입니다. 이 모듈은 VCC, GND, 신호 핀을 아두이노에 연결하여 사용하며, IRremote 라이브러리를 통해 코딩합니다. 적외선을 통해 데이터를 전송하고, 수신기가 신호를 감지해 아두이노로 전달하여 처리합니다. 간단한 테스트를 통해 설치가 정확히 되었는지 확인할 수 있습니다.

     

     

     


    적외선 IR 리모컨?

     17개의 기능키를 제공하는 적외선 리모컨입니다. 적외선(IR) 리모컨 모듈은 아두이노와 같은 마이크로컨트롤러에서 적외선 리모컨의 신호를 수신하고 해석하는 데 사용되는 모듈입니다. 적외선 리모컨은 TV, 에어컨, 오디오 시스템 등 다양한 가전 제품을 제어하는 데 널리 사용되며, 이 모듈을 통해 간단한 프로그래밍으로 아두이노를 이용해 이러한 기기들을 제어할 수 있습니다.

     

    적외선 리모컨 모듈은 주로 적외선 수신기(IR Receiver)와 함께 사용되며, 이 수신기는 리모컨에서 발신된 적외선 신호를 수신하여 아두이노로 전달합니다. 아두이노는 이 신호를 분석하여 어떤 버튼이 눌렸는지를 파악하고, 그에 맞는 동작을 수행할 수 있습니다.

     

     

     

     


     

    적외선 IR 아두이노 리모컨 특징

    적외선 IR 리모컨의 특징은 다음과 같습니다.

     

    - 17개의 기능 키

    - 최대 8m 까지 전송 가능

    - 변조된 리모컨 신호인 표준 38KHz를 수신하여 디코딩

    - 160mA 용량의 CR2025 배터리 사용

    - 전송 거리 : 약 8m

    - 유효 각도 : 60도

    - 표면 재질 : 0.125mm PET

     

    이러한 특징 덕분에 적외선 리모컨 모듈은 저전력 소모와 간편한 사용법으로 많은 전자 프로젝트에 적합합니다.

     

     

    [리모컨]

     

     


    [수신부]

     

    적외선 리모컨 모듈의 동작 원리는 적외선 신호를 통해 데이터를 전송하는 것입니다. 적외선(IR) LED가 특정 주파수로 깜빡이며 데이터를 전송하고, 이 신호를 적외선 수신기가 받아들여 디코딩합니다. HX1838 IR 수신기 모듈은 적외선 리모컨에서 방출되는 IR 신호를 감지합니다. 수광 다이오드는 수신된 IR 빛을 전기 신호로 변환합니다. 이 신호는 내부 IC에 의해 처리되어 IR 신호가 복조되고 인코딩된 정보가 추출됩니다.  IC의 출력은 아두이노가 읽을 수 있는 디지털 신호로 제공됩니다.

     

     

    적외선 통신

    적외선 리모컨은 보통 38kHz 주파수의 신호를 사용합니다. 리모컨의 버튼을 누르면, 리모컨 내부의 IR LED가 이 주파수로 깜빡이며 특정 패턴의 신호를 발신합니다. 이 신호는 수신기 모듈에 의해 감지되고, 디코딩되어 데이터로 변환됩니다.

     

    신호 디코딩

    적외선 수신기 모듈은 IR 신호를 받아서 전기 신호로 변환하고, 이 신호는 아두이노와 같은 마이크로컨트롤러로 전달됩니다. 아두이노는 수신된 신호를 분석하여 어느 버튼이 눌렸는지를 파악하고, 이에 따라 프로그램된 동작을 수행합니다.

     

    주요 구성 요소
    IR LED: 적외선 신호를 발신하는 역할을 합니다.
    IR 수신기: 적외선 신호를 수신하여 전기 신호로 변환합니다.
    아두이노: 수신된 신호를 분석하고 처리하는 역할을 합니다.

     

     

     

     


    적외선 IR 리모컨 구입하기

    [적외선 IR 리모컨]는 알리익스프레스, 네이버 쇼핑몰, 아마존 등에서 리모컨를 구입할 수 있습니다

     

     

    적외선 리모컨 모듈은 다양한 전자 부품 판매점에서 쉽게 구입할 수 있습니다. 아두이노 전용 키트나 모듈 세트에도 자주 포함되며, 온라인 마켓에서도 쉽게 찾아볼 수 있습니다. 구입 시에는 송신기와 수신기가 모두 포함된 세트를 선택하는 것이 좋습니다.

     

    구입 시 고려해야 할 사항은 다음과 같습니다:

     

    • 호환성: 사용하는 마이크로컨트롤러와의 호환성을 확인합니다.
    • 작동 거리: 사용 목적에 맞는 작동 거리를 가진 모듈을 선택합니다.
    • 전원 요구사항: 모듈이 필요로 하는 전원 요구사항을 확인하여, 기존 시스템과의 전원 공급이 가능한지 확인합니다.

     


     

    적외선 IR 리모컨 하드웨어 연결

    다음과 같이 적외선 IR 아두이노 리모컨를 연결할 수 있습니다. 적외선 IR 리모컨 모듈을 아두이노에 연결하는 방법은 매우 간단합니다. 다음은 일반적인 연결 방법입니다.

     

     

     

     

    연결 방법

    VCC: 모듈의 VCC 핀을 아두이노의 5V 핀에 연결합니다.

    GND: 모듈의 GND 핀을 아두이노의 GND 핀에 연결합니다.

    OUT: 모듈의 OUT 핀을 아두이노의 디지털 핀(D2)에 연결합니다.

     

     

    적외선 IR 리모컨 모듈을 아두이노에 연결하는 과정은 비교적 간단하며, 다음과 같은 기본적인 연결 단계를 포함합니다:

     

    1. 전원 연결
    적외선 리모컨 모듈은 일반적으로 3.3볼트 또는 5볼트에서 동작할 수 있습니다. 아두이노의 3.3볼트 핀 또는 5볼트 핀 중 하나를 선택하여 VCC 핀에 연결합니다.

     

    2. GND 연결
    아두이노의 GND 핀을 모듈의 GND 핀에 연결합니다.

     

    3. 신호 연결
    적외선 리모컨 모듈은 디지털 신호 핀을 사용하여 데이터를 전송합니다. 아두이노의 디지털 입력 핀 중 하나를 모듈의 신호 출력 핀에 연결하여 데이터를 읽을 수 있습니다.

    연결이 완료되면 아두이노와 적외선 IR 리모컨 모듈 간의 하드웨어 설정이 끝나며, 이후 소프트웨어 설정을 통해 신호를 해석하고 원하는 동작을 제어할 수 있습니다. 이러한 방식은 신호를 해석하기 위한 간단한 프로그래밍을 필요로 합니다.

     

     

     


     

    적외선 IR 리모컨 라이브러리 설치

    하드웨어 연결이 완료되면, 이제 소프트웨어 코딩을 통해 적외선 리모컨을 제어할 수 있습니다. 이를 위해 아두이노 IDE와 IRremote 라이브러리를 사용합니다. 다음과 같이 같이 라이브러리를 설치합니다. 

     

     

    IRremote 라이브러리 설치
    - 아두이노 IDE를 열고, Sketch -> Include Library -> Manage Libraries를 선택합니다.
    - 검색창에 "IRremote"를 입력하고, 해당 라이브러리를 설치합니다.

     

     

    https://www.arduino.cc/reference/en/libraries/irremote/

    https://github.com/Arduino-IRremote/Arduino-IRremote

     

     

     

     


     

    적외선 IR 리모컨 소프트웨어 코딩

    하드웨어 연결이 완료되면, 아두이노 IDE를 이용해 아두이노 리모컨 소스코드를 코딩할 수 있습다. 

     

     

    리모컨 코드는 다음과 같다. 

    #include <Arduino.h>
    #include <IRremote.h>  // IRremote 라이브러리를 포함합니다.
    
    #define ENABLE_LED_FEEDBACK true
    #define IR_RECEIVE_PIN 2  // To be compatible with interrupt example, pin 2 is chosen here.
    
    void onKeyMap(uint32_t key);  // 함수 프로토타입 선언
    
    void setup() {
      Serial.begin(115200);  // 시리얼 통신을 115200bps 속도로 시작합니다.
      Serial.println("IRRemote Start");
      IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
    }
    
    void loop() {
      if (IrReceiver.decode()) {
        if (IrReceiver.decodedIRData.protocol == UNKNOWN) {      
          Serial.println(F("Received noise or an unknown (or not yet enabled) protocol"));
          // IrReceiver.printIRResultRawFormatted(&Serial, true);
          IrReceiver.resume(); // Do it here, to preserve raw data for printing with printIRResultRawFormatted()
        } else {
          Serial.println("IRRemote Input");
          IrReceiver.printIRResultShort(&Serial);
          onKeyMap(IrReceiver.decodedIRData.decodedRawData);  // 수신된 신호 값을 onKeyMap 함수로 전달하여 처리합니다.
          IrReceiver.resume();  // Early enable receiving of the next IR frame
        }    
        Serial.println();
      }  
      delay(50);
    }
    
    // 적외선 신호에 따라 동작을 정의하는 함수입니다.
    void onKeyMap(uint32_t key) {
      switch (key) {
        case 0xB946FF00: Serial.print("UP, "); break;
        case 0xEA15FF00: Serial.print("DOWN, "); break;
        case 0xBB44FF00: Serial.print("LEFT, "); break;
        case 0xBC43FF00: Serial.print("RIGHT, "); break;
        case 0xBF40FF00: Serial.print("OK, "); break;
        case 0xBD42FF00: Serial.print("*, "); break;
        case 0xB54AFF00: Serial.print("#, "); break;
        default: return;  // 처리되지 않은 신호는 무시
      }
      Serial.println(key, HEX);  // 시리얼 모니터에 "신호값"을 출력합니다.
    }

     

     

    코드 설명

     



     

     

    코드 내용

     

    이 코드는 적외선(IR) 리모컨을 사용하여 아두이노 보드에서 신호를 수신하고, 각 신호에 따라 특정 동작을 수행하는 방법을 보여줍니다. 아래는 코드의 각 부분에 대한 자세한 설명입니다.

     

    1. 라이브러리 포함
       적외선 리모컨을 제어하기 위해 IRremote 라이브러리를 포함합니다. 이 라이브러리는 적외선 신호를 수신하고 해석하는 데 필요한 모든 기능을 제공합니다.

    2. 핀 설정 및 상수 정의
       - #define IR_RECEIVE_PIN 2: 적외선 수신기가 연결된 아두이노의 핀 번호를 정의합니다. 이 예제에서는 2번 핀을 사용합니다.
       - #define ENABLE_LED_FEEDBACK true: LED 피드백을 활성화합니다.

    3. 함수 프로토타입 선언
       - void onKeyMap(uint32_t key): 적외선 신호에 따라 동작을 정의하는 함수의 프로토타입을 선언합니다.

    4. 초기 설정
       - Serial.begin(115200): 시리얼 통신을 115200bps 속도로 시작합니다. 이를 통해 수신된 신호를 시리얼 모니터에 출력할 수 있습니다.
       - IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK): 적외선 수신기를 초기화하고, 신호 수신을 시작합니다.

    5. 메인 루프
       - if (IrReceiver.decode()): 적외선 신호가 수신되었는지 확인합니다.
         - if (IrReceiver.decodedIRData.protocol == UNKNOWN): 수신된 신호가 알려지지 않은 프로토콜인지 확인합니다.
           - Serial.println("IRRemote UNKNOWN"): 시리얼 모니터에 "IRRemote UNKNOWN" 메시지를 출력합니다.
           - Serial.println(F("Received noise or an unknown (or not yet enabled) protocol")): 시리얼 모니터에 "Received noise or an unknown (or not yet enabled) protocol" 메시지를 출력합니다.
         - else: 수신된 신호가 알려진 프로토콜일 경우.
           - Serial.println("IRRemote Input"): 시리얼 모니터에 "IRRemote Input" 메시지를 출력합니다.
           - IrReceiver.printIRResultShort(&Serial): 수신된 적외선 신호의 간략한 결과를 시리얼 모니터에 출력합니다.
           - onKeyMap(IrReceiver.decodedIRData.decodedRawData): 수신된 신호 값을 onKeyMap 함수로 전달하여 처리합니다.
         - IrReceiver.resume(): 다음 적외선 신호를 수신할 준비를 합니다.
         - Serial.println(): 시리얼 모니터에 빈 줄을 출력합니다.

    6. 신호 처리 함수
       - void onKeyMap(uint32_t key): 수신된 신호 값에 따라 특정 동작을 수행하는 함수입니다.
       - switch (key): 수신된 신호 값을 기준으로 여러 케이스를 구분합니다.
         - 각 케이스는 리모컨 버튼에 해당하는 신호 값을 가지고 있으며, 해당 신호가 수신되면 시리얼 모니터에 특정 문자열을 출력합니다.
         - 예를 들어, case 0xB946FF00: Serial.print("UP, "); break;는 "UP" 버튼 신호를 수신하면 "UP, "를 시리얼 모니터에 출력합니다.

    이 코드는 적외선 리모컨을 통해 다양한 입력을 처리하고, 입력에 따라 아두이노가 특정 동작을 수행할 수 있도록 설계되었습니다. 이를 통해 TV 리모컨, 오디오 리모컨 등 다양한 적외선 리모컨을 활용하여 아두이노 프로젝트를 제어할 수 있습니다.

     


     

    적외선 IR 리모컨 동작확인

    하드웨어 연결, 소프트웨어 코딩이 완료되면 다음과 같이 동작 화면을 확인할 수 있습니다. 코드를 업로드한 후, 리모컨 버튼을 누르고 아두이노 시리얼 모니터에서 신호를 확인합니다. 각 버튼에 따라 다른 코드가 출력되어야 하며, 이를 통해 리모컨이 정상적으로 작동하는지 확인할 수 있습니다.

     

     

    ------------------------------------------------------ 
    개발환경 : WINDOWS 11
    아두이노 IDE : 2.3.2
    ------------------------------------------------------ 
    01 연결
     - 아두이노와 PC 연결 
     - 아두이노 IDE 실행 
     - 메뉴 → 툴 → 보드:아두이노 UNO 확인 
      - 메뉴 → 스케치 → 확인/컴파일 

    02 컴파일 확인 

    스케치>확인/컴파일(CTRL+R) 를 선택해서 컴파일을 진행합니다.


    03 아두이노 우노 업로드 

    컴파일이 이상없이 완료되면 스케치>업로드(CTRL+U) 를 선택해서 컴파일 파일을 업로드 합니다. 


    04 동작 확인

    다음과 같이 동작을 확인할 수 있습니다. 

     

     

    문제 해결
    - 신호가 수신되지 않음: 모듈의 연결 상태를 확인하고, VCC와 GND가 제대로 연결되었는지 확인합니다.
    - 잘못된 신호: 리모컨의 배터리 상태를 확인하고, 다른 리모컨으로 테스트해 봅니다

     


     

    마무리

    아두이노와 적외선 IR 리모컨를 연결하고, 간단한 코딩으로 리모컨를 쉽게 실습할 수 있습니다. 적외선 IR 리모컨 모듈을 사용하면 아두이노 프로젝트에서 다양한 기기를 무선으로 제어할 수 있습니다. 이 글에서는 적외선 리모컨 모듈의 기본적인 사용법과 동작 원리를 설명했습니다. 이를 통해 여러분의 프로젝트에 더욱 편리한 무선 제어 기능을 추가할 수 있기를 바랍니다. 추가적으로, 다양한 센서나 액추에이터와 연동하여 더욱 복잡한 제어 시스템을 구성할 수도 있습니다. 이 모듈을 통해 창의적인 프로젝트를 많이 시도해보세요!

     

     

     

     

     

    반응형


    댓글