Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Controle total de sua TV usando Alexa e Arduino IoT Cloud

Componentes e suprimentos

Arduino Nano 33 IoT
× 1
Resistor 330 ohm
× 1
Receptor IR (genérico)
ex. VS1838B
× 1
Transmissor IR (genérico)
× 1
Fios de jumpers (genérico)
× 1
Breadboard (genérico)
× 1

Aplicativos e serviços online

Arduino Web Editor
Arduino IoT Cloud
Arduino Amazon Alexa Official Arduino Skill

Sobre este projeto


Observação:este tutorial pode estar desatualizado, vá aqui para uma versão mais atual.





Introdução:Arduino IoT Cloud


Arduino IoT Cloud é uma plataforma que permite a qualquer pessoa construir objetos conectados à IoT com facilidade. Para controlar nossa TV usando o Alexa, também usaremos a habilidade oficial do Arduino Alexa.

Se você for novo no Arduino IoT Cloud, recomendamos primeiro dar uma olhada neste projeto introdutório, que lhe dará uma visão geral e o guiará pelo processo de configuração de uma das placas suportadas, IoT Cloud Things e Propriedades e colocá-lo a bordo.





Parte 1:como controlar um aparelho de TV


A maneira mais fácil de controlar qualquer tipo de televisão é agir como se fôssemos seu próprio controle remoto infravermelho. Para fazer isso, teremos que ouvir para os sinais que o remoto enviará, capture os dados e imite-os com nossa placa Arduino. Assim que o circuito estiver montado, faremos o upload deste esboço para nossa placa. Ele irá traduzir as rajadas de sinal IR geradas pelo pressionamento de botões remotos em uma matriz de inteiros sem sinal. Vamos apontar o controle remoto para o Arduino Receptor IR construímos e pressionamos os seguintes botões:
  • POTÊNCIA / ESPERA
  • CANAIS DE 1 A 9
  • AUMENTO DE VOLUME
  • DIMINUIR VOLUME
  • MUTE
  • ACIMA DE CANAIS
  • CANAL ABAIXO

Veremos os valores provenientes do Monitor Serial , relatado como rawData . Vamos anotá-los em um arquivo de texto por enquanto, e atribuir a cada lista seu próprio nome de array ( chan1 , chan2 e assim por diante). Os valores a seguir são apenas para referência e são gerados por um controle remoto de TV Samsung.
  CANAL 1 sem sinal 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}; CANAL 2 sem sinal int chan2 [67] ={4500,4500, 550,1700, 500,1700, 550,1700, 550,550, 550,550, 550.600, 500.600, 550.600, 500 , 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}; CANAL 3 sem sinal int chan3 [67] ={4500,4500, 500,1700, 550,1700, 550,1700, 500,600, 550,550 , 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}; CANAL 4 sem sinal int chan4 [67] ={4450,4450, 550,1700, 550,1700, 500 , 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}; CANAL 5 sem sinal 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 , 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}; CANAL 6 sem sinal 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 , 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}; CANAL 7 sem sinal 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 , 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}; CANAL 8 sem sinal 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 , 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}; CANAL 9 sem sinal 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 , 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 UPunsigned 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 , 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 DOWNunsigned 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 , 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 int 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 , 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 int 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 , 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};  





Parte 2:Arduino IoT Cloud


Da nuvem Arduino IoT principal página, vamos criar um novo Coisa e atribua a ele um nome significativo. Vamos chamá-lo de TVRemoteController . Em seguida, selecionaremos a placa que iremos usar. Para este tutorial usamos um Arduino Nano 33 IoT, mas se você tiver outra placa compatível também vai servir, apenas lembre-se que a pinagem e o comportamento da biblioteca IR podem mudar. Se neste ponto você não consegue ver o seu quadro, você pode ter pulado o Primeiros passos procedimento que mencionamos acima, se for esse o caso, volte por esse processo.

Uma vez feito isso, vamos adicionar uma Propriedade para nossa Coisa , ele representará nosso aparelho de TV. Na casa inteligente categoria, selecione "TV" como o tipo de propriedade, defina-o como "Leitura e gravação" e, em "Atualizar", selecione "Quando o valor mudar".

Aqui está o que as Propriedades visão de nossa coisa deve ser semelhante a este ponto:





Parte 3:Editor da Web do Arduino


Chegou a hora de clicar no botão "EDIT SKETCH", que nos levará ao Web Editor, onde podemos adicionar algum código personalizado ao Sketch gerado automaticamente pelo IoT Cloud.

A primeira coisa que temos que incluir é a biblioteca IR Remote, de Ken Shirriff.
  #include   

Em seguida, temos que configurar um array bidimensional para nossos canais e 6 arrays para os comandos de que precisamos. Se você se lembra, na Parte 1 capturamos alguns dados de infravermelho que agora usaremos para preencher nossos arrays
  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] ={...};  

Vamos então configurar a biblioteca IR e a frequência necessária (para este tipo de aplicação, sempre será 38KHz)
  IRsend irsend; const int freq =38;  

Também precisaremos de uma função para enviar comandos IR e piscar o LED embutido (neste estágio principalmente para fins de depuração). O valor de atraso usado dependerá da marca e do modelo de sua televisão, portanto, fique à vontade para ajustá-lo se as coisas não estiverem funcionando como esperado (comandos errados ou nenhum comando recebido).
  void sendIR (const unsigned int buf []) {digitalWrite (LED_BUILTIN, HIGH); irsend.sendRaw (buf, 67, freq); atraso (300); digitalWrite (LED_BUILTIN, LOW);}  

A etapa final é concluir o retorno de chamada gerado onTvChange () com algum código personalizado para enviar comandos IR quando a propriedade TV é alterada por comandos Alexa. Por exemplo, se o volume for aumentado, temos que virtualmente pressionar o botão Aumentar o volume, se o canal estiver configurado para 7, temos que enviar a sequência para o botão do canal 7 e assim por diante.
  void onTvChange () {Serial.println ("=================="); Serial.println ("Switch:" + String (tv.getSwitch ())); Serial.println ("Volume:" + String (tv.getVolume ())); Serial.println ("Canal:" + String (tv.getChannel ())); Serial.println ("Mudo:" + String (tv.getMute ())); Serial.println ("=================="); if (primeiro) {prevSwitch =tv.getSwitch (); prevVolume =tv.getVolume (); prevChannel =tv.getChannel (); prevMute =tv.getMute (); primeiro =falso; Retorna; } // Volume alterado if (tv.getVolume ()> prevVolume) {tv.setMute (false); prevMute =false; for (int k =prevVolume + 1; k <=tv.getVolume (); k ++) {sendIR (volUp); Serial.println ("Volume solicitado:" + String (tv.getVolume ()) + "Set:" + String (k)); } prevVolume =tv.getVolume (); } else if (tv.getVolume ()  =tv.getVolume (); k--) {sendIR (volDown); Serial.println ("Volume alterado:" + String (tv.getVolume ()) + "Set:" + String (k)); } prevVolume =tv.getVolume (); } // Mudo alterado if (tv.getMute ()! =PrevMute &&tv.getMute ()) {prevMute =tv.getMute (); sendIR (mudo); Serial.println ("Mudo alterado:" + String (tv.getMute ())); } else if (tv.getMute ()! =prevMute &&! tv.getMute ()) {prevMute =tv.getMute (); sendIR (mudo); Serial.println ("Mudo alterado:" + String (tv.getMute ())); } // Canal alterado 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 ("Chan solicitado:" + String (newChannel) + "Set:" + String (ch)); }}} prevChannel =newChannel; Serial.println ("Canal alterado:" + String (tv.getChannel ())); } // Ligado / Desligado alterado if (tv.getSwitch ()! =PrevSwitch) {prevSwitch =tv.getSwitch (); if (tv.getSwitch ()) {sendIR (chan [6]); } else {sendIR (onoff); } Serial.println ("Switch alterado:" + String (tv.getSwitch ())); }  





Parte 4:Amazon Alexa


Agora precisaremos do aplicativo Amazon Alexa que pode ser baixado da Apple App Store ou Google Play Store. Depois de instalado, faça login com sua conta existente ou crie uma nova.

Vamos seguir as etapas necessárias para instalar o Arduino Alexa Skill e configurá-lo para acessar e controlar nossa TV. Seguiremos a sequência de imagens abaixo para ver todas as etapas necessárias.

Terminamos, agora é hora de controlar a voz da nossa TV perguntando coisas como
  • ”Alexa, aumente o volume da TV.”
  • ”Alexa, ativar o som da TV" ou “Alexa, ativar o som da TV.”
  • ”Alexa, próximo canal na TV.”

Divirta-se jogando com Alexa e IoT Cloud. Se você tiver dúvidas e / ou construir este projeto, deixe-nos saber nos comentários abaixo.

Obrigada,

A equipe do Arduino

Código

Arduino

Esquemas


Processo de manufatura

  1. Habilite o controle Alexa para o seu ventilador de teto
  2. Máquina de LEVITAÇÃO ULTRASÔNICA Usando ARDUINO
  3. Controle remoto universal usando Arduino, 1Sheeld e Android
  4. Faça você mesmo voltímetro usando Arduino e Smartphone
  5. Monitor de freqüência cardíaca usando IoT
  6. Usando IoT para controlar remotamente um braço robótico
  7. IOT - Jar inteligente usando ESP8266, Arduino e sensor ultrassônico
  8. Conheça a temperatura de sua casa de qualquer lugar com a nuvem Arduino!
  9. Controle o Arduino Rover usando Firmata e o controlador do Xbox One
  10. Controle do umidificador Arduino