산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드

부품 및 소모품

아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드 Arduino Nano 33 IoT × 1
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드 저항 330Ω × 1
IR 수신기 (예: VS1838B) × 1
IR 송신기 (IR LED) × 1
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드 점퍼 와이어 × 1
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드 브레드보드 × 1

앱 및 온라인 서비스

아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드 Arduino Web Editor
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드 Arduino IoT Cloud
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드 Arduino Amazon Alexa 공식 스킬

프로젝트 소개

참고: 이 튜토리얼은 구버전일 수 있습니다. 최신 버전은 여기를 참조하세요.

1부: TV 제어 원리

TV를 제어하는 가장 쉬운 방법은 TV 리모컨인 척 흉내 내는 것입니다. 리모컨이 보내는 적외선(IR) 신호를 수신해 데이터를 캡처한 뒤, 아두이노로 재전송하면 됩니다. 회로 조립 후 아래 스케치를 업로드하고 시리얼 모니터를 여세요. 리모컨을 아두이노 IR 수신기에 향하게 하고 다음 버튼을 차례로 누르세요.

시리얼 모니터에 rawData 배열로 값이 출력됩니다. 메모장에 기록해 두고 각 배열에 이름(chan1, chan2 …)을 붙이세요. 아래 값은 삼성 TV 리모컨 예시일 뿐, 본인 리모컨으로 다시 캡처해야 합니다.

// 예시: 채널 1
unsigned int chan1[67] = {4450,4500, 550,1700, 500,1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,1700, 500,600, 500,600, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,600, 500,1700, 550,1700, 550,1700, 500,1700, 550,1700, 500};
// 채널 2~9, 볼륨 업/다운, 채널 업/다운, 전원, 음소거 배열도 동일하게 캡처

2부: 아두이노 IoT Cloud 설정

Arduino IoT Cloud 메인 페이지에서 새 Thing 생성 → 이름 TVRemoteController → 보드 선택(본 튜토리얼은 Nano 33 IoT, 다른 호환 보드도 가능, 핀아웃·IR 라이브러리 동작 다를 수 있음). 보드가 안 보이면 앞서 언급한 Getting Started 절차를 놓친 것 → 다시 수행.

Property 하나 추가: 카테고리 Smart Home → TV 타입 선택 → Read & Write → 업데이트 정책 When the value changes.

아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드

3부: 아두이노 웹 에디터에서 코드 작성

EDIT SKETCH 버튼 클릭 → 웹 에디터에서 IoT Cloud가 자동 생성한 스케치에 커스텀 코드 추가.

  1. IRremote 라이브러리 포함 (Ken Shirriff 作).
    #include <IRremote.h>
    
  2. 캡처한 IR 데이터를 배열로 정의.
    const unsigned int chan[9][67] = { {chan1}, {chan2}, {chan3}, {chan4}, {chan5}, {chan6}, {chan7}, {chan8}, {chan9} };
    const unsigned int volUp[67] = {...};
    const unsigned int volDown[67] = {...};
    const unsigned int chanUp[67] = {...};
    const unsigned int chanDown[67] = {...};
    const unsigned int onoff[67] = {...};
    const unsigned int mute[67] = {...};
    
  3. IR 송신 객체와 주파수(38kHz) 설정.
    IRsend irsend;
    const int freq = 38;
    
  4. IR 전송 헬퍼 함수(내장 LED 깜빡임으로 디버깅). 딜레이 값은 TV 모델마다 다를 수 있으니 조정 필요.
    void sendIR(const unsigned int buf[]) {
      digitalWrite(LED_BUILTIN, HIGH);
      irsend.sendRaw(buf, 67, freq);
      delay(300);
      digitalWrite(LED_BUILTIN, LOW);
    }
    
  5. IoT Cloud가 생성한 onTvChange() 콜백 완성. 알렉사 명령으로 TV 속성 변경 시 해당 IR 명령 전송.
    void onTvChange() {
      Serial.println("==================");
      Serial.println("Switch:" + String(tv.getSwitch()));
      Serial.println("Volume:" + String(tv.getVolume()));
      Serial.println("Channel:" + String(tv.getChannel()));
      Serial.println("Mute:" + String(tv.getMute()));
      Serial.println("==================");
      if (first) {
        prevSwitch = tv.getSwitch();
        prevVolume = tv.getVolume();
        prevChannel = tv.getChannel();
        prevMute = tv.getMute();
        first = false;
        return;
      }
      // 볼륨 변경
      if (tv.getVolume() > prevVolume) {
        tv.setMute(false); prevMute = false;
        for (int k = prevVolume + 1; k <= tv.getVolume(); k++) {
          sendIR(volUp);
          Serial.println("Volume requested:" + String(tv.getVolume()) + " Set:" + String(k));
        }
        prevVolume = tv.getVolume();
      } else if (tv.getVolume() < prevVolume) {
        tv.setMute(false); prevMute = false;
        for (int k = prevVolume - 1; k >= tv.getVolume(); k--) {
          sendIR(volDown);
          Serial.println("Volume changed:" + String(tv.getVolume()) + " Set:" + String(k));
        }
        prevVolume = tv.getVolume();
      }
      // 음소거 변경
      if (tv.getMute() != prevMute && tv.getMute()) {
        prevMute = tv.getMute(); sendIR(mute);
        Serial.println("Mute changed:" + String(tv.getMute()));
      } else if (tv.getMute() != prevMute && !tv.getMute()) {
        prevMute = tv.getMute(); sendIR(mute);
        Serial.println("Mute changed:" + String(tv.getMute()));
      }
      // 채널 변경
      if (tv.getChannel() != prevChannel) {
        int newChannel = tv.getChannel();
        if (newChannel > 0 && newChannel < 10) {
          sendIR(chan[newChannel - 1]);
        } else if (newChannel > 9) {
          if (newChannel > prevChannel) {
            for (int ch = prevChannel; ch < newChannel; ch++) {
              sendIR(chanUp);
              Serial.println("Chan requested:" + String(newChannel) + " Set:" + String(ch));
            }
          } else if (newChannel < prevChannel) {
            for (int ch = prevChannel; ch > newChannel; ch--) {
              sendIR(chanDown);
              Serial.println("Chan requested:" + String(newChannel) + " Set:" + String(ch));
            }
          }
        }
        prevChannel = newChannel;
        Serial.println("Channel changed:" + String(tv.getChannel()));
      }
      // 전원 변경
      if (tv.getSwitch() != prevSwitch) {
        prevSwitch = tv.getSwitch();
        if (tv.getSwitch()) sendIR(chan[6]); // 채널 7을 전원 토글로 사용(예시)
        else sendIR(onoff);
        Serial.println("Switch changed:" + String(tv.getSwitch()));
      }
    }
    

4부: 아마존 알렉사 설정

Amazon Alexa 앱 설치(앱스토어/플레이스토어) → 로그인/계정 생성. 아래 이미지 순서대로 Arduino Alexa Skill 설치 및 구성.

아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드
아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드

완료! 이제 음성으로 TV 제어 가능:

알렉사와 IoT Cloud로 즐거운 시간 보내세요. 질문이나 빌드 후기는 댓글로 남겨 주세요.

감사합니다,
아두이노 팀

코드

Arduino

(전체 코드는 위 3부에서 설명한 스니펫들을 조합해 구성하세요.)

회로도

아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드

제조공정

  1. 알렉사(Alexa)로 천장 선풍기 제어하기 - 단계별 가이드
  2. 아두이노로 초음파 부양 장치 만들기: 단계별 가이드
  3. 아두이노, 1Sheeld, IR 제어로 만능 안드로이드 리모컨 만들기
  4. 아두이노와 스마트폰으로 만드는 스마트 전압계 – 초간단 DIY 프로젝트
  5. 아두이노와 MAX30100으로 만드는 실시간 IoT 심박수 모니터
  6. 원격 IoT 제어 커스텀 로봇 팔: 아두이노 MKR1000과 심링크(Simulink) 활용
  7. 스마트 IoT 자 제작: ESP8266, 아두이노 & 초음파 센서로 실시간 모니터링
  8. 아두이노 클라우드 연동으로 어디서든 집 온도 모니터링하기
  9. 펌마타(Firmata)와 엑스박스 원 게임패드로 아두이노 로버 원활하게 제어하기
  10. 아두이노 릴레이 제어 가습기 자동화 – 고전압 안전 설계