아두이노:IR 송수신: 두 판 사이의 차이
보이기
새 문서: {{아두이노}} == 개요 == 적외선 리모컨 신호를 받아들이고 반대로 적외선 신호를 내보내는 과정에 대하여. == 하드웨어 == === IR 수신기 === {| class="wikitable" !종류 !설명 !비고 |- |VS1838B |중심주파수: 38 kHz (표준 TV/가전 리모컨 대부분) | |- |KY-022 |VS1838B에 기판 단 것. 기판에 축전기랑 저항 달려있어서 노이즈를 줄인다. | |- |TSOP38238 |수신거리가 12m정도로 위보다 조금 짧... |
|||
| 14번째 줄: | 14번째 줄: | ||
|VS1838B | |VS1838B | ||
|중심주파수: 38 kHz (표준 TV/가전 리모컨 대부분) | |중심주파수: 38 kHz (표준 TV/가전 리모컨 대부분) | ||
| | |https://arduinointro.com/images/ir_remote/ir_remote_pinout.jpg | ||
|- | |- | ||
|KY-022 | |KY-022 | ||
|VS1838B에 기판 단 것. | |VS1838B에 기판 단 것.(머리부분에 1838이라 각인되어 있다) | ||
기판에 축전기랑 저항 달려있어서 노이즈를 줄인다. | 기판에 축전기랑 저항 달려있어서 노이즈를 줄인다. | ||
| | | | ||
* S라 쓰인 단자가 신호 | |||
* -라 쓰인 곳이 GND | |||
* 가운데가 전원입력 | |||
|- | |- | ||
|TSOP38238 | |TSOP38238 | ||
| 74번째 줄: | 77번째 줄: | ||
=== 수신 관련 코드 === | === 수신 관련 코드 === | ||
IRremote 라이브러리를 요한다. 라이브러리 매니저에서 받는 게 가장 편함.<syntaxhighlight lang="c++"> | IRremote 라이브러리를 요한다. 라이브러리 매니저에서 받는 게 가장 편함.<syntaxhighlight lang="c++">#include <IRremote.h> | ||
#include <IRremote.h> | |||
int RECV_PIN = 11; | int RECV_PIN = 11; | ||
void setup() { | void setup() { | ||
Serial.begin(9600); | Serial.begin(9600); | ||
IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK); // 수신기 시작 | |||
} | } | ||
void loop() { | void loop() { | ||
if ( | if (IrReceiver.decode()) { | ||
Serial.print("받은 값: 0x"); | Serial.print("받은 값: 0x"); | ||
Serial.println( | Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); | ||
IrReceiver.resume(); // 다음 신호 수신 준비 | |||
} | } | ||
} | }</syntaxhighlight> | ||
</syntaxhighlight> | |||
=== 송신 관련 코드 === | === 송신 관련 코드 === | ||
2025년 8월 27일 (수) 04:53 판
아두이노 관련 정보를 모으기 위한 틀. 틀:아두이노
- 아두이노:개요
- 아두이노:하드웨어
- 아두이노:코드
- 아두이노:핀 사용
- 아두이노:시리얼 통신
- 아두이노:편의함수
- 센서 사용
- 아두이노:LCD 사용
- 아두이노:스위치 사용
- 아두이노:릴레이
- 통신 관련, 정보 교환
- 아두이노:해결되지 않은 다양한 의문들
- 수업용 간단 실습
- 아두이노 모터 출력
- 미완문서
- 분류:아두이노 프로젝트
개요
적외선 리모컨 신호를 받아들이고 반대로 적외선 신호를 내보내는 과정에 대하여.
하드웨어
IR 수신기
| 종류 | 설명 | 비고 |
|---|---|---|
| VS1838B | 중심주파수: 38 kHz (표준 TV/가전 리모컨 대부분) |
|
| KY-022 | VS1838B에 기판 단 것.(머리부분에 1838이라 각인되어 있다)
기판에 축전기랑 저항 달려있어서 노이즈를 줄인다. |
|
| TSOP38238 | 수신거리가 12m정도로 위보다 조금 짧지만, 노이즈에 강함. |
IR 송신기
리모컨 앞에 달린 둥그런 그것.
| 종류 | 설명 | 비고 |
|---|---|---|
| 적외선 LED | ||
| KY-005 | 적외선 LED만 있어도 되지만, 편의사항 증진.
하지만, 신호가 별로 멀리 나가진 않는다; |
활동 예시
준비물
- 수신기 작동 확인용 리모컨
코드
수신 관련 코드
IRremote 라이브러리를 요한다. 라이브러리 매니저에서 받는 게 가장 편함.
#include <IRremote.h>
int RECV_PIN = 11;
void setup() {
Serial.begin(9600);
IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK); // 수신기 시작
}
void loop() {
if (IrReceiver.decode()) {
Serial.print("받은 값: 0x");
Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
IrReceiver.resume(); // 다음 신호 수신 준비
}
}
송신 관련 코드
수신과 마찬가지로 IRremote 라이브러리를 요한다. 라이브러리 매니저에서 받는 게 가장 편함.
#include <IRremote.h>
// 송신 핀 (기본은 D3)
#define IR_SEND_PIN 3
void setup() {
Serial.begin(9600);
IrSender.begin(IR_SEND_PIN, ENABLE_LED_FEEDBACK); // 송신 시작
Serial.println("IR 송신기 준비 완료");
}
void loop() {
// 예: NEC 프로토콜 (TV 리모컨 많이 씀)
// 버튼 코드 예시: 0xFFA25D (리모컨에서 "전원" 버튼 같은 값)
Serial.println("IR 코드 송신 중...");
IrSender.sendNEC(0xFFA25D, 32); // (코드값, 비트수)
delay(5000); // 5초마다 전송
}
송수신 합친 코드
#include <IRremote.h>
#define RECV_PIN 2 // 수신기 핀
#define SEND_PIN 3 // 송신기 핀
IRrecv irrecv(RECV_PIN);
IRsend irsend(SEND_PIN);
decode_results results;
unsigned long learnedCode = 0; // 학습된 코드 저장
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // 수신 시작
Serial.println("리모컨 버튼을 눌러 학습하세요...");
}
void loop() {
// ===== 1. 리모컨 수신 =====
if (irrecv.decode(&results)) {
learnedCode = results.value; // 학습
Serial.print("학습된 코드: 0x");
Serial.println(learnedCode, HEX);
irrecv.resume(); // 다음 신호 수신 준비
}
// ===== 2. 시리얼 입력 확인 =====
if (Serial.available() > 0) {
String input = Serial.readStringUntil('\n');
input.trim();
if (input == "send") {
if (learnedCode != 0) {
Serial.print("코드 송신 중: 0x");
Serial.println(learnedCode, HEX);
irsend.sendNEC(learnedCode, 32); // NEC 방식, 32비트
} else {
Serial.println("아직 학습된 코드가 없습니다!");
}
}
}
}