아두이노를 사용한 에어콘 자동 조절기 만들기 (스마트 홈, 스마트 오피스)

Poin2 Lab.과 같이 조그만 사무실에서는 애매하게 더운 날에나, 가끔 에어콘이 너무 빵빵하게 나와서 추운 날에나, 누군가 나서서 에어콘을 조절하기가 눈치가 보일 때가 있습니다. 나만 더운가.. 나만 추운건가 눈치만 보며 다른 사람이 뭔가 조치를 취해주길 바라지만 아마도 다들 같은 마음이겠죠. 이럴 때 해답은 단 하나 입니다. 기계에게 시키면 되죠.

준비물:
Arduino UNO x1
적외선 Receiver IC x1 (포인투랩 사무실과 같은 삼성 기종을 쓴다면 아마 없어도 될거에요.)
적외선 Transmitter LED x1
조도 센서 5516LDR x1
온도 LM35 x1
10k 저항 x1
브레드보드 x1 와 점퍼 케이블 몇개
에어콘 리모콘
20150609_1416562
20150609_1416433

전체 프로세스는 간단하며 요약하자면 다음과 같습니다. 첫째로 에어콘의 리모콘을 사용해서 IR 수신기를 향해 원하는 버튼을 조작 후 리모콘에서 송신하는 신호를 기록합니다. 그리고 그 기록한 정보를 가지고 주변의 온도와 밝기에 따라 에어콘이 여러가지 동작을 하도록 프로그래밍 해주면 됩니다. 아두이노를 사용하여 적외선 신호를 읽어들이는 방법과 코드는 이 블로그에서 참조하였습니다. “How to control your TV with an Arduino” on Instructables.com, 저자 Wally_Z http://www.instructables.com/id/How-to-control-your-TV-with-an-Arduino/. 필요한 핵심 정보는 해당 블로그에서 가져왔고 자동 조절기를 만들면서 얻은 여러가지 팁들을 함께 써드리겠습니다.

하드웨어 연결
HWwiring

회로도
Schematics

제작 단계

1. IR Receiver IC의 Output을 아두이노의 디지털핀 2번에 연결합니다. 다른 센서들은 아직 부착하지 않아도 무방합니다.

2. Wally_Z의 가이드에서 IR_RECIEVE.pde 파일을 다운받아 아두이노 프로그램에서 열고 수정 없이 보드로 업로드 합니다.

3. 시리얼 모니터를 열고 원하는 에어콘의 리모콘으로 원하는 버튼들을 IR 수신부를 향해 눌러줍니다. 버튼을 누를 때 마다 30~40줄의 코드가 표시되게 됩니다.
* 포인투랩 사무실에 있는 삼성 에어콘의 경우 리모콘 자체에도 전원 On/Off가 있어 리모콘이 켜져있을 때의 IR 신호와 꺼져있을 때의 IR 신호가 다릅니다. 같은 버튼을 누르더라도 에어콘을 켤 때, 끌 때의 신호가 다르다는 뜻이니 참고해서 해당 버튼의 코드를 기록해주세요.

4. 버튼을 누를 때 나오는 코드들을 각각의 기능에 따라 메모장에 저장해줍니다. (예: 전원 On, 온도 Up, 온도 Down, 전원 Off) 제가 기록한 코드는 다음과 같았습니다: ACControl.txt

5. 이번 스텝이 아마 가장 귀찮은 부분일텐데요, Wally_Z의 가이드에서 IR_SEND.pde 파일을 받아서 코드 아래쪽에 각각의 기능을 정의 해주고 4번에서 저장한 숫자들을 넣어줍니다. 제 코드에는 TurnOn(), TurnOff(), TempUp(), TempDown() 4가지 기능을 구현하였습니다.

6. 각각의 기능을 코드로 구현하였으면 나머지 하드웨어를 조립하여 줍니다. IR 수신 IC는 제거하여도 무방합니다. 하드웨어 셋업이 끝나면 여러 케이스에 대한 테스트를 통해 원하는 온도와 조도를 맞춰주어야 합니다. 저는 다음과 같이 시험해보았는데 비슷하게 하시면 될 것 같네요.
– 에어콘이 꺼진 상태에서 사무실이 더워질 때 까지 기다립니다. 에어콘을 정말 켜고 싶어질 때 쯤 아두이노의 시리얼 모니터를 통해 온도를 기록합니다. Input level이 5V이기 때문에 온도는 약 0.4~0.5도 간격으로기록이 되게 되는데요, 저는 28.9를 에어콘을 켜는 온도로 정하였습니다.
– 에어콘이 켜진 상태에서 이번에는 에어콘을 끄고싶을 정도로 추워졌을 때의 온도를 기록합니다. 저는 23.7도로 설정하였습니다.
– 이번에는 주변 밝기를 측정하는데요, 이유는 퇴근시간 즈음이 되면 자동으로 에어콘이 꺼지고 Sleep 모드로 들어가게 함입니다. 퇴근시간 즈음이 되었을 때 사무실의 불을 끄고 Analog 3번핀의 수치를 확인합니다. 저는 360이 나와서 360보다 높은 수치에서는 (수치가 높을 수록 어두움) 에어콘을 끄고 15분마다 다시 밝기를 측정하도록 설정하였습니다.
– 주변이 완전 어두워졌을 때에도 밝기를 측정하여 저는 700 이상에서는 한시간 마다 밝기를 측정하도록 설정하였습니다.

7. 위의 단계에서 측정한 숫자들을 기반으로 제 코드를 수정합니다. 5번 단계의 IR_Send에서 정의한 기능들을 제 코드 아래에 붙이고 이런 저런 수정을 해주면 됩니다.
Download: AC_Control.ino

8. 코드 수정이 완료되면 아두이노에 업로드하고 IR 송신부가 가려지지 않게하여 에어콘 아래 어딘가에 둡니다.
20150609_1419082

9. 완성입니다! 사무실이 조금 더 똑똑해진 것 같나요?

오늘은 여기까지 입니다. 질문이나 코멘트 남겨주세요!

18 thoughts on “아두이노를 사용한 에어콘 자동 조절기 만들기 (스마트 홈, 스마트 오피스)

  1. 장은정 Reply

    안녕하세요 포인투랩님.
    저는 컴퓨터공학과에 1학년과정을 막 마친 학부생입니다.
    제가 포인투랩님의 아두이노 에어콘 자동 조절기를 참고한 작품을 방학동안 만들고자 하는데,
    리모콘을 통한 코드 수신부분에 대해 해결되지 않는 점이 있어서 질문을 드리려고 합니다.
    기존의 rc-5와 같은 리모콘 코드를 받아오는 것은 성공했지만,
    삼성 리모콘으로 코드를 받아오려고 했을때 코드를 받지 못하는 현상이 계속 지속되고 있습니다.
    검색을 통해 삼성 리모콘이 흔히 아두이노 키트에 들어있는 리모콘들과 코드가 다르기 때문에 되지 않는 사실을 알았지만, 다른 라이브러리들을 추가하거나 코드를 첨가해도 삼성리모콘의 코드를 받아오지 못하고 있습니다.
    아두이노에 대한 지식이 부족하다고 생각되어 찾아보는데, 삼성 리모콘 신호와 관련하여 찾아보아도 적절한 해결책을 발견하지 못했습니다.
    혹시 포인투랩님께서는 어떤 식으로 코드를 받아 오셨는지 설명해 주실 수 있으신가요?
    긴 글 읽어주셔서 감사합니다.

    • YC Post authorReply

      안녕하세요? 저도 다른 프로젝트를 진행해 보니 이렇게 IR신호를 직접 입력받아 재전송하면 제조업체마다도 방식이 다르고 동작이 불안정할 때가 있더라구요. 혹시 어느 기기를 조정하려 하시나요? 아래 글 참조하시면 IRRemote 라이브러리를 사용하여 간단하게 코딩하실 수도 있습니다. 더 자세한 문의 사항 있으시면 yc.chang@poin2.com 으로 메일 주시면 같이 고민해보도록 할게요.

      http://blog.poin2.com/2015/11/%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EA%B0%84%EB%8B%A8%ED%95%9C-tv-%EB%A6%AC%EB%AA%A8%EC%BD%98/

      리모콘 소스 모음: http://lirc.sourceforge.net/remotes/

      • 장은정 Reply

        우선 답변해 주셔서 진심으로 감사드립니다!
        저희도 천장형 냉난방기를 조절하려고 합니다. 천장형 냉난방기의 코드를 받아오려고 하고있습니다… 저희가 사용하는 리모콘은 삼성 db93-11115f 모델입니다. 리모콘 소스모음에도 아쉽게 저희가 쓰는 모델이 없습니다. ㅠ.ㅠ 학교의 냉난방기를 사용하여 만드려고 하고 있는데 제가 생각하기에는 천장형 에어컨의 모델은 포인투랩님의 사무실의 에어컨과 동일한 모델처럼 보입니다. 리모콘의 신호를 받아오려면 어떻게 해야 할까요..?

        • YC Post authorReply

          기존 키트의 리모콘은 위에 있는 IR_Recieve.pde와 해당 회로 연결을 통해서 시리얼모니터로 값을 잘 읽을 수 있다는 말씀이시죠? 그렇다면 해당 pde 파일에 있는 resolution 값을 한번 이런 저런 값으로 수정해보시기 바랍니다. (Maxpulse도 수정해봐도 무방하지만 큰 도움이 될 것 같진 않네요)

          #define MAXPULSE 65000
          #define RESOLUTION 20

          이 부분의 숫자를 바꿔서 테스트 해보면 됩니다.

  2. Reply

    뭐 코딩의 ㅋ, 프로그래밍의 ㅍ짜도 모르는 초짜입니다! 요즘 너무 더워서 에어콘을 틀면서 에어콘에 온도를 측정하는 버튼이 있는데도 왜 온도에 맞춰서 틀어지고 꺼지는 프로그래밍을 안 해서 잘때 자꾸 춥게 자야하고, 덥게 자야하는지 생각하고 있었는데 실제로 만들 수 있다니 정말 신기하네요! 코딩을 배워나가다 보면 쓰신 글을 더 이해할 수 있고 제가 만들 수도 있을까요?

    • YC Post authorReply

      간단한 하드웨어 지식과 코딩에 대한 이해만 있으시면 쉽게 만드실 수 있을거에요. 혹시 도움이 필요하시면 알려주세요 🙂

  3. nexussord Reply

    안녕하세요 글 잘읽었습니다. 글을 통해서 아두이노로 IR 송수신기를 설치하여 데이터를 주고받는걸 하려구 테스트를 위해 아두이노 리모콘으로 신호를 쏘아서 버튼을 누를 때 나오는 코드를 수신받았는데요, 같은 버튼을 누름에도 불구하고 매번 수신되는 코드값이 달라서요 ㅠㅠ YC님께서 측정하실때는 코드가 항상 일정하셨나요? 아두이노 리모컨이라서 이런건가요? 해결은 어떻게 해야할까요 ㅠ

    • YC Post authorReply

      안녕하세요. 제가 IR신호를 측정했던 이유는 삼성 리모콘이 보내는 신호 값들을 인터넷에서 찾을 수가 없어서 였습니다 ^^; 만약 아두이노 리모콘을 사용하신다면 각 버튼에 대한 송신 값만 잘 찾아보시면 될 것 같네요. 만약 스타터킷에 포함된 리모콘을 사용하신다면 일부 키 값은 다음 링크에 나와있네요.

      http://wiki.epalsite.com/index.php?title=File:Remote_used_Key.jpg

      • nexussord Reply

        아아 빠른답변 정말 감사합니다 사실 저도 최종 목표는 에어컨 신호를 가져오는건데요,
        에어컨 리모콘의 IR신호값은 같은값으로 일정하게 받아와지나요? 제가 지금 해커톤 대회중인데
        아직 에어컨 리모콘을 못받아와서 아두이노 리모콘으로 했는데 같은 버튼의 신호값이 항상 다르더라구요

        • YC Reply

          항상 일정하진 않더라구요 ^^ 결국 적외선 LED의 On/Off 타이밍을 측정하는것인데 아주 작은 단위로 오차가 있긴해요 ㅎㅎ

          • nexussord

            역시 그렇군요 빠른답변 정말 감사합니다 ㅎㅎ

          • YC Post author

            네 프로젝트 잘되시길 바랄게요 🙂

  4. 민석 Reply

    안녕하세요 글 정말 잘 봤습니다. 하지만 제가 정말 프로그래밍이나, 센서에 대해서 정말 전혀 몰라서 질문을 하고 싶습니다!!!ㅜㅜ
    대학교에서 센서가 달린 에어컨을 만들예정인데요
    제가 아두이노 센서를 안지도 며칠 되지도 않았고 거의 모릅니다…
    하고 싶은 장치를 먼저 설명해드리자면
    인체의 주변에 (블루투스, 적외선 등의) 원격 온도감지센서를 지니고 있습니다. 그리고 이 센서가 일정한 기준의 수치 이상을 기록하게되면은 에어컨에 부착된 원격 전원장치가 작동하여 에어컨의 전원을 작동시키는 센서를 설치하고 싶은데요… 제가 정말 이쪽에는 정말 거의 몰라서 정말 죄송하지만 사야될 물품이나 프로그램방법을 알 수 있을까요??ㅠㅠㅠ
    아두이노 사이트에서 보긴했지만 정말 하나도 모르겠더군요ㅜ
    부탁드립니다…..

  5. SH Reply

    안녕하세요! 1인1작을 하던 도중 흥미를 가지게 되어 에어컨 자동조절기를 시도하고 있는 학생입니다.
    IR수신기를 부착하고 시리얼 모니터에서 삼성 리모콘으로 ON/OFF와 UP/DOWN을 하였는데 ON/OFF값만 입력을 하고 UP/DOWN값을 입력받지못하고있습니다ㅠㅠ..혹시 어떤게 문제점인지 알 수 있나요?
    하드웨어 구현이미지를 보고 그대로 구현을 해놓았구요 아두이노우노는 BLUNO를 사용하고 있습니다. 또 혹시 센서값을 받아와서 입력하신 IR_SEND.pde 좀 볼 수 있을까요?..

  6. Pingback:[아두이노] – 혼자있는시간

  7. Seo Reply

    안녕하세요 . 아두이노 아주 잘 봤습니다. 정말 잘 만드셨네요~!

    동작하는 동영상은 없을까요??

코멘트 남기기