티스토리 뷰


해당 포스팅은 아래 링크의 포스팅을 기본 전제로 진행합니다.


[아두이노] 리모컨 IR신호 확인하기 - IRremote Library를 활용한




이 포스팅은 제목과는 다르게,

리모컨 형태의 하드웨어를 만들지는 않습니다.

다만 그 기본이 되는 소스를 확인해보는 것이며, 다음 포스팅에서 클라우드 서비스를 활용한 원격 제어를 하기 위한 그 이전 단계일 뿐임을 먼저 말씀드리는 바입니다. 따라서 리모컨 자체에 관심이 있으신 분들은 참고만 하시되, 더 좋은 포스팅을 검색하셔서 참조하시길 바랍니다.





IR LED 와 극성



우선, 리모컨을 만들기 위해서는 리모컨에 달려있는 IR 송신부가 필요하겠죠?

보통 IR Sender, IR transmitter, IR LED 라고 검색하시면 이 소자(부품)를 확인/구입하실 수 있습니다.

http://itempage3.auction.co.kr/DetailView.aspx?ItemNo=B360362637&frm3=V2


당연히 수신하는것이 아니라 "송신", "발신" 하는 것이므로, 제대로 확인하고 사용하셔야겠죠?

라인트레이서에서도 IR LED를 활용하는데요.

아래의 명칭을 사용하기도 하니 기억해두실 분들은 기억해 두세요.


1. 발광부 : IR Sender, IR Transmitter - 즉 IR신호 송신기 (빛을 쏘는 부품)

2. 수광부 : IR Receiver - 즉 IR신호 수신기 (빛을 받아들이는 부품)


지난 포스팅에서 사용한 IR LED는 수광부인 것이고,

오늘 주로 사용할 LED는 "발광부"가 되겠죠?


Origin : https://commons.wikimedia.org/wiki/File:IR_led.jpg  (CC BY-SA)


얼핏 보면 어디서 많이 본 것 같죠?

발광 다이오드와 똑같이 생겼습니다. IR LED도 극성(+,-)이 존재하기 때문에 정확히 연결을 해주어야 하는데요.


우선, 발광 다이오드의 극성에 대한 그림을 보면 아래와 같습니다.



1. 다리가 긴 쪽이 + (애노드)

2. 내부 Leadframe 크기가 작은 것이 + (애노드)

3. LED 몸체의 Flat spot이 있는 곳이 - (캐소드)


뭐 대체로 위의 세 가지로 구분을 많이 합니다만, 100% 보장할 수는 없습니다.

하드웨어 엔지니어로부터 들은 말에 의하면, 1번. 즉 다리 길이를 보고 구분하는 방법은 틀린적이 없다고 합니다.

하지만 예외적인 것들이 있기 때문에, 멀티미터기를 활용하여 극성을 확인할 수 있습니다.

이게 제일 정확하겠죠?







IR LED 점검



위에서 극성을 제대로 확인하였다면,

자신의 IR LED가 정상인지 여부를 확인하기 위해 간단한 테스트를 해야 합니다.

워낙 대량으로 생산되기 때문에 문제가 있는 소자들이 있습니다.

하드웨어 점검을 안하고 소프트웨어 하다가 안되면 불필요한 삽질을 여러번 하게 되므로 최초에 확인하고 진행해 주세요

어떠한 개발이든 하드웨어에 대한 충분한 검증을 하고 진행하는 것이 정석이고, 정신 건강에도 이로우므로 꼭 해주세요.


위에서 극성을 확인하셨다면,

극성에 맞게 아두이노나, 가지고 있는 배터리에 연결합니다.

극성이 맞지 않으면 소자 내부가 타고 연기도 날테니... 꼭 확인하고 하세요...

( 물론 여기서 저항을 하나 달아주면 좋지만 잠깐 테스트할 것이기 때문에 그냥 진행합니다 )



연결을 하였다면, 위와 같이 보라빛이 보이게 되는데요.

이건 육안으로는 식별이 불가하고, 카메라를 통해서 확인이 가능합니다.

다행이 요즘은 대부분 카메라가 가능한 스마트폰이나 피쳐폰을 가지고 있기 때문에 쉽게 확인할 수 있습니다.

연결을 제대로 한 상태에서, 카메라로 IR LED를 보면 위 사진처럼 보라 빛을 확인하실 수 있습니다.

이러면 소자가 정상이므로 다음 스텝으로 넘어갑니다

( 회로연결은 끊어주세요! )







회로 구성



회로구성은 아래와 같습니다.



중간에 TR(트랜지스터)을 달아준 이유는 IR신호가 많이 약해서 증폭시켜주기 위함입니다.

실제 TR없이 해보시면 매우 근거리에서만 제대로 인식되는 것을 확인하실 수 있으실 겁니다.


제가 사용한 TR은 BC547 이었는데요.

어떠한 TR이라도 해당하는 데이터시트를 참고하셔서, 그에 맞게 진행하시면 됩니다.

https://www.arduino.cc/documents/datasheets/BC547.pdf


저항값은 이전 포스팅에서 말씀드렸던 것처럼, IR신호의 경우 민감한 경우가 아니기때문에 적절히 달아주셔도 됩니다.

참고를 위한 레퍼런스로 아래 두 링크의 TR 회로를 참조바랍니다.


Origin : puzzlebox  ( CC BY-NC-SA )



Origin : OSHW Alchemist  ( CC BY-NC-ND )



IR신호를 내보낼 PWM 핀은 3번을 사용하였는데, 그 이유가 있습니다.

소스 상에서 사전에 보드별 사용하는 PIN을 지정해 두었기 때문인데요.

보드별 기본 핀은 아래와 같습니다.

추가로 여러개 핀이 있는 경우, Bold체로 굵게 되어 있는 것이 기본 핀입니다.

이러한 핀은 사용자에 의해 변경을 할 수 있는데요, IRremote 라이브러리 내부에 있는 헤더파일 내부 내용을 수정해 주면 됩니다.

그 파일은 boarddefs.h 입니다. 여기서 자신이 사용하는 보드(MCU)를 확인해서 #define값을 수정해 주면 됩니다.

( https://github.com/z3t0/Arduino-IRremote 해당 링크의 최신 버전이 아닌 경우에는 IRremoteInt.h 에서 수정할 수 있습니다 )


https://github.com/z3t0/Arduino-IRremote







소스 코드



지난번에 추가하였던, IRremote 의 예제를 활용하겠습니다.

https://github.com/z3t0/Arduino-IRremote


예제는 IRsendDemo 와 IRsendRawDemo 가 있습니다.

앞의 예제는 HEX코드로 된 코드를 보내는 것이고 (내부적으로는 RAW로 변환시켜 보냅니다),

뒤의 예제는 RAW신호 값을 그대로 보내는 것입니다.


전자의 경우는 인코딩이 명확하고, IRremote 라이브러리에 등록된 경우 사용하면 좋고,

후자의 경우는 그렇지 못한 경우에 하나하나 보내고 싶을 때 사용하면 되겠습니다.


우선, 간단한 테스트를 위해서 지난번 LG 에어컨 리모컨의 IR값을 사용해보겠습니다.

IRsendDemo 예제에 몇가지 기능들을 더 추가하고, LG리모컨에 맞게 On/Off 코드만 집어 넣었습니다.



시리얼 모니터를 사용하여 '0'을 입력하면 에어컨을 OFF, '1'을 입력하면 에어컨을 ON합니다.

for문을 사용하여 3번 보내는 이유는, 혹시나 각도가 안맞아서 제대로 신호가 전달되지 않았을 경우를 대비한 장치입니다.

사용자에 따라서는 사용하지 않아도 무방합니다.


이 것을 가지고 바로 에어컨이나 리모트 장비에 테스트를 해도 되고,

이전 포스트에서 회로 구성한 IR수신기에 데이터를 보내, 정확히 데이터가 입력되는지도 확인해 볼 수 있겠죠?







정리



누군가 친철하게 라이브러리를 만들어 두어서, 우리는 이렇게 편하게 사용할 수 가 있습니다.

이게 오픈소스하드웨어의 장점이겠죠? 반대로 우리도 누군가에게 이런 도움이 되어야 할 것이라고 생각합니다.

애초에 오픈소스하드웨어를 사용하는 시점에서 "오픈소스 진영의 라이센스"를 따르셔야 할테지만요.


이번 포스트에서는 Serial 문자를 사용한 단순한 IR리모컨 만들기를 해보았지만,

하드웨어를 만들던, 스마트폰을 사용하던(솔직히 이건.. 어플 사용하면 그만이죠) 더 진행해 볼 수 있겠습니다.

기초가 되는 부분을 응용으로 확장시키는건 만드는 사람의 몫이니까요.


저는 다음 포스팅에서 클라우드 서비스를 통한 원격제어를 다룰 것이기 때문에, 더 이상의 진행은 하지 않았습니다.

어찌되었든 우리는 IR신호를 만들어서 보낼 수 있는 방법까지 성공했으니, 다음 스텝으로 나갈 수 있게 되었네요 :)



댓글
댓글쓰기 폼