ATENÇÃO: este projeto utiliza conexão direta à rede elétrica, e não fazer as conexões de forma adequada causa riscos de CHOQUE ELÉTRICO e INCÊNDIO.
Este tutorial é compatível com shields versões 2.0 e 3.0
Olá Garagistas,
No tutorial de hoje irei demonstrar como utilizar a EasyVR e como demonstração iremos acionar o Arduíno por comando de voz, acionando lâmpada e LED.
Material utilizado:
Alto falante 8 ohm 0,5W
1. EasyVR Shield Reconhecedor de Voz
Figura 1 - EasyVR Shield
Características:
O módulo EasyVR é um reconhecedor de voz feito para adicionar versatilidade, robustez e capacidade de reconhecimento de voz em um ótimo custo x benefício. Além das características já conhecidas do EasyVR, como aceitar 32 comandos principais definidos pelo usuário (os chamados Speaker Dependent – SD) e outros 28 comandos secundários (os chamados Speaker Independent – SI), o shield possui conectores adicionais para entrada de microfone, uma saída para falante de 8ohm, saída de áudio em P2 fêmea, e acesso aos pinos de entrada e saída do módulo EasyVR. Existe um LED na placa para mostrar feedback durante o uso.
Documentos necessários:
Para mais detalhes de comandos, consultar o manual de instruções.
2. Programas utilizados
2.1 Audacity
Utilizamos o Audacity para criar os áudios que serão emitidos pelo alto falante da EasyVR ou "line out" você pode também usar fones de ouvido ou uma caixa de som amplificada com saída P2.
Para realizar o download clique aqui:
2.2 Easy Commander e Sensory QuickSynthesis
Esses 2 programas vem no mesmo executável, eles são utilizados para gravação de comando de voz e configuração do sound table(áudios que serão emitidos pela EasyVR).
3. Montagem
A montagem é bem simples pois não exigem muitos periféricos nesse experimento, apenas observem as ligações da rede elétrica, pois elas podem ser perigosas se utilizarem de forma incorreta.
Figura 2- Ligação elétrica
Essa ligação é bem simples foram utilizados os contatos NA e C.
Figura 3- Ligação das saídas e Alto falante
Figura 4- Ligação das saídas e Alto falante mais próximos
A ligação dos dispositivos de saída também é bem simples foi utilizado a saída 7 para o LED e a saída 8 para o relé, que no caso estamos usando uma lâmpada, mas você pode ligar qualquer outro aparelho respeitando as limitações do relé.Lembrando que estamos utilizando a própria alimentação do Arduíno para alimentar a proto board.
4. Sketch
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#include "SoftwareSerial.h"
SoftwareSerial port(12,13);
#else // Arduino 0022 - use modified NewSoftSerial
#include "WProgram.h"
#include "NewSoftSerial.h"
NewSoftSerial port(12,13);
#endif
#include "EasyVR.h"
EasyVR easyvr(port);
//==============================================================================================
#define lamp 7//Saídas
#define led 8
//==============================================================================================
//Groups and Commands
enum Groups
{
GROUP_1 = 1,
GROUP_16 = 16,
};
enum Group1
{
G1_ACENDER_LAMPADA = 0,
G1_LAMPADA_APAGAR = 1,
G1_ACIONAR_LED = 2,
G1_LED_DESACIONAR = 3,
G1_FINALIZAR = 4,
};
enum Group16
{
G16_SENHA = 0,
G16_COMO_VAI_BILLY = 1,
G16_BEM_TAMBEM = 2,
G16_ACIONAMENTO = 3,
};
EasyVRBridge bridge;
int8_t group, idx;
void setup()
{
// Aqui você pode acrescentar informações ao seu código
//======================================================================================================
pinMode(lamp,OUTPUT);//Definidas como saída
pinMode(led,OUTPUT);
//======================================================================================================
// bridge mode?
if (bridge.check())
{
cli();
bridge.loop(0, 1, 12, 13);
}
// run normally
Serial.begin(9600);
port.begin(9600);
if (!easyvr.detect())
{
Serial.println("EasyVR not detected!");
for (;;);
}
easyvr.setPinOutput(EasyVR::IO1, LOW);
Serial.println("EasyVR detected!");
easyvr.setTimeout(5);
easyvr.setLanguage(0);
//Na linha abaixo você indica em qual grupo ira começar a leitura
group = 16;//EasyVR::TRIGGER; //<-- start group (customize)
}
void action();
void loop()
{
easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening)
Serial.print("Say a command in Group ");
Serial.println(group);
easyvr.recognizeCommand(group);
do
{
// can do some processing while waiting for a spoken command
}
while (!easyvr.hasFinished());
easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off
idx = easyvr.getWord();
if (idx >= 0)
{
// built-in trigger (ROBOT)
// group = GROUP_X; <-- jump to another group X
return;
}
idx = easyvr.getCommand();
if (idx >= 0)
{
// print debug message
uint8_t train = 0;
char name[32];
Serial.print("Command: ");
Serial.print(idx);
if (easyvr.dumpCommand(group, idx, name, train))
{
Serial.print(" = ");
Serial.println(name);
}
else
Serial.println();
easyvr.playSound(0, EasyVR::VOL_FULL);
// perform some action
action();
}
else // errors or timeout
{
if (easyvr.isTimeout())
Serial.println("Timed out, try again...");
int16_t err = easyvr.getError();
if (err >= 0)
{
Serial.print("Error ");
Serial.println(err, HEX);
}
}
}
void action()
{
/*Abaixo estão as ações caso você diga alguma palavra gravada,
então você pode definir o que será executado e deppis mudar de grupo
ou permanecer no mesmo*/
switch (group)
{
case GROUP_1:
switch (idx)
{
case G1_ACENDER_LAMPADA:
easyvr.playSound(3, EasyVR::VOL_FULL);
digitalWrite(lamp,HIGH);
// write your action code here
// group = GROUP_X; <-- or jump to another group X for composite commands
break;
case G1_LAMPADA_APAGAR:
easyvr.playSound(4, EasyVR::VOL_FULL);
digitalWrite(lamp,LOW);
// write your action code here
// group = GROUP_X; <-- or jump to another group X for composite commands
break;
case G1_ACIONAR_LED:
easyvr.playSound(5, EasyVR::VOL_FULL);
digitalWrite(led,HIGH);
// write your action code here
// group = GROUP_X; <-- or jump to another group X for composite commands
break;
case G1_LED_DESACIONAR:
easyvr.playSound(6, EasyVR::VOL_FULL);
digitalWrite(led,LOW);
// write your action code here
// group = GROUP_X; <-- or jump to another group X for composite commands
break;
case G1_FINALIZAR:
easyvr.playSound(2, EasyVR::VOL_FULL);
// write your action code here
group = GROUP_16; //<-- or jump to another group X for composite commands
break;
}
break;
case GROUP_16:
switch (idx)
{
case G16_SENHA:
easyvr.playSound(8, EasyVR::VOL_FULL);
// write your action code here
group = GROUP_1;// <-- or jump to another group X for composite commands
break;
case G16_COMO_VAI_BILLY:
easyvr.playSound(1, EasyVR::VOL_FULL);
// write your action code here
// group = GROUP_X; <-- or jump to another group X for composite commands
break;
case G16_BEM_TAMBEM:
easyvr.playSound(9, EasyVR::VOL_FULL);
// write your action code here
// group = GROUP_X; <-- or jump to another group X for composite commands
break;
case G16_ACIONAMENTO:
easyvr.playSound(7, EasyVR::VOL_FULL);
// write your action code here
// group = GROUP_X; <-- or jump to another group X for composite commands
break;
}
break;
}
}
Referências:
https://www.tigal.com/download/veear/easyvr_appnote_si2function.pdf
https://www.sparkfun.com/products/12656
http://labdegaragem.com/profiles/blogs/tutorial-controlando-rele-via-comunica-o-serial-m-dulo-rele
http://labdegaragem.com/profiles/blogs/tutorial-como-utilizar-o-easyvr-shield-com-arduino
Comentar
Olá, alguem sabe como faço para adquirir a licença ou uma versão free do quick T2SI?? Muito Obrigado
ola laboratorio de garagem gostaria de adiquerir um shield easy vr2.0 como faso para adiquerir ,,,,por favor entrar no meu email vandersonvandersoncampos@hotmailcom ou watts 6696293444 aguardo
Depois de gravado e programado, vou precisar de um pc junto ao arduino para funcionar por voz ou só a shield e o arduino?
Tem como usar o microfone do computador no shield?
BOA TARDE GARAGISTAS!!! SENHORES ESTOU COM A MESMA DIFICULDADE QUE O COMPANHEIRO JEFERSSON PAIXAO COSTA... AO COPIAR E COLAR A "SKETCH" O PROGRAMA ME RETORNA ERROS E NÃO ESTOU CONSEGUINDO IDENTIFICALOS E CORRIGILOS. AGRADEÇO DESDE JA E SE PUDEREM ME AJUDAR MAISGRATO FICAREI!!! OBRIGADO.
O meu da esse erro logo após clicar em download
conforme imagem
https://lh6.googleusercontent.com/-hTOuFjJdYMM/VEuR1WCFNKI/AAAAAAAA...
Bom dia Jefferson,
Você tem que instalar a bilbioteca AFSoftSerial.
ola pessoal , sou um pouco leigo no assunto , mas copiei os libraries conforme aparece na imagem, mas quando tento compilar no arduino aparece isso. alguem pode me ajudar????
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:43:24: error: WConstants.h: No such file or directory
In file included from C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:45:
C:\Program Files\Arduino\libraries\NewSoftSerial\/NewSoftSerial.h:33:2: error: #error NewSoftSerial has been moved into the Arduino core as of version 1.0. Use SoftwareSerial instead.
In file included from C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:45:
C:\Program Files\Arduino\libraries\NewSoftSerial\/NewSoftSerial.h:99: error: conflicting return type specified for 'virtual void NewSoftSerial::write(uint8_t)'
C:\Program Files\Arduino\hardware\arduino\cores\arduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)'
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp: In member function 'void NewSoftSerial::tx_pin_write(uint8_t)':
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:279: error: 'LOW' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp: In member function 'void NewSoftSerial::setTX(uint8_t)':
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:356: error: 'OUTPUT' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:356: error: 'pinMode' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:357: error: 'HIGH' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:357: error: 'digitalWrite' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:358: error: 'digitalPinToBitMask' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:359: error: 'digitalPinToPort' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:360: error: 'portOutputRegister' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp: In member function 'void NewSoftSerial::setRX(uint8_t)':
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:365: error: 'INPUT' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:365: error: 'pinMode' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:367: error: 'HIGH' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:367: error: 'digitalWrite' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:369: error: 'digitalPinToBitMask' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:370: error: 'digitalPinToPort' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:371: error: 'portInputRegister' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp: In member function 'virtual void NewSoftSerial::write(uint8_t)':
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:454: error: 'HIGH' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:454: error: 'LOW' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:460: error: 'byte' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:460: error: expected `;' before 'mask'
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:460: error: 'mask' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:474: error: 'byte' was not declared in this scope
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:474: error: expected `;' before 'mask'
C:\Program Files\Arduino\libraries\NewSoftSerial\NewSoftSerial.cpp:474: error: 'mask' was not declared in this scope
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2023 Criado por Marcelo Rodrigues.
Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)