이 프로젝트는 내가 이전에 진행했었던 프로젝트와 아주 유사한 프로젝트이다.

2016/08/04 - [IT / Development/Arduino] - Arduino를 이용해서 에어컨을 제어해보자.(with Thing+)

 

Arduino를 이용해서 에어컨을 제어해보자.(with Thing+)

요즘 여름이 한창이다. 올해는 상당히 더운 여름인 것 같다. 그래서 집에 있을때는 에어컨을 항상 켜놓고 생활을 하고 있다. 하지만, 저녁에 퇴근을 해서 집에 가면 집이 너무 뜨거운 상태이다. 바로 에어컨을 킨..

dokkodai.tistory.com

비슷한 프로젝트이지만, 내가 작성했던 글보다 좀더 자세하고 친절하게 설명한 자료이기 때문에 공유합니다. 아마도 내가했던 프로젝트를 참고해서 한것으로 예상이된다.


적외선 통신 (Infrared Ray Communication)

먼저, IR통신에 대해 알아보면 말그대로 적외선 통신입니다. 라인트레이서나 근거리 무선 통신(에어컨, TV 등)에서 많이 사용되는 것이죠.

이 포스팅은 가정에서 볼 수 있는 이러한 리모컨들의 신호를 알아보고 별도로 제어해볼 수 있게 하려는 것이 목적입니다.

우선, IR통신에 대해 간단히 알아보아야 하는데 저는 솔직히 지금도 제대로 모릅니다. IR자체는 빛에서 나오는 전자기파라고 알려져 있죠. 저도 딱 이정도만 알고 있습니다. 더 좋은 자료는 역시나 사전이나 위키죠.
http://terms.naver.com/entry.nhn?docId=1139197&cid=40942&categoryId=32238

 

적외선

가시광선보다 파장이 긴 전자기파. 태양이 방출하는 빛을 프리즘으로 분산시켜 보았을 때 적색선의 끝보다 더 바깥쪽에 있는 전자기파를 적외선이라 한다. 파장의 길이에 따라 분류하면 파장 0.75∼3㎛의 적외선을 근적외선, 3∼25㎛의 것을 적외선, 25㎛ 이상의 것을 원적외선이라 한다. 가시광선이나 자외선에 비해 강한 열작용을 가지고 있는 것이 특징이며, 이 때문에 열선(熱線)이라고도 한다. 태양이나 발열체로부터 공간으로 전달되는 복사열은 주로 적외선에 의한

terms.naver.com

https://en.wikipedia.org/wiki/Infrared

 

Infrared - Wikipedia

A pseudocolor image of two people taken in long-wavelength infrared (body-temperature thermal) light. This infrared space telescope image has (false-color) blue, green and red corresponding to 3.4, 4.6, and 12 µm wavelengths, respectively. Infrared radiati

en.wikipedia.org

적외선 통신은 이러한 전자기파를 이용한 통신을 일컫습니다. 
간단한 특징을 나열해보자면,

1. 근거리 통신
2. 파장이 길기 때문에 공기 중 입자를 원활히 통과한다.
3. 주파수는 38Khz

위 내용들은 아래 링크에 자세히 설명되어 있으니 참조하시길 바랍니다.
http://navercast.naver.com/contents.nhn?rid=122&contents_id=7247

 

적외선 통신

TV 리모컨에서 흔히 볼 수 있는 광 무선 통신 기술, 적외선 통신 무선 통신이란 케이블 연결 없이 정보를 주고 받을 수 있는 기술의 통칭이다. 얼핏 듣기에는 여러 가지 복잡한 전문 용어들이 오가는 첨단 기술을 떠올리기 쉽지만, 넓은 의미로 생각하자면 조선 시대에 쓰던 봉수(烽燧: 산꼭대기에 불을 피워 소식을 알리는 통신수단, 또는 봉화)도 무선 통신 기술의 하나라고 할 수 있다. 현대에 들어 사용하는 무선 통신은 와이파이(Wi-Fi, 무선 랜)나 블루투

terms.naver.com

몇 가지 특징만 잘 이해해두고 다음으로 넘어가도록 하겠습니다.

 

IR 수신기를 활용한, IR 신호 해킹 - 회로 구성

IR수신기니 뭐니 했지만... 이 마저도 쉽게 생각되진 않습니다. 그러기 위해서 아두이노로 쉽게 해보는 것이겠죠?

IR 수신기는 여러가지가 있습니다만 저는 아래의 수신기를 사용했습니다.

VS1838B

VS1838B 라는 IR Receiver 모듈인데, 데이터시트는 아래 링크에 있습니다.
http://www.centralmedia.fr/download/vs1838b.pdf

추가적으로, 아래는 arduino kit사용시 레퍼런스로 만들어놓은 문서인거 같은데,
회로를 잘 모를 때는 이러한 문서를 추가 참조하는 것도 좋습니다.
http://arduino-kit.ru/userfiles/image/VS1838B_INFRARED_RECEIVER_MODULE.pdf

데이터시트에서는 VCC와 OUT 사이에 20k 이상의 저항을 다는 레퍼런스 회로를 보여주고 있지만,
아두이노 키트관련 링크에서는 10k 저항을 사용하였네요.

사실 이 내용은 회로적인 문제라서, 필요에 따라 정확한 계산을 적용하여 사용해야 합니다.
하지만 IR처럼 순간적인 신호의 경우에는 어느정도 오차는 중요하지 않으므로 보통 10k와 같은 저항을 간단히 달아 사용한다고 합니다. 아두이노 키트 문서에서 나오는 내용도 이러한 측면에서 적용한 내용이니 아래와 같은 회로를 적용하시면 되겠습니다.

IRremote library, 소스코드

회로를 구성했으니 아두이노에 소스코드를 업로드 해야겠죠?
하나부터 열까지 다 작성하려면 IR에 대한 제대로 된 이해와 함께 시작을 해야할 겁니다.
하지만 오픈소스 시대에서 굳이 하나부터 열까지 코딩하는 건 그렇게 바람직해보이지 않습니다.
그것도 아두이노 플랫폼에서요!

해서, 아래의 라이브러리를 추가하고 그 안에 있는 예제를 활용해 볼 것입니다.
https://github.com/z3t0/Arduino-IRremote

 

z3t0/Arduino-IRremote

Infrared remote library for Arduino: send and receive infrared signals with multiple protocols - z3t0/Arduino-IRremote

github.com

라이브러리 매니저에서도 추가할 수 있지만, 현재 GitHub의 최신버전이 적용되고 있지 않습니다.
따라서, 위 링크에서 직접 다운받아 
[내문서] - [arduino] - [library] 폴더에 압축을 풀어 추가해주시면 되겠습니다. 혹은 라이브러리 매니저로 추가한 뒤에, 생성된 폴더에 덮어쓰기 해주세요.

추가가 되었다면, IRremote에서 제공하는 기본예제중에,
"IRrecvDumpV2" 라는 예제가 있을 거에요. 이걸 열어주도록 합니다.
위 회로에 맞추어서 Pin번호만 
수정한 코드를 아래 링크에 작성해 두었습니다.
https://create.arduino.cc/editor/OpusK/1ba7a744-b903-4f84-961d-d95a1e23782a/preview

 

Arduino Create

 

create.arduino.cc

 

LG에어컨 리모컨 IR신호 확인하기

위의 소스를 아두이노에 업로드 합니다. 
그리고, 시리얼 모니터를 엽니다.
이제, 집에 있는 IR리모컨을 수신기를 향하게 하고 눌러보도록 하겠습니다.

제 집에는 아래와 같은 소형 LG에어컨 리모컨이 있어서, 이걸로 테스트 해보겠습니다.

눌렀더니 아래와 같은 시리얼 메시지가 나왔습니다.

우선 Encoding에 LG라고 나오네요. IR통신의 프로토콜(약속)은 제조사마다 상이하기 때문에 인코딩 방식을 통해 제조사 혹은 프로토콜 방식을 확인할 수 있습니다예를 들어 삼성 TV 리모컨을 사용하시면 SAMSUNG 이라고 나옵니다.

다음은 Code에 Hex값이 보이네요. 28bit로 되어있다고 하는데, IR통신마다 비트수는 상이합니다. 일다 LG는 28비트는 사용하는구나. 라고 넘어가면 되겠죠. 이 코드는 바로 다음에 살펴볼 기나긴 값들을 "정해진 비트수로 표현한 값" 이라는 것만 기억해 두세요.
다음만 이해하면 됩니다. 0x8800909 이라는 코드는 "냉방" "바람약함" "상하바랑" "24도" "예약없음" 의 데이터가 포함된 코드라는 것을요 :)

Timing이라고 되어 있는 RAW데이터들이 보입니다. 이 RAW데이터 어딘가에는 에어컨 세팅에 대한 데이터들이 들어 있습니다.
이걸 알고 싶으면 분석을 해야겠죠? 제조사에서 프로토콜을 알려주지 않는 이상은요!
여기서는 간단히 저 값들이 대략 어떠한 것을 의미하는지... 호기심을 가지실 분들을 위해 살포시 언급만 하고 넘어가겠습니다.
일단 이 Raw데이터는 IR 신호를 표현한 것이라고 생각하시면 됩니다.
각각의 숫자는 시간입니다. 양수(+)는 HIGH상태의 시간, 음수(-)는 LOW상태의 시간이죠.
정확히 표현하자면, 양수(+)는 PWM이 Off 되어 있는 시간이며, 음수(-)는 PWM이 On되어 있는 시간입니다.
( 회로 구성이 풀업이기 때문에 평상시에 HIGH신호를 유지합니다 )

보시면 규칙이 보이실거에요. 처음 시작할 때의 대기 HIGH시간과 LOW시간은 깁니다.
그리고 그 다음부터는 HIGH시간은 대체로 비슷하며, LOW시간이 조금씩 다르죠.
HIGH시간은 신호 구분을 위한 것이며, LOW시간이 짧고 긴것을 판단하여 
논리적 0, 1을 판단합니다.

물론 이러한 내용이 모든 IR통신 방식에서 통한다는 것은 아닐겁니다. 
아래 링크의 문서만 보더라도 그 코딩방식이 상이한 것을 볼 수 있습니다.
http://www.vishay.com/docs/80071/dataform.pdf

하지만 여기서 우리가 사용하는 것들의 방식은 위에서 설명 드린바와 같습니다.
참조할만한 링크로 아래 링크를 드립니다.
http://www.brainlinksystem.com/all-about-ir-signals

불러오는 중입니다...

https://learn.adafruit.com/ir-sensor/ir-remote-signals

 

IR Remote Signals | IR Sensor | Adafruit Learning System

Now we know that the sensor works, we want to figure out whats being sent right? But before we do that let's first examine exactly how data is being sent from the IR remote (in your hand) to the IR receiving sensor (on the breadboard) For this example we w

learn.adafruit.com

좀 더 직관적이고, 시각적인 자료를 원하신 분들은 아래 링크를 꼭 참조해보세요 :)
https://qph.ec.quoracdn.net/main-qimg-31a7693890951a448ab8c4b0ead192fe?convert_to_webp=true

불러오는 중입니다...

https://www.quora.com/How-do-an-IR-transmitter-and-receiver-work

 

How do an IR transmitter and receiver work?

Answer (1 of 10): IR transmitters and receivers are present in many different devices, though they are most commonly found in consumer electronics. The way this technology works is that one component flashes an infrared light in a particular pattern, which

www.quora.com

간단히 정리해 보면,

1. Start 신호가 존재한다.
2. PWM신호의 시간으로 논리적 1과 0을 구분한다
(이렇게 되면 디지털 언어를 표현할 수 있겠죠?)
3. 수신측에서는 이러한 신호를 받아 논리적 값으로 변환하고 이를 통해 명령을 수행한다.

그리고, 아래의 경우는 인코딩이 UNKOWN이라고, 알수없다고 하고 있죠?
물론 이 예제에 등록되지 않은 내용들은 전부 UNKNOWN으로 나옵니다.
하지만, 저처럼 LG라는게 명확히 나오는 경우가 있는 상황에서의 UNKNOWN은 문제가 있는 것이겠죠?
이러한 것들은 확인을 해주어야 합니다.

이러한 IR통신의 특징이 일상생활에서 다음과 같은 상황을 맞이하게 해줍니다.

즉, 우리가 간혹 리모컨을 누르는데 기기가 안먹는 경우가 있죠. 리모컨 화면은 혼자 꺼지구요.
이러한 경우가 위와 같은 현상으로 인한 것임을 알 수가 있습니다.
IR 신호가 에어컨의 리시버에 제대로 전달되지 못한 것이죠!
그러니 적절한 근거리와 각도를 잘 맞추어 주어야 제대로 된 통신을 할 수 있겠죠?

 

활용 방안

집에 있는 리모컨의 IR신호를 확인해본들 사용하지 않으면 실용적인 의미는 없겠죠?
이제 이것을 토대로 원격지에서 클라우드 서비스나 자신만의 서버를 통해 에어컨을 제어할 수 있는 것을 해보려고 합니다.

더운 여름에 집에 들어가기 10분 전이라도 에어컨을 미리 틀어 놓을 수 있었으면하는 생각 해보셨나요?
그를 위한 간단한 IoT 장비를 아두이노를 통해 쉽게 만들 수 있습니다.
개발자가 아닌 사람들도 최대한 낮은 장벽으로, 자신만의 홈 오토메이션을 만들어보는 거죠!

우선, 자신만의 서버를 구축하거나 하는 행위들은 다소 여러가지 작업들이 수반되므로, 상용 서비스를 이용해 쉽게 만들어보고자 합니다.
다만 상용 서비스인만큼, 사용자가 커스터마이징 하는 것에는 제한이 따르겠죠?

그럼 다음 포스트에서 뵙도록 하겠습니다.

2019/04/09 - [IT / Development/Arduino] - 아두이노로 나만의 IR 리모컨 만들기 - IRremote Library를 활용한

불러오는 중입니다...

출처 : https://blog.naver.com/opusk/220984753138

 

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

적외선 통신 (Infrared Ray Communication)먼저, IR통신에 대해 알아보면 말그대로 적외선 통신입니다...

blog.naver.com

 

+ Recent posts