Se tratando de automação residencial e IoT há no mercado…
Jarvis – Controlando o seu Arduino por Comandos de Voz
O uso de assistente de voz se tornou algo bem comum nos últimos anos. O assistente virtual mais conhecido e mais antigo é a Siri, que está disponível em vários dispositivos comercializados pela Apple. Com o passar dos anos surgiram outros assistentes virtuais, tais como o Google Now (para Android), Alexa (Amazon), Google Assistente (evolução do Google Now) e vários outros. Dentre estas várias opções de assistentes virtuais, temos o DJ JARVIS, uma ferramenta computacional que além de ser capaz de interagir com as pessoas e executar tarefas do nosso cotidiano, pode ser integrado ao Arduino, permitindo infinitas possibilidades, principalmente na automação residencial e robótica.
O DJ.JARVIS.AM ou simplesmente Jarvis, é um programa de computador que tem como papel ser um assistente de voz. O Jarvis pode ser instalado e executado em dispositivos com Windows, e além disso, reconhece os comandos de voz em português do Brasil. Um dos diferenciais do Jarvis em relação aos demais assistentes virtuais, é o fato de não precisar estar conectado à internet para que os comandos sejam reconhecidos. Desta forma, as respostas e ações do Jarvis são executadas em menor tempo.
Após o programa ser instalado no computador, é necessário o uso de um microfone para que os comandos possam ser enviados ao Jarvis. Ao receber o comando de voz, ele irá interpretar e executar a ação correspondida de acordo com as configurações predefinidas ou que você definiu manualmente após a instalação. Além disso, você pode criar comandos e respostas para deixar o Jarvis muito mais interativo.
Para conhecer todos os detalhes do Jarvis, recomendo que acesse o site oficial e faça o download da versão free para que você possa fazer testes com a ferramenta. Lembrando que o Jarvis está disponível também na versão PRO:
Tutoriais de Instalação e Configuração
Conforme dito antes, até a data desta publicação (12/2018) o Jarvis pode ser instalado e executado apenas em dispositivos com Windows. A equipe de desenvolvedores do Jarvis permanece trabalhando no desenvolvimento da ferramenta para dispositivos móveis.
Além de ser capaz de interagir com as pessoas e executar tarefas do nosso cotidiano, o Jarvis pode ser integrado com qualquer plataforma embarcada / microcontrolada que possua comunicação serial. Desta forma, podemos interagir o Jarvis com o Arduino, Raspberry Pi, ESP8266 e ESP32, por exemplo. Com isto, temos infinitas possibilidades de projetos, principalmente na área de automação residencial e robótica.
Para esta postagem o foco será o uso do Jarvis com o Arduino.
No diagrama abaixo você pode ver um esquema básico de funcionamento do Jarvis junto ao computador e ao Arduino:
Para demonstrar a integração entre o Jarvis e o Arduino, optei por utilizar um módulo relé com uma lâmpada e uma TV com controle remoto.
Com o módulo relé conectado ao Arduino e a uma lâmpada, vai ser possível enviar os comandos aos Jarvis para que a lâmpada acenda ou apague. Para controlar a TV, vai ser necessário clonar as teclas do controle remoto através do Arduino para em seguida inserir os códigos das teclas no código final que será carregado na placa, e fazer o controle da TV através dos comandos de voz que serão enviados ao Jarvis.
Para fazer o acionamento do módulo relé, vou utilizar dois comandos no Jarvis:
Acender lâmpada
Apagar lâmpada
A resposta do Jarvis para estes comandos serão respectivamente:
Lâmpada está acesa
Lâmpada está apagada
Os caracteres enviados ao Arduino pela serial serão respectivamente:
A / B
Para controle da TV, vou utilizar os seguintes comandos:
Acender lâmpada
Apagar lâmpada
Ligar a Televisão e Desligar a Televisão
Acessar entradas
Pra esquerda e Voltar
Pra direita e Avançar
Pra cima
Pra baixo
Quero assistir este, Abrir e OK
Pausar
Continuar reprodução
Aumentar o som
Abaixar o som
Sair
Não especifiquei nenhuma resposta para estes comandos, contudo, se você quiser poderá adicionar as respostas.
Os caracteres enviados ao Arduino pela serial serão respectivamente:
C / D / E / F / G / H / I / J / K / L / M / N
Agora conecte o seu Arduino ao computador através do cabo USB para que a porta serial COM do mesmo possa ser configurada e registrada no Jarvis.
Considerando que você já tenha o Jarvis instalado e configurado em seu computador, execute o programa e aguarde o carregamento da interface.
OBS: o Jarvis que está instalado em meu computador é a versão PRO e está com o tema Dark Edition.
Com o Jarvis aberto, acesse a opção de “Comandos” para que o menu de opções seja aberto.
Clique na opção “Controles de automação”:
Na janela que for aberta, clique em “Comandos Arduino”:
Nesta janela, em “Portas seriais” selecione a porta COM em que seu Arduino está conectado e clique em “Salvar porta”. Em “Baud rate” selecione 9600 e clique em “Setar Baud Rate”:
OBS: a porta COM1 é nativa do Windows e não corresponde ao Arduino.
Na parte de “COMANDOS” deve ser inserido em cada linha o comando (frase), em “RESPOSTAS” deve ser inserido em cada linha a resposta correspondente ao comando e em “ENVIAR” deve ser inserido o caractere que será enviado via serial para o Arduino. Anteriormente eu já havia mencionado os comandos, respostas e caracteres que seriam configurados no Jarvis para que fossem direcionados ao Arduino.
Para criar o comando, basta colocar o cursor na linha 1, digitar a frase e pressionar enter para que o cursor vá para a segunda linha. Use este mesmo procedimento para inserir as respostas e os caracteres a serem enviados ao Arduino.
Após preenchimento das informações, minhas configurações ficaram conforme a imagem abaixo:
Clique em “Salvar” para efetivar as modificações.
OBS: veja que nas linhas 3, 5, 6 e 9 coloquei mais de um comando e os separei por uma barra vertical. Desta forma, qualquer um destes comandos que eu falar, ele vai dar a mesma resposta (se existir resposta configurada) e vai enviar ao Arduino o caractere definido. Na resposta de um comando você também pode inserir mais de uma resposta, respeitando o uso da barra vertical para separá-los. Além disso, como também deixei em branco a resposta para o último comando (Sair), tive que pressionar enter para que fosse criado a linha 15 e fiz o mesmo procedimento para a resposta e para o enviar. Isto evita que o Jarvis fique acusando que há problemas com a porta COM em que o Arduino está conectado.
Agora será necessário informar ao Jarvis que há novos comandos disponíveis. Para isto, aproxime-se do microfone e diga “Atualizar comandos”. Aguarde o Jarvis responder “Todos os comandos foram atualizados”.
Terminado esta configuração, basta fechar a janela de comandos e deixar o Jarvis aberto.
Para prosseguir você vai precisar dos seguintes itens:
01 – Arduino com Cabo USB
01 – Módulo Relé 5V 1 Canal
01 – Fotorreceptor / Receptor IR VS1838B
01 – Led Emissor Infravermelho (IR)
01 – Resistor de 220Ω
01 – Protoboard
03 – Cabos Jumper macho-macho
03 – Cabos Jumper macho-fêmea
01 – TV com controle remoto
01 – Lâmpada
01 – Receptáculo (boquilha)
01 – Cabo paralelo de 1,5mm ou 2,5mm
01 – Tomada (Rede alternada de 127V)
Inicialmente vai ser necessário fazer a captura dos códigos infravermelho das teclas do controle remoto da TV.
Para captura de códigos IR e envio deles para o dispositivo a ser controlado através do Arduino, é necessário baixar e instalar a biblioteca IRremote:
Se você não sabe como instalar bibliotecas na IDE do Arduino, basta clicar no link abaixo, seguir os passos, importar a biblioteca e retornar para continuar:
Arduino – Importando bibliotecas para a ID
Monte o seguinte esquema de ligação para clonar as teclas do controle remoto:
Conecte o Arduino ao computador através do cabo USB e em seguida abra a IDE e acesse o menu Arquivos > Exemplos > IRremote > IRrecvDump:
Este código disponível na biblioteca IRremote é que será utilizado para capturar as teclas do controle remoto. Carregue o código no Arduino.
Abra o monitor serial da IDE do Arduino, aponte o controle remoto para o fotorreceptor IR e aperte cada uma das teclas que deseja capturar o código IR:
1) No monitor serial é mostrado o protocolo para o sinal clonado e no meu caso o protocolo é o NEC. Em seguida é mostrado o código hexadecimal (HEX). O ideal é que pressione o mesmo botão mais de uma vez para confirmar que o código capturado está correto. Anote os códigos (HEX) que você clonar, pois você irá precisar deles a seguir.
2) Utilizei uma TV LG e o controle dela é bem simples de ser clonado e utiliza o protocolo NEC que é bem comum. Dependendo da marca da TV (ou outro dispositivo que queira clonar as teclas do controle remoto) pode ser um pouco mais complicado devido ao protocolo utilizado, comprimento do sinal e vários outros fatores.
Anote os códigos que você capturou e registre em uma planilha. Ao fim das capturas de tecla que fiz, minha tabela de códigos hexadecimais ficou desta forma:
Monte o seguinte esquema de ligação:
ATENÇÃO: MUITO CUIDADO AO EXECUTAR PRÁTICAS QUE ENVOLVAM TENSÃO / CORRENTE ALTERNADA! FAÇA TODAS AS LIGAÇÕES COM O CIRCUITO COMPLETAMENTE DESLIGADO E ANTES DE FAZER OS TESTES VERIFIQUE CADA UMA DAS LIGAÇÕES PARA ELIMINAR A POSSIBILIDADE DE CURTO ENTRE FASE / NEUTRO OU FASE / FASE.
Veja na imagem abaixo que deixei o LED Emissor IR apontado para o Receptor IR da TV:
Conecte o Arduino ao computador novamente, leia os comentários em cada linha do código para que você possa compreender o funcionamento e em seguida faça o carregamento no Arduino:
OBS: antes de carregar o código abaixo no Arduino, substitua os códigos hexadecimais (após o 0x) pelos códigos que você capturou.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
#include <IRremote.h> //INCLUSÃO DE BIBLIOTECA IRsend irsend; //PINO DIGITAL 3 (PINO PADRÃO UTILIZADO PELA IRREMOTE COM ARDUINO UNO) const int pinoRele = 2; //PINO DIGITAL UTILIZADO PELO MÓDULO RELÉ void setup(){ Serial.begin(9600); //INICIALIZA A SERIAL pinMode(pinoRele, OUTPUT); //DEFINE O PINO COMO SAÍDA digitalWrite(pinoRele, HIGH); //MÓDULO RELÉ INICIA DESLIGADO } void loop() { switch (Serial.read()) { //RECEBE OS CARACTERES VINDOS PELA SERIAL E FAZ O TRATAMENTO case 'A':{ //CASO RECEBA A LETRA "A" digitalWrite(pinoRele, LOW); //LIGA O MÓDULO RELÉ (LÂMPADA ACENDE) break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'B':{ //CASO RECEBA A LETRA "B", FAZ digitalWrite(pinoRele, HIGH); //DESLIGA O MÓDULO RELÉ (LÂMPADA APAGA) break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'C':{ //CASO RECEBA A LETRA "C", FAZ irsend.sendNEC(0x20DF10EF, 32); //LIGAR A TV / DESLIGAR A TV break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'D':{ //CASO RECEBA A LETRA "D", FAZ irsend.sendNEC(0x20DFD02F, 32); //ACESSA AS ENTRADAS DA TV break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'E':{ //CASO RECEBA A LETRA "E", FAZ irsend.sendNEC(0x20DFE01F, 32); //MOVE O CURSOR PARA A ESQUERDA / VOLTAR break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'F':{ //CASO RECEBA A LETRA "F", FAZ irsend.sendNEC(0x20DF609F, 32); //MOVE O CURSOR PARA A DIREITA / AVANÇAR break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'G':{ //CASO RECEBA A LETRA "G", FAZ irsend.sendNEC(0x20DF02FD, 32); //MOVE O CURSOR PARA CIMA break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'H':{ //CASO RECEBA A LETRA "H", FAZ irsend.sendNEC(0x20DF827D, 32); //MOVE O CURSOR PARA BAIXO break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'I':{ //CASO RECEBA A LETRA "I", FAZ irsend.sendNEC(0x20DF22DD, 32); //CONFIRMA A SELEÇÃO (OK / QUERO ASSISTIR ESTE / ABRIR) break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'J':{ //CASO RECEBA A LETRA "J", FAZ irsend.sendNEC(0x20DF5DA2, 32); //PAUSA A REPRODUÇÃO break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'K':{ //CASO RECEBA A LETRA "K", FAZ irsend.sendNEC(0x20DF0DF2, 32); //CONTINUA A REPRODUÇÃO break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'L':{ //CASO RECEBA A LETRA "L", FAZ irsend.sendNEC(0x20DF40BF, 32); //AUMENTA O VOLUME break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'M':{ //CASO RECEBA A LETRA "M", FAZ irsend.sendNEC(0x20DFC03F, 32); //DIMINUI O VOLUME break; //FINALIZA A EXECUÇÃO DO SWITCH } case 'N':{ //CASO RECEBA A LETRA "N", FAZ irsend.sendNEC(0x20DFDA25, 32); //SAIR break; //FINALIZA A EXECUÇÃO DO SWITCH } } } |
Terminado o carregamento do código no Arduino, basta falar no microfone os comandos de voz (os que foram registrados no Jarvis) e se tudo estiver OK, o Jarvis irá responder cada comando com a resposta que você configurou e irá enviar ao Arduino pela serial o caractere correspondente. No código carregado no Arduino, há condições de tratamento para cada caractere recebido e uma ação corresponde a ser executada. Lembre-se de manter o monitor serial da IDE do Arduino fechado enquanto estiver utilizando o Jarvis para controlar a placa, pois caso mantenha o monitor aberto, o Jarvis não irá conseguir enviar os comandos e ele vai informar que há um problema de conexão com a porta COM.
No vídeo abaixo você pode ver o resultado final desta integração do Arduino com o Jarvis:
Nas próximas postagens relacionadas a integração entre o Jarvis e plataformas embarcadas, serão adicionadas novas funcionalidades.
Agora que você já integrou o Jarvis ao Arduino e conseguiu controlar a placa através de comandos de voz, basta começar a implementar novos projetos junto a esta excelente ferramenta.
Gostou desta postagem? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: Como usar com Arduino – Led Emissor IR e Fototransistor IR
Próxima postagem: Como usar com Arduino – Módulo Fotoresistor (Sensor) LDR
Artigo muito bem estruturado e muito bem explicado. Com certeza vai nos ajudar muito nessa nova fase com o sistema JARVIS.
Muitíssimo obrigado por partilhar seu conhecimento.
Comentário vindo de Angola – África.
Olá Matheus.
Agradeço pelo comentário e reconhecimento!
Olá Euler.
Me surgiu uma dúvida. Se eu quiser apenas fazer o processo com a lampada posso seguir os mesmos passos desta publicação e não colocar os da TV?
Otimas explicações, parabens tem me ajudado muito….seria possivel explicar um projeto de ligar varios microfones e caixas no jarvis para todos os comodos da casa. Duvida de muitas pessoas e nao existe explicacao sobre o assunto
Olá Weslei.
Agradeço pelo comentário!
Infelizmente por alguns motivos não pretendo mais escrever artigos sobre o Jarvis.
OLÁ ÓTIMO ARTIGO PARABÉNS AMIGO ME AJUDOU MUITO ,
MINHA DUVIDA COMO FAÇO PARA COLOCAR O ACIONAMENTO PARA 8 RELES NESTE MESMO SKETCH ?
Olá gostei muito do seu artigo, vou acompanhar seu blog seu conteúdo vem me ajudando
bastante, muito obrigado.
Olá Ricardo.
Agradeço pelo comentário!
Show de bola!
Vlw!!!
Esse projeto funciona com arduino Leonardo? #começando.
Olá Paulo.
Agradeço pelo comentário!
Sim, funciona.
Olá Euler, eu tenho uma duvida. Eu usei seu código e ele funcionou perfeitamente com o Jarvis. Porem, assim que eu adiciono mais módulos relê na programação e mais comandos a comunicação entre o Jarvis e o Arduino deixa de funcionar. Sendo que o código compila e funciona pelo serial. O quê poderia ser? Estou precisando de ajuda urgentemente, pois tenho um trabalho para apresentar.
Olá Vithor.
Agradeço pelo comentário!
Verificou se os comandos seriais foram definidos corretamente para cada relé? Não está deixando espaço após o comando serial configurado no Jarvis?
Já tenho um arquivo gravado no arduíno controlando as luzes de minha casa através do Jarvis. Pra mim agregar esse programa ai do Controle de tv e só pô em baixo do meu programa
Olá Carlos.
Agradeço pelo comentário!
Não é só adicionar ao seu código, pois você deve clonar as teclas do seu controle remoto e fazer a substituição no código. Lembrando que este código da postagem é para controle de dispositivos com protocolo NEC.
Bom dia mestre!
Desde já agradeço a sua dedicação aos colegas de automação e fico feliz em saber que existem pessoas comprometidas em difundir as tecnologias e mesmo tempo compartilhar com todos.
Olá Salustiano.
Agradeço pelo comentário e reconhecimento!
Vlw!!!
Olá Euler,
Essa versão do JARVIS que você usou é a versão PRO, correto?
Por que na versão free não existe essa opção de automação.
Olá Rosiberto.
Conforme informado no texto, a versão do Jarvis que foi utilizada é a PRO.
Boa tarde Euler vc não tem um código do arduino de 10 reles ligar e desligar e dois reles pulsar para portão com explicação igual essa bem feita que li toda ela foi otima, pago por ela por favor.
Boa tarde. Tenho uma dúvida. Vi em outros vídeos em que eles usam além destes procedimentos um arquivo .bat para fazer funcionar os comandos. Isso é necessário?
Olá Bronco.
Senão me engano, o pessoal usava .BAT para poder fazer com que o Jarvis enviasse comandos através da internet.
Como o programa atualmente tem a opção de tarefas remotas, esta solução do .BAT caiu em desuso, já que se tornou simples o envio de requisições HTTP.
Muito legal da sua parte detalhar a integração do JARVIS com o ARQUIVO. Estava procurando isso mesmo. Parabéns pela iniciativa! !
Olá Daniel.
Vlw!
Olá Euler, quando fica pronto o tutorial do sensor de nível de água com o Jarvis?
https://www.youtube.com/watch?v=ZbRifndO750&t=81s
Olá Elias.
Em alguns dias será publicado o artigo sobre feedback e confirmações do Jarvis em relação as ações executadas no Arduino.
Já saiu esse conteúdo?
Olá Wesley.
Sim, já saiu faz um tempo:
https://blogmasterwalkershop.com.br/arduino/jarvis-feedback-confirmacao-das-acoes-executadas-no-arduino/
https://blogmasterwalkershop.com.br/automacao/jarvis-porta-monitorada-com-nodemcu-wifi-esp82666-e-sensor-magnetico-mc-38/
Preciso de ajuda
Olá Luis.
Agradeço pelo comentário!
Deixe sua dúvida aqui no Blog que se eu puder ajudar, irei responder.
Euler Oliveira ! Posso compartilhar o link do seu trabalho no meu canal É um Canal pequeno…
más graças a Deus esta crescendo. Tenho um publico bem participativo que mantenho contato por email. Em troca visita e cadastre-se para dar aquela força. Obrigado!
Olá Odair.
Fique à vontade para compartilhar! Já acessei seu canal e fiz minha inscrição.
Fica ligado aqui no blog, pois a próxima postagem sobre o Jarvis vai ser bem interessante!
Parabéns pelo trabalho muito bem explicado!