Share this post!
Share on FacebookShare on Google+Tweet about this on TwitterEmail this to someone

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. 완성입니다! 사무실이 조금 더 똑똑해진 것 같나요?

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

아두이노를 사용한 에어콘 자동 조절기 만들기 (스마트 홈, 스마트 오피스)
Share this post!
Share on FacebookShare on Google+Tweet about this on TwitterEmail this to someone
Tagged on:                     

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

  • January 5, 2016 at 4:49 pm
    Permalink

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

    Reply
    • January 5, 2016 at 5:05 pm
      Permalink

      안녕하세요? 저도 다른 프로젝트를 진행해 보니 이렇게 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
      • January 5, 2016 at 5:39 pm
        Permalink

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

        Reply
        • January 5, 2016 at 6:06 pm
          Permalink

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

          #define MAXPULSE 65000
          #define RESOLUTION 20

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

          Reply
  • August 3, 2016 at 12:28 am
    Permalink

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

    Reply
    • August 3, 2016 at 11:31 am
      Permalink

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

      Reply
  • August 22, 2016 at 11:20 am
    Permalink

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

    Reply
    • August 22, 2016 at 11:33 am
      Permalink

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

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

      Reply
      • August 22, 2016 at 12:55 pm
        Permalink

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

        Reply
        • August 22, 2016 at 1:05 pm
          Permalink

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

          Reply
          • August 22, 2016 at 1:52 pm
            Permalink

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

          • August 22, 2016 at 1:53 pm
            Permalink

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

  • October 9, 2016 at 2:53 pm
    Permalink

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

    Reply
  • November 22, 2016 at 11:30 pm
    Permalink

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

    Reply
  • Pingback: [아두이노] – 혼자있는시간

  • December 8, 2016 at 5:02 pm
    Permalink

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

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

    Reply
  • February 17, 2017 at 12:01 am
    Permalink

    Vai tiešām ir nepiecieÅ¡ams noskaidrot kura skola tagad rullÄ“s, un kura nÄ“?! Vai tas ir interesanti, vai noderÄ«gi, ja zinu, ka kādam pret kaut ko ir alerÄ£ija? Kā man tas var palÄ«dzÄ“t, ja dzirdu, ka Lietuvā ir labāk?Jā, Lietuvā vienmÄ“r ir bijis citādi, bet vai labāk? Un tas, ka fotogrāfijas nodaļā ir izmaiņas nekādi negarantÄ“, ka tās ir labas. 0  0

    Reply
  • June 26, 2017 at 7:48 pm
    Permalink

    안녕하세요 IR센서로 에어컨들 IR신호를 따보고 있는데, IR값들이 잘 출력되는 리모컨도 있는 반면 버튼을 한번만 눌러도 FFFFFFF 값이 출력되는 경우가 발생했는데, 찾아보니 IR신호가 반복입력되는 경우에 해당
    값이 출력된다는 말이 있네요. 버튼을 여러번 누른게 아니라 딱 한번만 눌렀는데 계속해서 FFFFFFF값이
    출력됩니다. 이 경우에는 IR신호를 캡쳐해서 에어컨 제어가 불가능 할까요? 기종은 SAMSUNG 에어컨입니다.

    Reply
    • June 26, 2017 at 7:52 pm
      Permalink

      안녕하세요. 해당 부분에 대해서는 저도 확답을 드리기가 쉽지않네요. 따온 코드를 직접 테스트해보시는 수 밖에 없을 것 같습니다 ^^;

      Reply
  • July 6, 2017 at 12:03 pm
    Permalink

    안녕하세요 YC님께서 작성하신 소스를 참고하고있습니다.
    현재 YC님과 같은 천정형 에어컨에 테스트를 진행중입니다.
    Dump없이 바로 작성해주신 TurnOff 코드 작동이 되는 것을 확인했습니다. 그러나 TurnOn 코드는 작동하지 않았습니다.(현재 2가지 기능으로 원격지에서 사용 가능할 것 같습니다.)
    그래서 기본적으로 IRemode의 IRrecvDubpV2에서는 FFFFFFFF(Sanyo)로 나오며 0 bit로 사용하기 어려워 보여 YC님께서 작성하신(Wally_Z의 가이드에서 IR_RECIEVE.pde) 부분으로 디코딩이 필요해 보입니다.
    바로 디코딩이 가능할 것으로 보였으나 Ready to decode 메시지 이후에
    if ((highpulse >= MAXPULSE) && (currentpulse != 0)) {
    위 조건을 만족하지 않아 메시지 출력이 되지 않는것 같습니다.
    if ((lowpulse >= MAXPULSE) && (currentpulse != 0)) {
    첫 실행시에만 프린트 되는 것을 확인했습니다.

    위 답변에 아래와 같은 변수를 수정하라고 하셨습니다.
    구체 적인 범위 값에 대해 의견 듣고 싶습니다.
    #define MAXPULSE 65000
    #define RESOLUTION 20

    긴 글 읽어 주셔서 감사합니다.

    Reply
    • July 6, 2017 at 2:30 pm
      Permalink

      안녕하세요. 사실 저도 이 프로젝트를 진행한지 2년이 넘어 자세히 기억이 나진 않네요 ^^; 아래쪽의 두가지 변수에 대해서는 다음과 같이 정의가 되어있습니다.

      // the maximum pulse we’ll listen for – 65 milliseconds is a long time
      #define MAXPULSE 65000
      – Pulse를 듣는 시간을 정해주는 이 부분은 건드리지 않으셔도 될 것 같습니다.

      // what our timing resolution should be, larger is better as its more ‘precise’ – but too large and you wont get accurate timing
      #define RESOLUTION 20
      – 이부분은 다양한 숫자로 테스트를 해봐야할 것 같은데요 10-100 사이 정도면 적당할 것 같습니다.

      혹시 에어컨 모델명을 알고 계신가요?

      Reply
  • July 6, 2017 at 3:09 pm
    Permalink

    답변이 안달리네요 TT

    Reply
  • July 6, 2017 at 3:16 pm
    Permalink

    자세한 답변 감사합니다.
    제 에어컨 모델명은 삼성 AC100JN4PBH1 입니다.
    Wally_Z의 가이드에서 IR_RECIEVE.pde 파일로는 디코딩 메시지가 출력되지 않아서 …
    다음 라이브러리를 참조 중에 있습니다.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *