아두이노 강좌 #37 IR 적외선 통신 송신 코드 작성 IRremote 라이브러리 사용
Lucy Archive
Lucy 2023
2020. 9. 10. 02:25

Arduino Uno IR TransmitterArduino Uno IR Transmitter

Arduino Uno : IR Transmitter

지난 포스트에서 IRremote 라이브러리를 사용하여 IR(Infrared) 적외선 통신 수신 방법에 대해 소개하였습니다. 이번 포스트에서는

IRremote 라이브러리에서 송신 관련 지원 코드를 알아보고, 아두이노 우노에서 IR 통신 송신 예제를 소개

합니다. IR 통신 프로토콜, 송수신 모듈, IRremote 라이브러리 설치 방법은 하단의 관련 포스트를 참고해주세요.

IRremote 라이브러리 송신 관련 코드

이 포스트에서는 IR 송신 관련된 코드만 알아보도록 하겠습니다. IRremote 클래스의 송신 관련 메서드는 아래와 같습니다. 

  • IRsend irsend : IRsend 클래스 객체 irsend 생성
  • irsend.sendNEC(unsigned long data, int nbits) : nbits 수의 data 를 NEC 프로토콜로 IR 송신

※ NEC 이외의 프로토콜을 사용하는 경우 아래 IR 송신 함수를 참조해주세요.

  • void sendRC5(unsigned long data, int nbits;
  • void sendRC6(unsigned long data, int nbits);
  • void sendNEC(unsigned long data, int nbits);
  • void sendSony(unsigned long data, int nbits);
  • void sendPanasonic(unsigned int address, unsigned long data);
  • void sendSAMSUNG(unsigned long data, int nbits);
  • void sendWhynter(unsigned long data, int nbits);
  • void sendAiwaRCT501(int code);
  • void sendLG(unsigned long data, int nbits);
  • void sendDISH(unsigned long data, int nbits);
  • void sendSharpRaw(unsigned long data, int nbits);
  • void sendSharp(unsigned int address, unsigned int command);
  • void sendDenon(unsigned long data, int nbits);
  • void sendPronto(char* code, bool repeat, bool fallback);
  • void sendLegoPowerFunctions(uint16_t data, bool repeat = true);

아두이노로 IR 데이터 송신

Arduino Uno IR 송신 회로 구성

IR 적외선 발광 소자로 CL-1L5 와 Transistor S9014 를 사용하여 아래와 같이 회로를 구성하였습니다. 트랜지스터 S9014 를 사용한 이유는 가지고 있는 NPN Transistor 가 S9014 가 유일해서 입니다. 다른 NPN Transistor 사용하셔도 무방합니다. 

아래 회로는 대략 30~40mA 가 IRED 에 흐를 것으로 예상됩니다. 출력 거리를 높이고 싶으신 분은 R2의 저항을 100Ω 보다 낮게 선정하시면 됩니다. 더 낮은 R2 저항을 연결하고자 하는 경우, Ic 가 150mA 이상인 TR을 선정 후에, R2는 50Ω 이상으로 권장 드립니다. 

📌 트랜지스터 없이 디지털 핀에 직접 저항과 IRED 를 직렬로 연결해도 되지만, 적외선 통신 가능 거리가 약 10cm 정도라 테스트가 쉽지 않습니다.


IR 송신 테스트 코드

IR 송신 코드는 수신 코드에 비해 간단하게 작성이 가능합니다. 아래 코드에서 볼륨업, 볼륨다운 데이터는 지난 포스트의 IR 수신 방법으로 제 모니터 리모컨의 볼륨 업/다운 데이터를 취득하였습니다. 적외선(Irfrared) 는 눈에 보이지 않아, 모니터링을 하기 위해 시리얼 통신을 사용하였습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <IRremote.h>
 
#define VOLUMEUP 0x40BF30CF // 모니터 볼륨 업
#define VOLUMEDOWN 0x40BF728D // 모니터 볼륨 다운
 
IRsend irsend;
 
void setup() {
    Serial.begin(115200);
}
 
void loop() {
    irsend.sendNEC(VOLUMEUP, 32);
    Serial.println("Volume UP");
    delay(3000);
    irsend.sendNEC(VOLUMEDOWN, 32);
    Serial.println("Volume DOWN");
    delay(3000);
}
cs

실행 결과

위의 코드를 실행시 모니터의 볼륨이 3초 간격으로 Up, Down 을 반복 하는 것을 확인 할 수 있습니다. 모니터의 OSD 버튼을 함께 촬영해야 해서 모니터 화면을 그대로 촬영하였습니다.


마무리

이번 포스트에서 아두이노에서 제공하는 IRremote 라이브러리를 사용하여 IR 적외선(Irfrared) 통신 송신 코드 작성 예시를 소개하였습니다. 이전 IR 관련 포스트는 하단의 관련 포스트를 참고해주세요. 이제 집안의 모든 적외선으로 제어되는 기기는 아두이노로 제어 가능 합니다. 

끝까지 읽어 주셔서 감사합니다.😊

관련포스트

👉 아두이노 적외선 송수신 관련글 목록 보기

👉 아두이노 센서 관련글 목록 보기

👉 아두이노 관련글 전체 목록 보기