ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 아두이노 라이브러리 | 적외선 무선 원격 통신
    Technology/Arduino 2024. 2. 16. 18:00

    1. 적외선 무선 원격 통신

    적외선 무선 원격 통신

       적외선이 사람 눈에 보이지 않는다는 점을 이용해 적외선을 무선 원격 통신에 이용할 수 있다. 적외선을 방출하는 다이오드로 신호를 일정 규칙에 맞게 송출하면, 적외선을 감지하는 다이오드를 통해 신호를 읽어 송신부로부터 어떤 신호를 보냈는지 알아낼 수 있다. 적외선 무선 원격 통신은 다른 기기에 영향을 미치지 않고 안정적으로 동작하지만, 작동 범위가 5~7m로 다른 무선 원격 통신에 비해 짧으며, 햇빛과 같이 비슷한 파장대의 강한 광원이 있는 실외에서는 외부 간섭을 받기 때문에 적외선 통신이 제대로 이루어지지 않을 수 있다. 따라서 적외선 무선 원격 통신은 주로 실내 근거리에서 신호를 주고 받을 때 사용한다.

     

    2. 적외선 리모컨

    적외선 리모컨

       적외선 송신부로 적외선 발광 다이오드를 사용해도 괜찮지만, 일정 규칙에 맞게 다이오드에 디지털 신호를 가하는 알고리즘을 작성해야 한다. 적외선 통신 시스템을 빠르고 편리하게 구현하고 싶다면 적외선 리모콘을 사용해보자. 적외선 리모컨 앞부분에는 적외선 발광 다이오드가 있어, 리모컨의 버튼을 누르면 약 38 kHz의 주파수를 갖는 적외선 신호가 규칙에 맞게 방출된다. 리모컨의 각 버튼마다 다른 적외선 신호가 송신되며, 같은 기능의 버튼을 누르더라도 리모컨 제조사마다 다른 적외선 신호를 송출하기 때문에 리모컨 버튼을 눌렀을 때 어떤 신호가 송신되는지 확인하는 단계가 필요하다. 만약 적외선 리모컨이 없다면 아래 링크로 접속하여 구매할 수 있다.

     

    메카솔루션 공식 쇼핑몰

     

    mechasolution.com

     

    3. 적외선 수신부

    적외선 수신부

       적외선 수신부가 적외선 신호를 받는 과정에서 원하지 않는 파장대의 적외선이 외부로부터 유입될 수 있다. 불필요한 적외선 신호를 제거한 뒤 아두이노 플랫폼에서 처리하기 용이한 디지털 신호로 변환하기 위해서는 해당 기능을 위한 전자 회로를 별도로 구성해야 한다. 하지만 적외선 무선 원격 통신을 위해 모든 회로를 내장한 전자 소자들이 개발되어 있다. 적외선 통신 시스템을 빠르고 편리하게 구현하고 싶다면 해당 전자 소자를 사용해보자. 이번 예제에서 사용할 적외선 수신부 소자는 3개의 단자를 가지고 있으며, 아래 링크로 접속하면 구매할 수 있다.

     

    초특가 [IR 적외선 리모콘 수신부 38kHz] LTOP-ML38ATH

    일반적인 IR 수신부로 많이 사용되는 38kHz 의 센서입니다. 핀은 라이트엥글 타입이며 핀 간격은 2.54mm 수광부 CL-1L5 과 같이 사용됩니다.

    www.devicemart.co.kr

     

    4. 아두이노 라이브러리 추가

       적외선 리모컨으로부터 적외선 신호를 성공적으로 받아내더라도, 받아낸 신호를 일정 규칙에 맞게 해독하는 과정이 필요하다. 아두이노 플랫폼은 이러한 적외선 신호를 일정 규칙에 맞게 해독하는 라이브러리를 보유하고 있다. 아래 링크로 접속하면 해당 라이브러리에 대한 설명과 사용방법을 확인할 수 있다.

     

    GitHub - Arduino-IRremote/Arduino-IRremote: Infrared remote library for Arduino: send and receive infrared signals with multiple

    Infrared remote library for Arduino: send and receive infrared signals with multiple protocols - GitHub - Arduino-IRremote/Arduino-IRremote: Infrared remote library for Arduino: send and receive in...

    github.com

     

    아두이노 라이브러리 관리

       대부분의 라이브러리가 서보모터 라이브러리처럼 기본적으로 제공되지 않기 때문에, 사용하고자 하는 라이브러리를 IDE에 추가하는 과정이 필요하다. 아두이노 IDE  상단 툴바에서 '툴'을 선택한 뒤 '라이브러리 관리' 항목을 선택하자. 그러면 곧이어 '라이브러리 매니저' 창이 나타난다.

     

    아두이노 라이브러리 검색

       '라이브러리 매니저' 창 오른쪽 상단에 라이브러리 이름을 입력하면 아두이노 플랫폼에서 지원하는 라이브러리를 검색할 수 있다. 해당 칸에 우리가 이번 예제에서 사용할 라이브러리 'IRremote'를 입력하자.

     

    아두이노 라이브러리 설치

       라이브러리를 검색하면 입력한 검색어와 관련된 라이브러리 목록이 나타난다. 목록에서 설치하고자 하는 라이브러리의 이름과 버전을 확인하고 설치를 선택하자. 이번 예제에서는 IRremote 4.2.0 버전을 설치하도록 하겠다.

     

    아두이노 라이브러리 설치 확인

       설치를 성공적으로 마쳤다면 라이브러리 목록에서 설치를 마친 라이브러리에 'INSTALLED'라는 글자가 새로 나타난 것을 확인할 수 있다. 

     

    5. 예제

    5.1. 회로 구성

     

    회로 구성

     

    5.2. 프로그램 작성 - 적외선 리모컨 버튼별 신호 확인

    #include <IRremote.h> // 적외선 무선 원격 통신 라이브러리 추가
    
    void setup()
    {
      // 디지털 12번 핀에 연결되어 있는 적외선 수신기 활성화
      // 적외선 통신 상태를 확인하기 위해 내장 LED 활성화
      IrReceiver.begin(12, ENABLE_LED_FEEDBACK);
      
      Serial.begin(9600); // 시리얼 통신 시작 (통신 속도: 9600 bps)
    }
    
    void loop()
    {
      if (IrReceiver.decode()) // 적외선 송신기로부터 수신 받은 신호가 있으면 실행
      {
        // 수신된 신호로부터 해석된 프로토콜(Protocol), 주소(Address), 명령(Command), 코드값(Raw-Data)을 시리얼 모니터에 출력
        IrReceiver.printIRResultShort(&Serial);
        
        Serial.print("Command of the button in hexadecimal: "); // 시리얼 모니터에 문자열을 출력
        // 수신된 신호로부터 해석한 결과 중 명령(command)을 16진법으로 시리얼 모니터에 출력한 뒤 줄 바꿈
        Serial.println(IrReceiver.decodedIRData.command, HEX);
        
        IrReceiver.resume(); // 적외선 송신기로부터 다음 신호를 받을 수 있도록 대기
      }
    }

     

    5.3. 프로그램 작성 - 적외선 리모컨 버튼별 동작

    #include <IRremote.h>
    
    void setup()
    {
      // 디지털 12번 핀에 연결되어 있는 적외선 수신기 활성화
      // 적외선 통신 상태를 확인하기 위해 내장 LED 활성화
      IrReceiver.begin(12, ENABLE_LED_FEEDBACK);
      
      Serial.begin(9600); // 시리얼 통신 시작 (통신 속도: 9600 bps)
    }
    
    void loop()
    {
      if (IrReceiver.decode()) // 적외선 송신기로부터 수신 받은 신호가 있으면 실행
      {
        // 수신 받은 신호의 명령값에 따라 프로그램 실행 
        switch(IrReceiver.decodedIRData.command)
        {
          case 0x0: // 수신 받은 신호의 명령(command)가 16진법으로 0일 경우 실행
            // 시리얼 모니터에 문자열을 출력한 뒤 줄 바꿈
            Serial.println("Power button is pressed"); 
            break;
          
          case 0x1:
            Serial.println("VOL+ button is pressed");
            break;
          
          case 0x2:
            Serial.println("STOP button is pressed");
            break;
          
          case 0x4:
            Serial.println("Rewind button is pressed");
            break;
          
          case 0x5:
            Serial.println("Play button is pressed");
            break;
          
          case 0x6:
            Serial.println("Fast forward button is pressed");
            break;
          
          case 0x8:
            Serial.println("Upward button is pressed");
            break;
          
          case 0x9:
            Serial.println("VOL- button is pressed");
            break;
          
          case 0xA:
            Serial.println("Downward button is pressed");
            break;
          
          case 0xC:
            Serial.println("0 button is pressed");
            break;
          
          case 0xD:
            Serial.println("EQ button is pressed");
            break;
          
          case 0xE:
             Serial.println("REPT button is pressed");
            break;
          
          case 0x10:
            Serial.println("1 button is pressed");
            break;
          
          case 0x11:
            Serial.println("2 button is pressed");
            break;
          
          case 0x12:
            Serial.println("3 button is pressed");
            break;
                      
          case 0x14:
            Serial.println("4 button is pressed");
            break;
          
          case 0x15:
            Serial.println("5 button is pressed");
            break;
          
          case 0x16:
            Serial.println("6 button is pressed");
            break;
          
          case 0x18:
            Serial.println("7 button is pressed");
            break;
          
          case 0x19:
            Serial.println("8 button is pressed");
            break;
          
          case 0x1A:
            Serial.println("9 button is pressed");
            break;      
        }    
        IrReceiver.resume(); // 적외선 송신기로부터 다음 신호를 받을 수 있도록 대기
      }
    }

     

     

     

     

     

    [함께 읽으면 좋은 페이지]

     

     

    아두이노 프로젝트 | 적외선 무선 원격 통신을 이용한 무선 RC카

    1. 적외선 무선 원격 통신을 이용한 무선 RC카 일상에서 쉽게 발견할 수 있는 무선 RC카를 아두이노 플랫폼으로 구현해보자. 구현하고자 하는 무선 RC카는 DC모터에 기어박스가 추가된 하비 기어

    vedacube.tistory.com

     

     

     

     

     

    참고문헌

    - 이승준. (2021). [적외선 통신] IR 송수신 소자, IR 송수신 회로. TUWLAB. https://www.tuwlab.com/ece/27106. 2023.10.31.

    - 최훈. (2022). 팅커캐드 & 아두이노. 길벗캠퍼스.

    - Arduino-IRremote. (2023). Arduino-IRremote. GitHub. https://github.com/Arduino-IRremote/Arduino-IRremote. 2023.10.29.

    - ElectronicWings.  (n.d.). IR Communication Sensor Guide with Arduino Interfacing. https://www.electronicwings.com/sensors-modules/ir-communication. 2023.10.30.

    - ElectronicWings. (n.d.). IR Communication using Arduino UNO. https://www.electronicwings.com/arduino/ir-communication-using-arduino-uno. 2023.10.30.

    - Lucy 2023. (2020). 아두이노 강좌 #35 적외선 IR(Infrared) 송신 수신 부품 CL-1L5 603LM. Lucy Archive. https://juahnpop.tistory.com/136. 2023.10.30.

    반응형

    댓글

Designed by Tistory.