Home [IR light] 전등 리모컨 제작기 - 2
Post
Cancel

[IR light] 전등 리모컨 제작기 - 2

관련 포스팅


2. IR 송신 모듈 제작

2.1 IR 송신 회로

IR_sender_circuit_diagram IR sender circuit diagram

IR_sender_schematic IR sender circuit schematic

IR_receiver_circuit IR sender circuit

아두이노 DC 핀의 출력 전류는 최대 40mA 정도로 알려져 있습니다. 그러나 이 전류는 IR led에서 전등까지 적외선 신호를 보내기에 부족합니다. 따라서 전류를 증폭하는 회로를 NPN 트랜지스터를 사용하여 제작해 주었습니다. 제가 사용한 NPN 트랜지스터는 BC547로, 회로도 그림 기준 왼쪽부터 collector, base, emittor입니다. 다른 NPN 트랜지스터를 사용할 시 이에 맞추어 적용하면 될 것 같습니다.

회로도 연결 결과 가변저항에 약 2.5V의 전압 강하가 발생하는걸 확인하였습니다. IR led가 작동하는 선에서 최대 전류가 흐르도록 가변저항을 조절한 결과, 가변저항을 30옴으로 맞추었습니다. 즉, 이 회로에서는 IR led에 2.5V/30Ω = 83.3mA의 전류가 인가됩니다.

IR_led_check How to check IR led

IR led는 켜졌는지 육안으로 확인할 수 없습니다. 그러나 카메라를 통하여 관찰하면 IR 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <IRremote.h>
IRsend irsend;

void setup() {
    irsend.begin(3);
    Serial.begin(9600);
}

void loop() {
    if (Serial.available()) {
        char buf = Serial.read();
        switch(buf) {
            case '1':
            irsend.sendNEC2(0xDEA8, 0xFF, 3); //on
            break;

            case '0':
            irsend.sendNEC2(0xDEA8, 0x1, 3); //off
            break;

            case 'd':
            irsend.sendNEC2(0xDEA8, 0x6, 1); //sleep
            break;

            case 'b':
            irsend.sendNEC2(0xDEA8, 0xA, 1); //20/50/100
            break;

            case 'v':
            irsend.sendNEC2(0xDEA8, 0x1A, 1); //1min
            break;

            case 's':
            irsend.sendNEC2(0xDEA8, 0x16, 1); //10min
            break;

            case 'm':
            irsend.sendNEC2(0xDEA8, 0x14, 1); //20min
            break;

            case 'l':
            irsend.sendNEC2(0xDEA8, 0x8, 1); //30min
            break;
        }
    }
}

시리얼 통신을 통해 문자를 입력하면 그에 대응되는 command가 IR 신호로 송신되는 코드입니다.

IR 수신 코드와 마찬가지로 IRremote.h 라이브러리를 사용하여 IR 송신 코드를 작성하였습니다. 앞서 포스팅에서 sendNEC() 함수를 사용하여 송신할 수 있음을 파악하였습니다. 대부분의 기능에서 잘 작동하지만, 전등 전원을 켜거나 끌 때 가끔씩 입력이 씹히는 경우가 있었습니다. SendNEC() 함수의 NumberOfRepeats parameter를 조절하여 여러 번 송신하면 될거라 생각했지만, repeat protocol에 해당하는 신호가 송신되기 때문에 해결되지 못하였습니다.

해결 방법은 sendNEC2() 함수를 사용하는 것입니다. 이 함수는 NumberOfRepeats가 2 이상이어도 repeat protocol 신호를 보내는 것이 아니라, 원래 신호를 반복하여 송신합니다. 그렇기 때문에 첫 신호가 무시되었다 하더라도 다음 신호를 인식하여 전등이 작동되게 됩니다. sendNEC2() 함수가 포함되어있는 ir_NEC.hpp의 주석에 다음과 같이 적혀 있습니다.

NEC2 Send frame and repeat the frame for each requested repeat


2.3 만능기판 회로도 설계 및 납땜

IR_sender_board_back IR sender back side board

IR_sender_board_front IR sender front side board

IR_sender_board_back IR sender back side board

다음과 같이 만능기판 회로도를 설계하고 납땜하였습니다. 아두이노 나노는 핀헤더를 납땜한 다음 그 위에 장착하였습니다. IR led는 몰렉스 커넥터를 사용하여 탈착이 가능하도록 연결하였습니다.


2.4 하드웨어 제작

IR_sender_reflector IR sender reflector

  • IR 송신 세기를 향상시키기 위해 반사판을 달아주었습니다. 사진과 같이 탁구공을 반 자른 다음 알루미늄 호일로 감싸 IR 신호가 잘 반사되게 만들었습니다.

IR_sender IR sender module

  • IR led의 각도를 조절할 수 있도록 볼 조인트 장치를 추가하였습니다.
  • 기존에 있는 USB 통신 케이블의 길이를 줄이고 만능기판에 부착하였습니다.

이렇게 최종적으로 완성된 IR 송신 모듈은 상단에 위치한 컴퓨터 USB 포트에 꽂아 사용할 수 있습니다. IR led 각도를 전등을 향하도록 볼 조인트를 조절하여 전등이 IR 신호를 잘 수신할 수 있도록 할 수 있습니다.

This post is licensed under CC BY 4.0 by the author.