리모컨으로 TV나 에어컨을 조작할 때 누구나 한번쯤은 이 리모컨의 작동 원리에 대해 궁금증을 가져보았을 것입니다.
멀리서 무선으로 기계를 조작할수 있게 해주는 아주 편리한 장치, IR 리모컨! 어떻게 작동하는 것일까요?
IR리모컨이라 함은 IR(Infra Red - 적외선)광선을 이용한 무선통신 리모컨을 통칭합니다.
파형 스펙트럼에서 눈에 보이는 광선을 가시광선이라 하는데,
IR은 가시광선의 Red 부분에서 좀더 파장이 긴 녀석들의 일부 대역을 말합니다.
물론 가시광선의 범위를 벗어남에 따라 사람의 눈에는 보이지 않습니다.
하지만 다른 대역의 파형과 같이 눈에 보이지 않는다 하더라도 에너지를 갖고있으며, 이 에너지를 이용하여 데이터를 전송하게 됩니다.
가시광선에서 빛의 삼원색을 섞으면 파장 간섭에 의해 흰색이 보이는것 처럼, IR또한 다른 파형이 가진 에너지에 의해
파장 간섭이 일어나게 됩니다. 그 결과 노이즈가 생겨나게 되고 이에따라 IR통신은 주로 근거리 데이터 통신에 사용됩니다.
그러나 근거리 데이터 통신에 IR파형을 바로 적용한다면, 수많은 노이즈원이 존재하는 실제 환경에서
소규모 장치를 통한 데이터 통신의 경우 파형이 목적지에 온전한 데이터로써 도달할수 있는 거리가 상당히 제한되어집니다.
(수 cm, 고출력 IR의 경우 기껏해야 30cm -> 더이상 소규모 장치가 아님.)
그런데 어떻게 건전지 한두개로 작동하는 작은 IR리모컨도 5m 이상의 거리에서 충분히 작동을 하는걸까요?
그 정답은 바로 변조와 캐리어 주파수에 의한 반송파 출력에 답이 있습니다.
우리들이 흔히 말하는 AM과 FM(중파, 단파)또한 음성 신호를 저멀리 보내기 위해 변조와 반송파 출력을 이용합니다.
보통 어떤 기술을 적용하느냐는, 데이터가 어떤것이냐, 아날로그냐 디지털이냐 등등에 따라 달라지지만
모두 신호를 노이즈로부터 간섭을 최소화 하기위해 만들어진 기술입니다.
반송파를 거쳐 변조된 신호의 경우 다른 주파수를 갖는 신호와 혼합되더라도
수신측에서 필요로 하는 원래의 채널과 대역만을 온전히 전달할 수 있게 해줍니다.
앞서 말했듯이 IR 리모컨 또한 반송파 변조를 거치게 되는데, 일반적으로 37.9(38)kHz의 캐리어에 담아 송출됩니다.
결과적으로 수신부에서는 캐리어에 담긴 IR신호를 온전히 받아낸 다음,
Low Pass Filter를 거쳐 캐리어 신호를 복조하여 원래의 데이터를 수신할 수 있게 해주는 것이지요.
그리고 IR 리모컨의 신호는 일반적으로 이러한 구성으로 되어있는데, 이 부분은 삼성이나 LG등등 제조사마다 차이가 있습니다.
먼저 첫 부분의 Lead Code의 시간 분할을 이용하여 특정 브랜드의 IR 리모컨 신호 수신을 유도합니다.
마치 학교 운동회에서 각 반(1반은 삼성, 2반은 엘지..)의 주목을 유도하는것과 비슷한 맥락이라고 보시면 됩니다.
그리고 그 뒤에 나오는 Custom Code는 일정 제품군의 IR 리모컨 신호 수신을 유도합니다.
이것은 반 내에서 철수(TV)와 영희(에어컨)를 구분짓는 코드라 생각하시면 되겠습니다.
그리고 그 뒤의 Data Code는 실제 지령을 호출하는 데이터를 담고있습니다. (켜기, 끄기, 볼륨업다운 등등)
끝의 머릿줄이 붙어있는 코드는 앞에 나왔던 코드의 보수를 담고있습니다. 이는 IR 신호의 검증을 위해 수신합니다.
이는 일반적인 예를 나타내고 있으며 제조사, 제품군 마다 코드의 길이, 데이터의 총 비트수는 차이가 날 수 있습니다.
자, 이제 이론을 통해 원리도 어느정도 알게 되었으니 실질적인 리모컨 해킹으로 넘어가 보겠습니다.
간단한 IR수신 소자를 이용한 카운팅 회로의 구현입니다. 본래 리모컨에 사용되는 소자가 아니기때문에 수신률이 좋지는 않습니다.
903, 913, 603과 같은 적외선 수신 소자를 사용하면 LPF를 거쳐 원래의 신호를 Logic Level로 수신할 수 있습니다.
903 소자를 이용하여 마이크로컨트롤러에 입력을 받는 모습입니다.
903소자를 통하여 IR 리모컨 신호를 수신하게 되면 매우 깨끗하게 수신되는 모습을 볼 수 있습니다.
신호가 제대로 들어오는건 알겠는데, 저 파형을 어떻게 데이터화 하는것이 좋을까요?
물론 수십가지 방법이 있겠으나 이번의 경우 마이크로컨트롤러의 Timer - Input Capture을 통하여
신호를 입력받게 하였습니다.
신호가 들어오는 Edge를 토글하면서 해당 신호가 얼마나 로직 레벨을 유지하는지 시간을 재는 방식입니다.
IR 리모컨 신호의 경우 일반적으로 짧은 신호를 1, 긴 신호를 0으로 보내는 특성이 있습니다.
MCU 프로그래밍을 통한 IR 리모컨 신호의 해석 및 직렬통신을 이용한 PC로의 전송입니다.
이번에 사용된 리모컨의 경우 0은 900~1000사이의 길이를 가지며 1은 400~500사이의 길이를 가지는것으로 나타났습니다.
이것으로 간단하고도 살짝 복잡한 IR 리모컨 신호의 리버싱이 끝났습니다. 이제 이 데이터를 가지고 지지고 볶아
어느 신호가 들어왔을 때 어떤 작동을 하겠다 선언(프로그래밍)만 해주면 되는것이죠.
요즘 하고있는 작당질은 무선통신을 이용한 임베디드 제어이기 때문에
RF, IR, 블루투스(와 같은 2.4G통신), NFC, 그리고 Ethernet 등등.. 선(있)없이도 데이터 통신이 가능한 여러 수단중,
이번 IR 리모컨을 이용한 임베디드 제어를 해보겠습니다.
막연하게 임베디드 제어라고 했는데 어디서부터 시작해야 할까요?
임베디드 시스템은 전기를 소모합니다. 전기는 AC 220V를 사용할 때도 있고 전력변환을 통한 DC를 사용할 때도 있습니다.
그럼 둘다 제어하려면 AC 220V를 제어하면 되겠습니다. (오?)
그러므로 이번에는 간단한 AC 220V 제어 임베디드 시스템을 만들어보겠습니다...
본 회로의 기초가 될 회로입니다.
AC 220V의 입력을 가지며, 트라이악과 옵토커플러의 Zero Voltage Switching을 통하여 고효율 전원 제어가 가능합니다.
하지만 본 회로에 사용될 5V는 AC 220V입력으로부터 브릿지 다이오드와 제너다이오드를 이용한 5.1V 정전압이기 때문에,
5V의 Ground와 입력의 AC가 물리적으로 Non Isolated되어있어 보기에는 AA건전지 약 4개(4.8~6V)처럼 보여도,
손으로 잡는 즉시 AC 220V의 폭탄을 맞게 되므로, 크로 아름다운 220V를 견디지 못하는 분들께서는 주의 엄금하시기 바랍니다..
납땜 과정
납연기의 향연입니다.
제작 도중 파형을 보기위해 오실로스코프 그라운드를 찍었다가 말그대로 아크방전을 영접하고 사망하신 회로입니다.
공통 그라운드라는 문제점인데, 물리적으로 두 회로의 접지가 공통되는 Non Isolated 회로들의 위험성을 단적으로 보여줍니다.
얼핏 보기에는 정류를 통해 220V -> 원하는 DC 낮은 전압을 얻었으나, 물리적으로 분리되지 않아서
실제 그라운드 위에 서 있는 인간의 경우 지각과 AC 220V의 공통 그라운드로 물려 220V가 감전되는 현상입니다.
물론 공중부양을 하거나 발에 부도체를 감아서 지각과의 접촉을 분리해주면 해결되지만 사람은 그렇게 멍청하지 않습니다.
이 경우 물리적으로 분리시켜주는 트랜스포머를 이용하면 안전성과 권선비 조정을 통한 소자 Voltage Stress도 낮출 수 있어
일석 이조의 효과가 있습니다.
아크방전을 영접하신 회로에서 교훈을 얻어 모든 소자를 소켓방식으로 하여 다시 제작하였습니다.
소자에 문제가 생긴 경우 납땜의 필요가 없습니다.
아크방전 영접후 돌아가신 회로.. ㅠㅠ
여차저차 우여곡절 끝에 완성된 IR 220V Power Remote Board 프로토타입입니다.
회로를 테스트하고, 문제가 없으면 오른쪽에 보이는 MCU를 프로그래밍 합니다.
IR 리모컨 수신 프로그램을 구워주고 다시 실장하면 테스트 준비 끝입니다.
오른쪽의 홀랑 태워먹은 보드가 역시 첫번째 제작 보드가 그런지 납땜이 깔끔합니다.
두번째 보드는 납땜이 너무 귀찮아 냉납이 있는지 검수만 하고 마무으리 하였습니다.
최종 테스트 구성입니다.
자작한 보드에 AC 220V 입력을 주어 가동 준비상태로 들어갑니다.
그리고 출력부에 멀티탭 1개를 연결하고 220V 스탠드와 7.5V 어댑터를 이용하는 소규모 임베디드 시스템을 부하로 연결합니다.
220V가 정상적으로 제어가 되는지 IR 리모컨으로 제어해봅니다.
최종 테스트 시연 영상입니다. 아주 잘 작동하는것을 볼 수 있습니다.
이것으로 IR 리모컨 신호 해킹과 220V 제어모듈 제작을 끝마치겠습니다.
(IP보기클릭).***.***
?
(IP보기클릭).***.***
?
(IP보기클릭).***.***
(IP보기클릭).***.***
(IP보기클릭).***.***
(IP보기클릭)121.175.***.***