재료

  • 아두이노 우노 1개
  • 아두이노 우노 1개
  • 아두이노 우노 1개

 적외선을 이용하면 적은 비용으로 장치를 원격으로 제어할 수 있습니다. 그렇기 때문에 일상 생활에서는 TV, 에어컨, DVD 등의 가전 제품들을 적외선을 사용하여 제어하고 있습니다. 이번 프로젝트에서는 통신의 마지막으로 적외선을 다뤄보도록 하겠습니다.

 적외선을 송신하는 것과 수신하는 것에 대한 프로젝트를 진행하면서 우리가 일상 생활에서 사용하고 있는 리모컨의 원리를 배워봅시다. 우선 기본 프로젝트로 리모컨이 보내는 적외선을 제대로 수신하는 지 확인하고 응용 프로젝트를 통해서 적외선을 송신한 후 그 적외선을 수신하게 하여 LED의 불을 조작해봅시다.




STEP1. 준비물

아두이노 보드, 브래드 보드, 적외선 센서(VS1838B), 리모컨, 점프 와이어 3개



STEP2. 회로도



STEP3. 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <IRremote.h>
 
const int input=2;
IRrecv irrecv(input);
decode_results signals; //수신 데이터 저장 구조체
 
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  irrecv.enableIRIn();
}
 
void loop() {
  // put your main code here, to run repeatedly:
  if(irrecv.decode(&signals)){
    Serial.println(signals.value, HEX);
    Serial.println(signals.bits, DEC);
    irrecv.resume();
  }
}


 코드를 업로드하실 때 TKD2에 대한 에러가 발생하시게 된다면, C:\Program Files (x86)\Arduino\libraries 로 가서 RobotIRremote 폴더를 바깥으로 빼주시면 됩니다. 동일한 헤더 내용이 존재해서 헤더 충돌로 발생하는 문제라고 생각되며, 이렇게하면 에러를 제거하실 수 있습니다.


STEP4. 결과 확인


리모컨의 버튼을 누르면 위와 같이 출력되는 것을 확인할 수 있습니다. 이것을 통해서 적외선 센서가 리모콘의 적외선을 제대로 수신하고 있다는 것을 확인할 수 있습니다. 이제는 IR LED를 이용해서 적외선을 송신하고 그 적외선을 이용하여 LED의 불을 조작하여 봅시다.


STEP5. 응용

먼저 LED와 적외선 송신을 위한 IR LED, 저항 2개와 점프와이어를 준비해주세요.

그런 후에 아래와 같이 회로를 구성합니다.


너무 큰 저항을 사용하시면 IR LED가 너무 약해서 인식이 잘 안될거에요. 또 저항을 사용하지 않으시거나 너무 작은 저항을 사용하시면 IR LED가 타버릴 수 있으니 50옴에서 220옴정도의 사용이 좋은 것 같습니다. 아래의 코드를 업로드하면,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const int LED = 13;
const int input = A0;
int val = 0;
 
void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}
 
void loop() {
  // put your main code here, to run repeatedly:
  int read = analogRead(input);
  Serial.println(read);
  delay(100);
 
  if (read > 999)
    digitalWrite(LED, HIGH);
  else
    digitalWrite(LED, LOW);
}


적외선의 인식에 따라 LED가 조절되는 회로가 완성됩니다.



STEP6. 리모컨 만들기

 이제는 이번 프로젝트의 최종 목적인 리모컨을 만들어보도록 하겠습니다. 이번에는 아두이노 2개를 이용해서 하게되는데, 한쪽 시리얼 모니터에서 1을 입력하면 그에 맞는 신호가 다른 아두이노로 전송이되어서 그에 맞는 행동을 하도록 지시할 거예요. 여기서는 1을 입력하면 LED가 켜지고 2를 입력하면 LED가 꺼지도록 회로를 설계하겠습니다.

 먼저 아래와 같이 준비물을 준비해주세요.

저항도 추가로 2개정도 준비해주시는 것이 좋습니다.

편의를 위해서 브래드 보드를 저는 2개를 사용할게요.

회로를 다음과 같이 구성해주시고,




그런 후에 각각의 아두이노에 코드를 업로드해주시면 됩니다.

- 송신용 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<IRremote.h>
 
IRsend irsend;
 
int val = 0;
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
 
  if ( Serial.available() > 0) {
    val = Serial.read();
    if (val == '1') {
      irsend.sendSony(0xa, 12);
      delay(500);
      Serial.println("send 0xa");
    } else if (val == '2') {
      irsend.sendSony(0xb, 12);
      Serial.println("send 0xb");
    }
  }
}


- 수신용 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <IRremote.h>
 
int RECV_PIN = 11;
int LED = 5;
IRrecv irrecv(RECV_PIN);
 
decode_results results;
 
void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn();
}
 
void loop() {
 
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    if (results.value == 0xa) {
      digitalWrite(LED, HIGH);
      Serial.println("Hello");
    } else if (results.value == 0xb) {
      digitalWrite(LED, LOW);
      Serial.println("Bye");
    }
    irrecv.resume();
  }
 
}


아래와 같은 결과를 확인하실 수 있습니다.

1을 누르면 다음과 같은 시리얼 모니터 출력이 이루어지고,




2를 누르면 다음과 같은 시리얼 모니터 출력이 이루어집니다.




1을 누르면 LED가 켜지고, 2를 누르면 LED가 꺼지니 마치 리모컨 같죠?



댓글 3

MADE BY

김민정

사물인터넷, 아두이노