4-4 적외선 리모컨 송수신

공부하는 학생 A·2024년 2월 5일
0

아두이노 

목록 보기
21/74

적외선 리모컨

적외선 리모컨은 일상생활에서 자주 사용하고 있는 전자제품이다. TV를 켜고 끄거나 채널을 바꿀 때 사용하는 리모컨도 적외선 리모컨이고 가정에서 사용하는 에어컨이나 다른 전자 기기를 제어할 때도 적외선 리모컨을 사용하고 있다. 적외선 리모컨은 전자기파를 이용하며 제품마다 고유의 값으로 통신하고 있어 중복되지 않게 사용할 수 있다. 적외선은 사람 눈에 보이지 않으나 적외선을 발생할 때 LED를 켜서 눈으로 보이는 것 처럼 만들수 있다.

적외선 통신의 특징은 근거리 통신용이며 주파수는 38KHz를 사용한다는 것이다. 적외선 리모컨은 적외선 신호를 만들어 내는 발광 다이오드와 적외선 신호를 받아들이는 수광 다이오드가 한 쌍으로 작동한다.

라이브러리 설치

[스케치] - [라이브러리 포함] - [라이브러리 관리]
'irremote' 을 검색 'IRremote by shirriff' 라이브러리 설치

[파일] - [예제] - [IRremote] - [IRrecvDemo]

회로 만들기

스케치 4-4 리모트 컨트롤 테스트 예제

/*
 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Enabling IRin");
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("Enabled IRin");
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

스케치 4-4 설명

#include <IRremote.h>

  • 해더파일 <IRremote.h>를 포함시킨다.

int RECV_PIN = 11;

  • IR 리시버의 핀 번호를 설정한다.

IRrecv irrecv(RECV_PIN);

  • 적외선 수신기 클래스를 선언한다.
  • IRrecv : 적외선 수신기 클래스이다.
  • RECV_PIN : 적외선 수신기 핀 번호(아두이노와 연결된 핀)이다.

decode_results results;

  • 수신기에서 받은 리모컨의 데이터를 저장하는 클래스이다.

irrecv.decode(&results)

  • 수신기에서 받은 데이터를 주소 값으로 저장한다.

Serial.println(results.value, HEX);

  • 적외선 수신기가 받은 결과 값을 16진수(HEX)로 표시한다.

4-4 실행결과


스케치 4-5 적외선 리모컨으로 LED 제어하기

/*
 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Enabling IRin");
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("Enabled IRin");
  pinMode(5,OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
    if(results.value == 0xFF30CF) digitalWrite(5,HIGH);
    if(results.value == 0xFF18E7) digitalWrite(5,LOW);
  }
}

스케치 4-5 설명

pinMode(5,OUTPUT);

  • 핀모드를 출력으로 설정한다.

if(results.value == 0xFF30CF)

  • 수신부에서 받은 값이 16진수 FF30CF인 것이 참이면, 즉 리모턴 1번을 누르면 LED가 켜지게 만든다.

4-5 실행결과

1번을 눌렀을 때

2번을 눌렀을 때

profile
Shine like a star, Just like a star

0개의 댓글