아두이노로 간단하게 삼성 에어컨 켜기

예전부터 에어컨을 자동으로 제어해 보고 싶다는 생각은 했었는데, 삼성 에어컨의 경우 리모콘 포맷이 복잡한 데다가 알려진 정보가 아예 없다시피 해서 손을 못 대고 있었다.

그러던 중 오늘 새벽에 잠이 깬 김에 코드를 해독해보고자 하는 마음이 생겨 새벽동안 노가다를 조금 뛰었는데, 알아낸 코드 정보는 다음과 같다.

먼저, 삼성 에어컨은 38kHz 캐리어를 사용하긴 하지만 독자 포맷이다. NEC도 아니고 뭣도 아니다.
세부사항은 다음과 같다.(리모콘의 모델명은 ARC-4AC이다.)

  • 시작 신호는 3000us On, 9000us Off를 통해 주어진다.
  • 각 0과 1비트는 다음과 같은 길이이다.
    • 비트 0의 경우 - 560us on, 560us off
    • 비트 1의 경우 - 560us on, 1600us off
  • 모든 데이터는 LSB first로 전송된다.

에어컨을 켜기 위해서는 56bit(7Byte), 끄기 위해서는 112bit(14Byte)가 필요한데, 켜기 위해 필요한 데이터의 테이블은 다음과 같다.

56:45 44:41 40:37 36:34 33:21 20:17 16 15:13 12:10 9:5 4:3 2:1
커스텀코드 체크섬   풍향   온도   풍속 모드   전원  

커스텀 코드의 경우 언제나 56:45는 1000 0000 0100으로 고정이다. 체크섬의 경우는 풍향, 온도, 풍속, 모드의 각 1을 합한 값에 따른 값을 가진다. (로직은 모르겠다)

풍향 + 온도 + 풍속 + 모드 체크섬
3 0111
4 1011
5 0011
6 1101
7 0101
8 1001
9 0001

풍향의 경우는 다음과 같다.

풍향 코드
상하 010
꺼짐 111

온도의 경우 16도를 기준으로 현재 설정된 온도의 차이값을 보낸다. (왜지?)

온도 코드
18 0100
19 1100
20 0010
21 1010
22 0110
23 1110
24 0001
25 1001
26 0101
27 1101
28 0011
29 1011
30 0111

풍속은 3단계로 조절할 수도 있고, 자동으로 둘 수도 있다.

풍속 코드
자동 000
010
001
101
터보 111
자연풍(자동) 011

모드는 다음과 같다.

모드 코드
자동 000
냉방 100
제습 010
송풍 110

전원의 경우 상태정보를 보내는 듯 한데, 다음과 같다.

전원 코드
ON시 11
OFF시 00

전원을 끄기 위해 112비트를 보낼 때도 처음 12비트는 위에서 다룬 것처럼 1000 0000 0100으로 동일하다.
하지만 이후의 정보는 시간과 관련되어 있는지 조금의 시간 간격을 두고 측정해본 결과 매번 값이 다르다.

AVR을 가지고 실험해본 결과 전원 ON/OFF는 위 코드 조합으로 정상적으로 작동하는 것을 확인했으나 시간 예약 등의 기능을 사용하기 위해서 조금 더 분석을 필요로 할 것 같다.

분석한 자료를 구글 드라이브에 올려 두었으니 필요하시다면 사용하시기 바랍니다.
Google Drive