아두이노로 에어컨 제어하기 (IR, HomeKit) 1탄
방에 에어컨을 달았는데, 마찬가지로 HomeKit 으로 제어해보고 싶었다.
리모컨이 있으니 전등에 비해 꼭 필요한건 아니였지만...
시리로 켜고 끈다거나,, 온도에 따라 자동 제어 같은걸 해보고 싶어서...
가장 먼저 에어컨 리모컨 신호를 받아서, 아두이노로 다시 보내서 테스트해보는걸 먼저 해보았다.
Apple | iPhone 6 | Normal program | 4.2mm | 2017:07:20 19:19:18
이번에 방에 설치한 에어컨.
LG WHISEN SUC066BC 모델...
이모가 쓰시던걸 받아왔다.
IR 은 예전에 적외선 송수신 킷을 구매했던걸 활용하였다.
NIKON CORPORATION | NIKON D800 | Manual | 60.0mm | 2015:06:08 09:23:06
구매처는 아트로봇, 링크
무려 13년도에 샀던건데, 구매내역에 잘 보관되어 있었다..
어떻게 연결하는지 등은 Hook-up Guide 글을 보자.
연결 후에는 아두이노에서 IRremote 라이브러리를 내려받고 사용하면 된다.
라이브러리를 받은 후에
libraries/IRremote/examples/ 폴더로 가면
IRsendRawDemo, IRrecvDumpV2 예제가 있으니, 이 스케치로 원래 리모컨의 신호를 읽고, 날려보면 된다.
예시 폴더에 LGACSendDemo.. 가 있는 것은 이 글을 보면서 발견했는데,,
https://github.com/chaeplin/lgwhisen 이런 오픈소스도 있지만 결과적으로 나는 제대로 작동하지 않아서, 다시 코드를 짰다.
여튼 돌아와서, IRrecvDumpV2 스케치를 업로드한 후에 리모컨으로 눌러보면
이런식으로 신호가 나오게된다.
rawData 를 복사해서 IRSendRawDemo 의 예시처럼,
irsend.sendRaw(rawData, sizeof(rawData) / sizeof(rawData[0]), khz)
이렇게 보내주면 그대로 복사하는거라고 하는데....
실제로 해보면 안된다. ㅡㅡ;
또한 에어컨 리모컨은 특성상, 각 신호가 온도, 바람세기 등의 정보를 가지고 있는데 저걸 어떻게 분석해야하나.. 난감했는데,
위의 LG 에어컨 코드들이 제대로 작동은 안할지언정 기본 베이스가 같아서 도움이 되었다.
위 코드와 IRremote 라이브러리의 ir_LG.cpp 등의 코드를 보면,
업다운 신호가 한 세트로, +500, -500 이면 0, +500, -1500 이면 1 이 되어서 28 bit 의 신호를 만들게 된다.
위 사진의 경우 1000 1000 1100 0000 0000 0101 0001 이 되겠지.
이제 IRrecvDumpV2 스케치에서 loop 함수를 이렇게(접어둠) 바꿔두고 리모컨을 눌러보며 신호를 분석해보면 된다.
git 에 https://github.com/chaeplin/lgwhisen/blob/master/decoding.md 이것도 참고 사항이 되긴 하지만...
리모컨 몇번 눌러보면 금방 파악이 되긴 한다.
나의 버전으로 다시 정리를 해보자면 28bit 가
1000 1000 (1) (2) (3) (4) CRC
이렇게 생겨먹었고, CRC 는 ( (1)+(2)+(3)+(4) ) & 0xFF
모드별로 보면
(2)
냉방: 0 => 0000 x000 xxxx xxxx
제습: 1 => 0000 x001 1001 xxxx
송풍: 2 => 0000 x010 0011 xxxx
인공지능: 3 => 0000 x011 0010 0101
ㄴ 0: 전원을 켤때, 1: 이미 켠 후 조작시
대충 이렇게 생겼다.
(3) 은 주로 온도. 온도에서 15를 뺀 값
(4) 는 바람 세기.
low: 0
mid: 2
hight: 4
auto: 5
이렇게였는데, 이건 위의 예제들의 분석과 동일하다.
여튼 이제 원하는 28bit 를 만들 수 있으니 이 신호를 보내면 된다.
Apple | iPhone 6 | Normal program | 4.2mm | 2017:07:20 18:50:12
아두이노를 두개 준비해서 보낸 신호를 확인해봐도 좋다.
먼저 적외선 LED 를 아두이노에 연결는데, 타이머를 사용해서 핀이 정해져있다.
Uno, Nano 등의 보드의 경우 PIN 3 을 사용하면 된다.
연결 후 스케치를 업로드 해보면 sendRaw 함수로는 여전히 작동을 안하는데..
28bit 를 long 으로 만들어서 irsend.sendLG 함수를 이용하면 된다.
다만 내가 쓴 위 적외선 송수신 킷의 경우, 신호가 많이 약해서 상당히 가까이,
약 30cm 거리에서 작동해서 처음에 안되는 줄 알았다..
앞으로 코드가 많이 수정되겠지만, 이 단계까지의 나의 코드는 아래와 같다.
'IoT' 카테고리의 다른 글
RPi에 Home Assistant 설치하기 (+HomeBridge) (0) | 2020.08.11 |
---|---|
도어락 제어하기 1탄 (하지만 2탄은 영원히 미정) (11) | 2017.11.12 |
IoT 전등 스위치를 직접 만들어보기 (아두이노, BLE, HomeKit) 3탄 (7) | 2017.08.24 |
아두이노로 에어컨 제어하기 (IR, HomeKit) 1탄 (0) | 2017.07.20 |
IoT 전등 스위치를 직접 만들어보기 (아두이노, BLE, HomeKit) 2탄 (4) | 2017.07.08 |
IoT 전등 스위치를 직접 만들어보기 (아두이노, BLE, HomeKit) 1탄 (6) | 2017.07.08 |
댓글을 달아 주세요