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 제어해 보기)
사용된 예제소스
사용된 라이브러리
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색 신호등 모듈 제어해 보기
'Arduino(아두이노) 키트 강좌' 카테고리의 다른 글
Step.30-Arduino Uno 로 ENC28J60 이더넷 모듈을 사용해 웹으로 LED 제어해 보기 (0) | 2018.12.13 |
---|---|
Step.29-Arduino Uno 와 XBee USB Adapter 2개를 사용해서 무선 XBee 통신으로 LED 밝기 제어해 보기 (0) | 2018.01.19 |
Step.28-Arduino Uno 로 ENC28J60 이더넷 모듈을 사용해 이더넷 접속 웹브라우저로 확인해 보기 (0) | 2016.06.11 |
Step.27-Arduino Uno 로 ESP8266 Wifi 모듈을 사용해 AT커맨드 통신하기 (0) | 2016.06.11 |
Step.26-XBee USB Adapter 를 사용해서 XBee 모듈간 통신 테스트 하기 (1) | 2016.05.27 |
댓글