본 절은 [적외선 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 리모컨 모듈을 사용하면 아두이노 프로젝트에서 다양한 기기를 무선으로 제어할 수 있습니다. 이 글에서는 적외선 리모컨 모듈의 기본적인 사용법과 동작 원리를 설명했습니다. 이를 통해 여러분의 프로젝트에 더욱 편리한 무선 제어 기능을 추가할 수 있기를 바랍니다. 추가적으로, 다양한 센서나 액추에이터와 연동하여 더욱 복잡한 제어 시스템을 구성할 수도 있습니다. 이 모듈을 통해 창의적인 프로젝트를 많이 시도해보세요!
'모두의 아두이노' 카테고리의 다른 글
[아두이노] Arduino Nano 33 BLE Sense 에서 센서 사용하기 (0) | 2021.12.12 |
---|---|
[아두이노] Arduino NANO 33 BLE Sense 사용 하기 (0) | 2021.12.12 |
[아두이노] C1815 트렌지스터로 LED 켜기 (0) | 2021.12.06 |
[아두이노 LED] TIP120으로 24V LED PWM 제어하기 (0) | 2021.12.05 |
[아두이노] HC-06 블루투스 사용하기 (0) | 2021.12.02 |
댓글