February 22, 2018

디바이스마트 미디어:

[23호]적외선 조명 제어기를 만들어보자!

이불 속에서 불을 끄고 켜자!

적외선 조명 제어기를 만들어보자!

필자는 예전부터 항상 리모컨으로 TV를 끄고 켜는데 왜 전등은 리모컨으로 끌 수 없을까? 라는 생각을 갖고 있었다.
어떤 아파트는 리모컨으로 끄고 켤 수 있던데 그런 리모컨 기능이 있는 전등은 왜 항상 부모님 방에만 설치된 것일까?
내 방에도 리모컨 전등을 달아보자 라는 생각에 제작하게 되었다.

이 프로젝트는 220V를 절연되지 않은 상태에서 직접 사용하므로 감전에 주의하고,
프로그램을 구울 때 PC와 절대로 접속하지 않도록 하며,
신체 일부가 회로물에 닿지 않도록 주의하도록 한다. 인적 물적 사고에 대한 책임은 디바이스마트와 필자에게 없다.

원격조명제어 부품리스트와 사진

OLYMPUS DIGITAL CAMERA

참조 종류순 품명(검색어) 설명 필요수량
1 U1 ATTINY13A-PU 주 제어부 1
2 U2 MOC3043 절연 신호 전달 1
3 U3 603LM 리모컨 수신부 2
4 Q BTA08-600BRG AC 스위치 1
5 C MF 1uF/250VAC,20 입력 전류 제한 1
6 C E/C 16V 470uF (85℃)-10EA 리플방지 1
7 C HV(B) Ceramic 0.01uF, 1kV 스버너 1
8 R WCR 100Ω 5W 입력 전류 제한 1
9 R 1/4W 5% Axial Resistor 106J (10MΩ) 방전 저항 1
10 R 1/4W 5% Axial Resistor 391J (390Ω) 트라이악 게이트 2
11 R 1/4W 5% Axial Resistor 391J (390Ω) 트라이악 게이트 1
12 R 1/4W 5% Axial Resistor 391J (390Ω) LED전류제한 1
13 R 1/4W 5% Axial Resistor 390J (39Ω) 스너버 1
14 D DB105 정류 1
15 D 1N4733A (10개)-5.1V 전압제한 1
16 D 원통평면형-5파이 투명 LED(녹색) 상태표시 LED 1
17 D 원통평면형-5파이 투명 LED(노랑) 상태표시 LED 1
18 J BR-762C (2핀) 입출력 터미널 2
19 SW KLT-1105B 리모컨 학습 스위치 1
20 RIC-DIP-8핀 IC 소켓 8핀 1
21 BA4-50×120-단면 기판 1
22 PCB서포트 플라스틱-L자형(10개) 기판 서포터 타입1 4
23 트위스트락서포트-12NB(10개) 전선 고정용 서포터 1
24 DH15A(방열판) 트라이악 방열용 1
25 부싱(3파이) 트라이악 절연용 1
26 퓨즈홀더 F-520 제품보호 2
27 퓨즈 5×20-0.5A 제품보호 2
28 5267-03 (색상옵션) 리모컨 연장선 2
29 5264-03 (색상옵션) 리모컨 연장선 2
30 5264용 클림프전선 리모컨 연장선 2
31 5264용 클림프전선 리모컨 연장선 2
32 5264용 클림프전선 리모컨 연장선 2
33 절연전선HIV(IEC90℃)-검정1M + 미니수축튜브(사은품) 제품 연결용 2

 

제작방법

OLYMPUS DIGITAL CAMERA

01. 터미널블록삽입
터미널 블록을 삽입한다. AC를 직접 받아 AC를 출력하는데 작은 커넥터를 사용하긴 어려울 것이다. 특히 기존 등기구의 전선을 연결해야 하는데 전선 굵기가 굵기 때문에 터미널블록을 사용하였다.

OLYMPUS DIGITAL CAMERA

02. 시멘트저항삽입
시멘트 저항을 삽입한다. 5W의 시멘트저항을 사용하였으며 마일러콘덴서에 빠르게 충전되면서 과전류가 흐르는 것을 방지한다.

OLYMPUS DIGITAL CAMERA

03. 마일러콘덴서삽입
마일러콘덴서를 삽입한다. 이 콘덴서는 내압이 AC기준 250V, DC기준 500V이상의 제품을 구매해야 한다. 콘덴서 용량만큼의 작은 전류만 통과시켜 220V를 직접 받아도 초간단 정전류 회로가 구성되어 부하에 따라 낮은 전압을 만들어 낸다.

OLYMPUS DIGITAL CAMERA

04. 납땜후커팅
납땜한 후에는 다리를 잘라낸다. 다리는 접지 말고 세워놓도록 하는데 접어서 납땜할 경우 수리를 위해 부품을 교체하기가 어렵기 때문이다. 커팅 후에는 회로도대로 단자 간 연결을 하는데 220V부분은 굵게 처리한다.

OLYMPUS DIGITAL CAMERA

05. 퓨즈홀더삽입
이번 프로젝트는 220V를 직접 사용하기 때문에 위험할 수 있으므로 퓨즈를 장착한다. 교체형 퓨즈를 장착하기 위해 퓨즈홀더를 부착하였다.

OLYMPUS DIGITAL CAMERA

06. 브릿지다이오드삽입
브릿지 다이오드를 삽입한다. 조명은 AC를 사용하고 이번 프로젝트는 AC를 입력받지만 적외선 수광부나 IC같은 부품들은 DC를 사용해야 하므로 AC를 DC로 변환해주는 브릿지 다이오드를 사용한다. 브릿지 다이오드는 4개의 정류다이오드로 구성되며 출력 측에 콘덴서와 함께 DC로 만들어 주는 역할을 한다.

OLYMPUS DIGITAL CAMERA

07. 저항 및 다이오드 다리접기
1/4W급의 저항들과 다이오드는 다리가 수평으로 펴져있으므로 기판에 끼울 수 있도록 미리 다리를 구부려 놓는다.

OLYMPUS DIGITAL CAMERA

08. 저항 및 다이오드 삽입
저항과 다이오드를 삽입한다. 저항 일부는 AC콘덴서에 충전된 에너지를 방전하는 역할과 나머지는 대부분 연결된 소자를 보호하기 위한 전류제한기능을 가지고 있다. 다이오드는 5.1V의 전위를 갖는 제너다이오드인데, 부하사용이 적으면 부하도 결국 입력 전압까지 찾아가는데 이렇게 되면 소자들이 파괴될 것이다. 5.1V가 넘으면 스스로 전류를 흘려보내 방전하여 항상 5V가 유지되도록 해준다.

OLYMPUS DIGITAL CAMERA

09. IC 소켓 삽입
주 제어 MCU는 ATtiny13A-PU를 사용한다. 직접 납땜할 경우 교체가 어려우므로 IC소켓을 사용하였다.

OLYMPUS DIGITAL CAMERA

10. 세라믹 콘덴서 삽입
IC소켓 주변으로 세라믹 콘덴서를 삽입한다. 리모컨 수신 때 또는 여러 가지 이유로 발생하는 리플을 제거하는 역할을 한다.

OLYMPUS DIGITAL CAMERA

11. 전해콘덴서 삽입
전해콘덴서는 브릿지 다이오드와 함께 AC를 거의 완벽한 DC로 만들어주는 역할을 한다.

OLYMPUS DIGITAL CAMERA

12. LED 삽입
제품의 상태나 설정 상태를 보여주는 LED를 삽입한다. LED는 두 개가 서로 다른 극성이 되도록 병렬로 연결하므로 서로 다른 방향으로 삽입하도록 한다.

OLYMPUS DIGITAL CAMERA

13. 트라이악을 방열판에 부착
트라이악을 방열판에 부착한다. 단순 등기구만 사용한다면 방열판은 필요 없지만 1A이상의 전류가 흐르는 경우 방열판이 필요할 수 있다. 나사를 끼울 때 부싱을 함께 사용하면 끝을 모르고 나사를 조이다 나사 선이 나가는 것을 방지할 수 있다. 방열판 크기가 크지 않으므로 부하는 연속 250W이상 흐르지 않도록 한다.

OLYMPUS DIGITAL CAMERA

14. 포토커플러 삽입
AC라인과 MCU포트간 절연을 위해 포토커플러를 사용하였다.
위상이 바뀌는 제로 크로스 시점에 ON이 되는 기능이 있는 포토커플러이므로 전등이 켜질 때 전기적으로 더욱 안정될 수 있다.

OLYMPUS DIGITAL CAMERA

15. 몰렉스 삽입
적외선 수신부를 연결할 수 있도록 몰렉스를 사용하였다. 조명에 가려 리모컨이 인식이 안 될 수 있으므로 리모컨 수광센서는 두개를 사용하였다. 수광센서는 오픈드레인 출력이므로 두개가 병렬로 연결되도 문제가 없다.

OLYMPUS DIGITAL CAMERA

16. 고압 세라믹 삽입
고압세라믹을 삽입한다. 1kV타입을 사용하였는데 고압 세라믹은 보통 청색이다. 트라이악이 ON/OFF가 되는 시점에 상승 하강시간에 소자에 무리가 가는 것을 막아준다.

OLYMPUS DIGITAL CAMERA

17. 텍트스위치 삽입
텍트스위치를 삽입한다. 리모컨을 학습시키거나 전원이 투입될 경우(벽 스위치가 켜질 경우) 조명상태를 결정하게 하는 버튼이다.

OLYMPUS DIGITAL CAMERA

18. 클림프 전선에 수축 튜브 끼우기
클림프 전선에 적외선 수광부를 직접 연결할 것이므로 수축튜브를 끼워놓는다.

OLYMPUS DIGITAL CAMERA

19. 적외선 센서 연결하기
클림프 전선에 적외선 수광부를 직접 연결한다. 너무 오래 납땜하면 수광부가 망가지므로 미리 양쪽에 납을 충분히 묻힌 후 빠르게 붙이도록 한다.

OLYMPUS DIGITAL CAMERA

20. 몰렉스에 클림프 전선 끼우기
클림프가 삽입된 반대측 전선은 몰렉스에 끼워 완성한다.

OLYMPUS DIGITAL CAMERA

21. L자형 서포터 끼우기
기판이 조명 등 기구 철재프레임에 직접 닿으면 납땜 면이 닿으면서 쇼트가 발생할 수 있다. 따라서 천장 철재 프레임에 부착하여도 안전하도록 L자형 서포터를 이용하였다.

OLYMPUS DIGITAL CAMERA

22. 프로그램 굽기
모두 조립되었고 결선도 완료했다면 테스터기로 올바르게 연결되었는지 확인한다. 다이오드의 극성, 트라이악의 극성 등 극성이 있는 부품의 방향도 확인한다. MCU에 www.itstyle.kr/ntrex/irLamp에서 동영상 및 소스프로그램, 회로도를 다운로드 받을 수 있다.
사진은 필자가 만들어둔 다운로드 툴일 뿐이고, 독자들은 다운로드 툴을 이용하여도 좋고 ISP단자를 직접 연결하여 작업하여도 좋다. 단 220V가 인가된 상태에서는 PC접속을 할 수 없다. (절연되지 않아 220V가 연결된 상태에서 PC와 접속하면 고장 또는 화재가 발생할 수 있다.)

027_프로그램로딩1

23. 프로그램로딩1
AVR Studio 4를 사용하여 다운로드 하는데, Tools->Program AVR->Auto Connect를 눌러 접속한다.

028_프로그램로딩2

24. 프로그램로딩2
ATtiny13A를 선택하고 Read Signature를 눌러 정상적으로 인식되는지 확인한다.

029_프로그램로딩3

25. 프로그램로딩3
다운로드 받은 hex파일을 불러오고 Program을 눌러 다운로드한다.

030_프로그램로딩4

26. 프로그램로딩4
Int. RC Osc. 8MHz를 선택하고, BOD를 4.3V에 맞춰 설정한다. CK DIV8은 체크 해제한다.

OLYMPUS DIGITAL CAMERA

27. 구멍뚫기
천장 등기구 철제 프레임에 미리 구멍을 뚫어 나사를 박을 위치를 생각한다.

OLYMPUS DIGITAL CAMERA

28. 드라이버
L자형 서포터를 사용한 이유가 나사구멍이 정확하게 맞지 않아도 끼울 수 있기 때문인데, 나사구멍에 맞춰 방향을 돌려 나사를 끼운다.

OLYMPUS DIGITAL CAMERA

29. 전원 입력 연결하기
천장에서 나오는 전원선을 Line In 단자에 연결한다. 필자는 디바이스마트에서 판매하는 HIV 동심선을 이용하여 천장의 짧은 전선을 연장하였다.

OLYMPUS DIGITAL CAMERA

30. 전원 출력 연결하기
기존 등기구 전선을 Line Out단자에 연결한다. 트라이악의 동작에 따라 등기구가 꺼졌다 켜질 것이다.

OLYMPUS DIGITAL CAMERA

31. 적외선 센서 연결하기 1
등기구 프레임 나사구멍이나 홀을 통해 적외선 센서를 빼낸다. 기판은 등기구 내부에 들어가고 적외선 센서는 외부에 노출되어야 한다.

OLYMPUS DIGITAL CAMERA

32. 적외선 센서 연결하기 2
빼낸 적외선 센서를 기판에 끼운다.

OLYMPUS DIGITAL CAMERA

33. 설치된 모습
설치가 완료된 모습. 정상적으로 설치가 되면 벽 스위치를 켰을 때 자동으로 등이 켜진다. (리모컨이 없어도 기존 벽 스위치로 조작이 가능하도록 전원이 켜질 경우 자동으로 들어오도록 되어 있다.)

LED의 점등 방식설명

LED 점등 방법(우측으로 진행) 설명
●●●●●●●●●●●●●●●● 최초 부팅시
●●●●●●●●●●●●●●●● 리모컨 학습 완료
●●●●●●●●●●●●●●●● 리모컨 학습 준비중
○○○○○○○○○○○○ 세팅 안 됨
○○○○○○○○○○○○ 세팅됨/조명 꺼짐
○○○○○○○○○○○○ 세팅됨/조명 켜짐

: 황색 LED 점등, : 녹색 LED 점등, ○ : LED 소등 / 우측으로 시간이 진행합니다. 녹색과 황색 LED의 점등 방법을 설명하고 있으며 2개의 LED가 동시에 점등될 수는 없도록 설계되어 있다.

2개의 LED로 간단하게 장치의 상태를 파악하고 점검할 수 있다.

버튼 사용 방법

누른 시간 기능 명칭 기능에 대한 설명
2초 이상 전등 상태 반전 조명을 장치에서 직접 끄거나 켤 때 사용
(현재 조명상태를 반전한다.)
5초 이상 리모컨 학습 리모컨을 학습 시킬 때 사용

우선 리모컨을 학습시키기 앞서 사용가능한 리모컨은 TC9012와 NEC방식 또는 흡사한 방식만 사용 가능하며 TV를 기준으로 했을 때 대표적으로 LG와 삼성전자, 아남, 대우일렉트로닉스, 가온미디어 같은 국내 제조회사들이 만드는 리모컨은 다 인식된다.

버튼을 2초간 누르면 전등 상태가 반전이 된다. 2초가 지나도 계속 누르고 있으면(노란불 점등), 리모컨 학습모드에 진입한다. 이 때 학습시키고자 하는 리모컨 버튼을 눌러 학습시키면 녹색불이 들어오고 내부 롬에 저장된다. 리모컨 키는 TV전원이나 외부입력 등 자주사용하는 키가 아닌 특수목적으로 잘 사용하지 않는 키를 학습시켜야 TV와 전등이 같이 제어되는 일이 없다.

리모컨 조작 방법

전등을 끄고 켤 때 학습시킨 버튼만 누르면 된다.

타이머 설정하기

타이머를 설정하고자 한다면 학습시킨 버튼을 연속으로 남은시간에 1을 더한 만큼 누르면 된다(누르는 간격은 5초 이내).
만약 4번 누르면 최초의 1번 누른 것은 조명 상태를 결정하고 3번은 시간값으로 사용되는데, 3시간 뒤에 조명 상태가 반전한다.

-1sec-○-1sec-○-1sec-○-1sec-

단순 전등 상태만 나타내고 있는 모습.
(전등 상태에 따라 녹색 또는 황색으로 표시됨)

○-1sec-    ○-1sec-

○-1sec-    ○-1sec-

타이머가 맞춰진 만큼 LED가 점등하며 시간이 지날수록 LED의 점멸 횟수는 줄어든 후 조명 상태가 반전된다.
다시 리모컨을 누르면 전등 상태가 반전되면서 타이머는 해제된다. 타이머를 다시 맞추려면 다시 시간 값에 1을 더한 만큼 눌러주면 된다.


리모컨 포맷의 구조

우선 우리 주변에 사용되는 리모컨은 적외선을 이용하여 통신하며, 데이터에 따라 ON, OFF를 반복하여 전송한다. 이 때 주변의 방해요소(태양광, 형광등 같은 각종 빛)에 극복할 수 있도록 38kHz의 케리어 주파수(제조사에 따라 더 높거나 낮을 수 있다)에 실어보낸다.

적외선 센서는 각종 빛을 수신하지만 이중 38kHz만 통과시키도록 BPF(대역 통과 필터)를 거친 후 이것을 NPN TR을 통해 데이터로 출력하게 된다.
케리어 주파수에 대해서는 리모컨 제조사와 적외선 센서 제조사가 신경 써야할 부분으로 원리만 알고 자세한 것은 알지 않아도 문제가 없다.

리모컨 포맷의 전체 구조

23project01

리드코드, 16Bit(2Byte)의 커스텀 코드, 8Bit(1Byte)의 데이터 코드, 반전된 8Bit의 데이터 코드로 이루어진다.
첫 번째 프레임은 리드코드인데, TC9012는 4.5ms의 On 시간과, 4.5ms의 Off 시간을 갖는데, 비슷하지만 NEC규격은 9ms의 On 시간과, 4.5ms의 Off 시간을 갖는다.

이번 프로젝트에서는 리드코드는 참조만 할 뿐 그 시간은 중요하게 생각하지 않으므로 TC9012와 NEC포멧 모두를 사용할 수 있다.

데이터가 “0”일 때 데이터가 “1”일 때
 23project02  23project03
0.56ms의 On 시간과
0.565ms의 Off 시간을 갖는다.
0.56ms의 On 시간과
1.69ms의 Off 시간을 갖는다.

커스텀, 데이터 코드는 위 표처럼 On 시간과 Off 시간을 가지고 리모컨 신호의 종류를 가려낸다.
커스텀 코드는 제조사 및 모델 라인업에 따라 결정되며, 데이터 코드는 해당 제품의 리모컨 키 값을 담고 있다. 데이터 코드는 8비트만 있고 뒤에 값은 반전되어 있는데, 두 데이터의 값을 비교해 검증하는 목적도 있고, 1과 0의 데이터 전송 길이가 다르므로 만약 데이터 코드가 0xff라면 총 길이는 18ms가 소요되지만, 0×00라면 총 길이는 9ms에 불과해 리모컨 버튼에 따라 전송 속도가 모두 달라지므로 어떠한 버튼을 눌러도 전송 속도가 동일하게 나오게 하려고 반전하는 이유도 있다.

receive:

in _SREG,SREG ; 인터럽트 진입시 상태 레지스터 백업
push tmp ; 연산 데이터 비교를 위한 레지스터 백업

outiw TCNT,0 ; 리모컨 타이머를 0으로 초기화

pusw x ; 타이머 값 비교에 사용될 레지스터를 백업
pusw z ; 간접주소 사용에 필요한 레지스터를 백업
in xL,ICR1L
in xH,ICR1H
mov tmp,remote_count
cpi tmp,33 ;;; 스타트 1 + 커스텀 16 + 데이터 16 = 총 33비트
brne PC+2
rjmp receive_out ;;; 비트 수가 33개가 넘어가면 잘못된 수신으로 판단.
cpi tmp,32
brcs PC+12
ldi tmp,high(4000) ;;; 스타트 On시간을 비교.
cpi xL,low(4000)
cpc xH,tmp
brcc PC+2
rjmp ir_range_ov ;;; 스타트 On시간이 4~5mS를 벗어나면 무효, 이후 들어오는 비트 신호는 무시
ldi tmp,high(5000)
cpi xL,low(5000)
cpc xH,tmp
brcs PC+2
rjmp receive_out ;;; 스타트 On시간이 4~5mS 이내이면 유효, 다음 비트가 들어올 때 까지 대기(인터럽트 종료)
rjmp ir_range_ov
ldi tmp,high(1080) ;;; 커스텀 또는 데이터 비트 비교 시작
cpi xL,low(1080)
cpc xH,tmp
brcs PC+7
ldi tmp,high(1220)
cpi xL,low(1220)
cpc xH,tmp
brcc PC+3
clc ; 커스텀 또는 데이터 비트가 1.08~1.22mS 범위면 비트 “0”으로 간주
rjmp PC+10
ldi tmp,high(2150)
cpi xL,low(2150)
cpc xH,tmp
brcs ir_range_ov
ldi tmp,high(2350)
cpi xL,low(2350)
cpc xH,tmp
brcc ir_range_ov
sec ; 커스텀 또는 데이터 비트가 2.15~2.35mS 범위면 비트 “1”으로 간주
ror ir_code_buff4
ror ir_code_buff3
ror ir_code_buff2
ror ir_code_buff1 ;;; 4바이트를 우측으로 시프트

tst remote_count
brne receive_out ; 33비트가 모두 수신되었으면 데이터로 사용

ldiw z,ir_data
; ldi remote_data,0
clr remote_reg

loop_search:
;;; 일치하는 코드가 나올 때 까지 루프
;;; (그러나 1개의 버튼만 사용하므로 1회만 실행함)

ldd tmp,z+0
cp ir_code_buff1,tmp ; 첫번째 코드 비교 (커스텀 코드 1번)
brne next_search

ldd tmp,z+1
cp ir_code_buff2,tmp ; 두번째 코드 비교
(커스텀 코드 2번)
brne next_search

ldd tmp,z+2
cp ir_code_buff3,tmp ; 세번째 코드 비교 (데이터 코드 1번)
brne next_search

ldd tmp,z+3
cp ir_code_buff4,tmp ; 네번째 코드 비교 (데이터 코드 2번)
breq find_code

next_search:

;;; 리피트 코드 처리 및 다른 코드 비교처리
;;; 이번 프로젝트는 1개의 버튼만 사용되고, 연속적으로 눌렀을 때 사용되는 기능이 없으므로
;;; 리피트 및 다른 코드비교는 이번 프로젝트에서 사용되지 않음.

ext_io_skip:

popw z
popw x

out SREG,_SREG ; 인터럽트 진입 이전의 상태로 상태 레지스터 복구
pop tmp
reti ; 인터럽트 복구(스텍에 저장된 인터럽트 실행 전 주소로 이동하고 인터럽트를 활성화)


코드 설명

AVR 어셈블리 명령을 사용하고 있으며 일부 명령은 메크로로 간소화 하였으므로 자세한 정보가 필요하면 코드를 다운로드 하기 바란다.
기본적으로 AVR 내에 내장된 타이머를 이용하며 외부 인터럽트가 발생하면 타이머 값을 이용해 시간 값을 비교하는 방식이다.
적외선 수신 센서에서 비트를 하나씩 보내주면 비트가 오는 시간을 측정해 데이터의 유효성 및 종류를 판단하고 비트를 조합하여 4바이트의 리모컨 데이터를 만들어 내는 것이다.

회로도

저자 소개

제작·사진·글:  이민주 객원 기자
www.itstyle.kr 운영자

Comments
One Response to “[23호]적외선 조명 제어기를 만들어보자!”
  1. 이명준 says:

    안녕하십니까?

    프로그램 코드 에서

    outiw TCNT,0 ; 리모컨 타이머를 0으로 초기화

    가 Macro로 되어있어 컴파일이 안됩니다.

    그리고 코드도 다운로드 부분이 없어요…

Leave A Comment

*