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

Alexa 및 Arduino IoT Cloud를 사용하여 TV 전체 제어

구성품 및 소모품

Arduino Nano 33 IoT
× 1
저항 330옴
× 1
IR 수신기(일반)
ex. VS1838B
× 1
IR 송신기(일반)
× 1
점퍼 와이어(일반)
× 1
브레드보드(일반)
× 1

앱 및 온라인 서비스

Arduino 웹 편집기
Arduino IoT 클라우드
Arduino Amazon Alexa 공식 Arduino 기술

이 프로젝트 정보

참고:이 튜토리얼은 오래되었을 수 있습니다. 여기 최신 버전의 경우

소개:Arduino IoT 클라우드

아두이노 IoT 클라우드는 누구나 손쉽게 IoT 커넥티드 객체를 구축할 수 있는 플랫폼입니다. Alexa를 사용하여 TV를 제어하기 위해 공식 Arduino Alexa Skill도 사용할 것입니다.

Arduino IoT Cloud를 처음 사용하는 경우 먼저 개요를 제공하고 지원되는 보드 중 하나인 IoT Cloud Things속성 승선하세요.

파트 1:TV 세트를 제어하는 ​​방법

모든 종류의 텔레비전을 제어하는 ​​가장 쉬운 방법은 마치 우리가 원격 적외선 컨트롤러인 것처럼 행동하는 것입니다. 그렇게 하려면 경청해야 합니다. 리모컨이 보낼 신호에 대해 데이터를 캡처하고 Arduino 보드로 모방합니다. 회로가 조립되면 이 스케치를 보드에 업로드합니다. 원격 버튼 누름에 의해 생성된 IR 신호 버스트를 부호 없는 정수 배열로 변환합니다. 리모컨이 Arduino IR 수신기를 가리키도록 합시다. 다음 버튼을 구축하고 누릅니다.

<울>
  • 전원/대기
  • <울>
  • 1에서 9까지의 채널
  • <울>
  • 볼륨 업
  • <울>
  • 볼륨 낮추기
  • <울>
  • 음소거
  • <울>
  • 채널 올리기
  • <울>
  • 채널 다운
  • 직렬 모니터를 통해 오는 값을 볼 수 있습니다. , rawData로 보고됨 . 지금은 텍스트 파일에 기록하고 각 목록에 고유한 배열 이름(chan1 , chan2 등등). 다음 값은 참고용이며 삼성 TV 리모컨에서 생성됩니다.

    CHANNEL 1 unsigned int chan1[67] ={4450,4500, 550,1700, 500,1700, 550,1700, 550,550, 50,50,50,50,50,600,500,600,0550, 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};CHANNEL 2unsigned int chan2[67] ={4500,4500, 550,1700,50,50,500,1700,550,1700,550,500,1700,5505 1700, 550,1700, 500,1700, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,600, 550,1700, 500,600, 550,550, 550,600, 500,600, 550,550, 550,650, 450,1700, 550,600, 500 ,1700, 550,1700, 500,1700, 550,1700, 550,1700, 500};CHANNEL 3unsigned int chan3[67] ,50,0,50,0,50,0,500,500,4500,500,1700,0500,1700,0550,500 , 550,600, 500,600, 550,550, 550,1700, 500,1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,600, 550,550, 550,550, 550,600, 550,550, 550 ,1700, 500 ,600, 550,550, 550,1700, 550,1650, 550,1700, 550,1700, 500,1700, 600};CHANNEL 4unsigned int chan4[67] ={4050,504 1700, 550,600, 500,600, 550,550, 600,550, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,600, 500,600, 550,550은 , 550,600, 500,1700, 550,1700, 550,1700, 500,600, 550,1700, 500,1700, 550,1700, 550,1700, 500}; 채널 INT chan5 [67] ={4500,4500, 500,1700, 550,1700, 550,1700, 550,550, 550,550, 550,550, 600,550, 550,550, 550,1700, 550,1650, 550,1700, 550,550, 550,600을 5unsigned , 500,600, 550,550, 550,600, 500,1700, 550,600, 500,600, 550,1700, 500,600, 550,550, 550,600, 550,550, 550,550, 550,1700, 550,1700, 500,600, 550,1700, 500,1700, 550,1700는 , 550,1700, 500}; 채널 INT chan6 [67] ={4500,4500, 550,1650, 550,1700, 550,1700, 500,600, 550,550, 550,600, 500,600, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 600,550을 6unsigned , 500,600, 550,550, 600,550, 550,550, 550,1700, 500,600, 550,1700, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,600, 550,1700, 500,600, 550,1650, 600,1650, 550,1700는 , 550,1650, 600}; 채널 INT chan7 [67] ={4500,4500, 550,1700, 500,1700, 550,1750, 500,550, 550,600, 500,650, 500,550, 550,550, 550,1750, 500,1700, 500,1700, 550,650, 450,650을 7unsigned , 500,550, 550,600, 500,650, 500,550, 550,600, 500,1700, 550,1750, 500,600, 500,550, 550,600, 500,650, 500,1750, 450,1700, 550,600, 500,650, 500,1700, 500,1700, 550,1750는 , 500,1700, 500}; 채널 INT chan8 [67] ={4450,4550, 500,1700, 550,1700, 550,1650, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 550,600을 8unsigned , 500,600, 550,550, 550,600, 500,1700, 550,600, 500,1700, 550,1700, 500,600, 550,550, 550,650, 450,600, 550,550, 550,1700, 550,550, 550,600, 500,1700, 550,1700, 550,1700는 , 500,1700, 550}; 채널 INT chan9 [67] ={4450,4500, 550,1700, 550,1700, 500,1700, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,1700, 500,600, 550,550을 9unsigned , 550,600, 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,1700, 500,600, 550,550, 550,550, 550,600, 500,1700, 550,600, 500,600, 550,550, 550,1700, 550,1700, 500,1700는 , 550,1700, 550}; VOLUME는 INT volUp [67] ={4500,4500, 550,1700, 500,1750, 500,1700, 550,600, 500,600, 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,1700, 500,650, 450,600을 UPunsigned , 550,600, 500,650, 450,650, 500,1700, 500,1750, 500,1750, 500,550, 550,600, 500,650, 500,550, 550,600, 500,650, 500,600, 500,600, 500,1700, 550,1750, 450,1750, 500,1700는 , 550,1700, 500}; VOLUME는 INT volDown [67] ={4450,4550, 500,1700, 550,1700, 550,1650, 550,600, 550,550, 550,600, 500,600, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 550,600을 DOWNunsigned , 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,600, 500,1700, 550,600, 500,600, 500,600, 550,550, 550,600, 500,650, 500,1700, 500,650, 500,1700, 500,1750, 500,1700는 , 550,1700, 500}; CHANNEL UPunsigned는 chanUp [67] ={4500,4450, 550,1700, 550,1650, 550,1700, 550,550, 550,600, 550,550, 550,550, 600,550, 550,1650, 550,1700, 550,1650, 600,550, 550,550에서 INT , 550,600, 500,600, 550,550, 550,550, 550,1700, 550,550, 600,550, 550,1650, 550,600, 550,550, 550,550, 550,1700, 550,550, 550,1700, 550,1700, 550,550, 550,1650, 600,1650는 , 550,1700, 550}; CHANNEL DOWNunsigned는 chanDown [67] ={4500,4450, 600,1650, 550,1700, 550,1650, 550,600, 550,550, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 550,600에서 INT , 550,550, 550,550, 550,550, 600,550, 550,550, 550,600, 500,600, 550,1650, 600,550, 550,550, 550,550, 600,1650, 550,1700, 500,1700, 600,1650, 550,550, 600,1650, 550,1700는 , 500,1700, 550}; 

    2부:Arduino IoT 클라우드

    기본 Arduino IoT Cloud 에서 페이지, 우리는 새로운 사물을 만들 것입니다 의미 있는 이름을 지정합니다. TVRemoteController라고 부르겠습니다. . 그런 다음 사용할 보드를 선택합니다. 이 튜토리얼에서는 Arduino Nano 33 IoT를 사용했지만, 호환되는 다른 보드가 있는 경우에도 괜찮습니다. 핀아웃과 IR 라이브러리의 동작이 변경될 수 있다는 점을 염두에 두십시오. 이 시점에서 보드가 표시되지 않으면 시작하기를 건너뛰었을 수 있습니다. 위에서 언급한 절차가 있는 경우 해당 절차를 다시 수행하십시오.

    완료되면 하나의 속성을 추가합니다. 우리의 사물에 , 그것은 우리의 TV 세트를 나타냅니다. 스마트 홈 아래 카테고리에서 "TV"를 속성 유형으로 선택하고 "읽기 및 쓰기"로 설정하고 "업데이트"에서 "값이 변경될 때"를 선택합니다.

    다음은 속성입니다. 이 시점에서 사물의 보기는 다음과 같아야 합니다.

    3부:Arduino 웹 편집기

    "EDIT SKETCH" 버튼을 클릭하면 Web Editor로 이동하여 IoT Cloud에서 자동으로 생성된 Sketch에 사용자 지정 코드를 추가할 수 있습니다.

    가장 먼저 포함해야 할 것은 Ken Shirriff의 IR Remote 라이브러리입니다.

    #include  

    그런 다음 채널에 대해 하나의 2차원 배열을 설정하고 필요한 명령에 대해 6개의 배열을 설정해야 합니다. 기억하신다면 1부에서 이제 배열을 채우는 데 사용할 일부 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] ={...}; 

    그런 다음 IR 라이브러리와 필요한 주파수를 설정하겠습니다(이런 종류의 응용 프로그램의 경우 항상 38KHz임).

    IRsend irsend; const int 주파수 =38; 

    IR 명령을 보내고 내장 LED를 깜박이는 기능도 필요합니다(이 단계에서는 주로 디버깅 목적). 사용되는 지연 값은 TV 제조사와 모델에 따라 다르므로 예상대로 작동하지 않는 경우(잘못된 명령 또는 수신된 명령 없음) 자유롭게 조정할 수 있습니다.

    void sendIR(const unsigned int buf[]) { digitalWrite(LED_BUILTIN, HIGH); irsend.sendRaw(buf, 67, 빈도); 지연(300); digitalWrite(LED_BUILTIN, LOW);} 

    마지막 단계는 생성된 콜백 onTvChange()를 완료하는 것입니다. TV 속성이 Alexa 명령으로 변경될 때 IR 명령을 보내기 위해 일부 사용자 지정 코드를 사용합니다. 예를 들어 볼륨을 높이면 가상으로 볼륨 업 버튼을 눌러야 합니다. 채널이 7로 설정되어 있으면 채널 7 버튼에 대한 시퀀스를 보내야 하는 식입니다.

    void onTvChange() { Serial.println("=================="); Serial.println("스위치:"+String(tv.getSwitch())); Serial.println("볼륨:"+String(tv.getVolume())); Serial.println("채널:"+String(tv.getChannel())); Serial.println("음소거:"+String(tv.getMute())); Serial.println("=================="); if (첫 번째){ prevSwitch =tv.getSwitch(); prevVolume =tv.getVolume(); prevChannel =tv.getChannel(); prevMute =tv.getMute(); 첫 번째 =거짓; 반품; } // 볼륨 변경 if (tv.getVolume()> prevVolume) { tv.setMute(false); prevMute =거짓; for (int k =prevVolume + 1; k<=tv.getVolume(); k++) { sendIR(volUp); Serial.println("요청한 볼륨:"+String(tv.getVolume())+" 설정:"+String(k)); } 이전 볼륨 =tv.getVolume(); } else if (tv.getVolume() =tv.getVolume(); k--) { sendIR(volDown); Serial.println("볼륨 변경됨:"+String(tv.getVolume())+" 설정:"+String(k)); } 이전 볼륨 =tv.getVolume(); } // 음소거 변경 if (tv.getMute() !=prevMute &&tv.getMute()) { prevMute =tv.getMute(); sendIR(음소거); Serial.println("음소거 변경됨:"+String(tv.getMute())); } else if (tv.getMute() !=prevMute &&!tv.getMute()) { prevMute =tv.getMute(); sendIR(음소거); Serial.println("음소거 변경됨:"+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(chanDown); Serial.println("채널 요청:"+String(newChannel)+" 설정:"+String(ch)); } } } prevChannel =newChannel; Serial.println("채널 변경:"+String(tv.getChannel())); } // On/Off 변경 if (tv.getSwitch() !=prevSwitch) { prevSwitch =tv.getSwitch(); if (tv.getSwitch()) { sendIR(chan[6]); } else { sendIR(온오프); } Serial.println("스위치 변경:"+String(tv.getSwitch())); } 

    4부:아마존 알렉사

    이제 Amazon Alexa 앱이 필요합니다. Apple App Store 또는 Google Play Store에서 다운로드할 수 있습니다. 설치가 완료되면 기존 계정으로 로그인하거나 새 계정을 만드십시오.

    Arduino Alexa Skill을 설치하고 TV에 액세스하고 제어하도록 구성하는 데 필요한 단계를 살펴보겠습니다. 필요한 모든 단계를 보려면 아래 이미지 순서를 따르십시오.

    끝났습니다. 이제 TV에서 다음과 같이 음성으로 제어할 시간입니다.

    <울>
  • "Alexa, TV 볼륨을 높여줘."
  • <울>
  • "Alexa, TV 음소거" 또는 "Alexa, TV 음소거 해제"
  • <울>
  • "Alexa, TV의 다음 채널"
  • Alexa 및 IoT Cloud와 함께 즐거운 시간 보내세요. 질문이 있거나 이 프로젝트를 구축하는 경우 아래 의견에 알려주십시오.

    감사합니다.

    Arduino 팀

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    아두이노

    회로도


    제조공정

    1. 천장 선풍기에 Alexa 제어 기능을 사용하도록 설정
    2. ARDUINO를 사용하는 초음파 부상 기계
    3. Arduino, 1Sheeld 및 Android를 사용한 범용 원격 제어
    4. Arduino와 스마트폰을 사용한 DIY 전압계
    5. IoT를 사용한 심박수 모니터
    6. IoT를 사용하여 로봇 팔 원격 제어
    7. IOT - ESP8266, Arduino 및 초음파 센서를 사용하는 스마트 항아리
    8. Arduino Cloud로 집의 온도를 어디에서나 알 수 있습니다!
    9. Firmata 및 Xbox One 컨트롤러를 사용하여 Arduino Rover 제어
    10. Arduino 가습기 제어