Neste tutorial, vamos mostrar como utilizar o EasyVR Shield com Arduino com um exemplo já disponível na biblioteca do EasyVR Shield. Com o EasyVR Shield você poderá conversar com seu Arduino, dando comandos por voz e programando o que ele fará ao receber os comandos. Este Shield é de fácil aplicação e bastante robusto.
Primeiramente, baixe e abra o arquivo EasyVR_User_Manual_3.3.pdf. Este arquivo é a documentação. Na documentação tem toda a explicação e utilização do Shield com Arduino, mas neste tutorial vamos mostrar de forma mais resumida.
Agora baixe o arquivo EasyVR Commander. Abra o arquivo e extraia em uma pasta de sua escolha. Agora vá para pasta e abra o arquivo .exe (este software é somente para windows) e instale o programa. Assim que acabar de instalar, abra-o. Com o programa aberto, pegue o Shield, conecte o microfone e depois conecte o Shield no Arduino. Certifique que o JUMPER está na posição PC como na figura abaixo:
Abra o programa EasyVR Commander, vá em File/Port e selecione a porta em que o Arduino está conectado. Agora clique no botão "Connect" localizado no canto superior esquerdo do programa.
O programa está demonstrado abaixo:
Na tabela esquerda, podemos ver vários grupos os quais você pode criar gravando a própria voz utilizando QuickSyntetizer e assim ter um reconhecimento de voz próprio. O Wordset são palavras prontas como exemplo e qualquer pessoa que disser a palavra, o Shield reconhecerá a palavra.
Agora vamos testar o EasyVR Shield. Selecione um Wordset, clique em "test the group", irá aparecer uma nova janela escrito "Speaking now". Diga uma das palavras dentro do Wordset que você escolheu no microfone. Se ele reconhecer ele vai piscar a palavra que você falou no programa. Se não irá aparecer uma nova janela dizendo que não foi reconhecido ou não foi claro o suficiente para o EasyVR entender.
Agora feche o EasyVR Commander e mude o JUMPER para a posição SW. Baixe a biblioteca aqui. Abra-o e se estiver utilizando a a versão 1.0 da IDE do Arduino, escolha a pasta "arduino1.0" e extraia em uma pasta de sua escolha. Copie a pasta "EasyVR" e cole na pasta "libraries" localizada dentro da pasta da IDE do Arduino. Por fim abra a IDE do Arduino.
Vá em File/Examples/EasyVR e selecione TestEasyVR. Ao abrir, mude a língua para ENGLISH, como está destacado em vermelho:
/**
EasyVR Tester
Dump contents of attached EasyVR module
and exercise it with playback and recognition.
Serial monitor can be used to send a few basic commands:
'c' - cycles through available command groups
'b' - cycles through built-in word sets
's123.' - play back sound 123 if available (or beep)
With EasyVR Shield, the green LED is ON while the module
is listening (using pin IO1 of EasyVR).
Successful recognition is acknowledged with a beep.
Details are displayed on the serial monitor window.
**
Example code for the EasyVR library v1.0
Written in 2011 by RoboTech srl for VeeaR <http:://www.veear.eu>
To the extent possible under law, the author(s) have dedicated all
copyright and related and neighboring rights to this software to the
public domain worldwide. This software is distributed without any warranty.
You should have received a copy of the CC0 Public Domain Dedication
along with this software.
If not, see a href="http://creativecommons.org/publicdomain/zero/1.0/%3E">http://creativecommons.org/publicdomain/zero/1.0/>;.
*/
#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);
int8_t set = 0;
int8_t group = 0;
uint32_t mask = 0;
uint8_t train = 0;
char name[32];
bool useCommands = true;
EasyVRBridge bridge;
void setup()
{
// 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(EasyVR::ENGLISH);
int16_t count = 0;
Serial.print("Sound table: ");
if (easyvr.dumpSoundTable(name, count))
{
Serial.println(name);
Serial.print("Sound entries: ");
Serial.println(count);
}
else
Serial.println("n/a");
if (easyvr.getGroupMask(mask))
{
uint32_t msk = mask;
for (group = 0; group <= EasyVR::PASSWORD; ++group, msk >>= 1)
{
if (!(msk & 1)) continue;
if (group == EasyVR::TRIGGER)
Serial.print("Trigger: ");
else if (group == EasyVR::PASSWORD)
Serial.print("Password: ");
else
{
Serial.print("Group ");
Serial.print(group);
Serial.print(": ");
}
count = easyvr.getCommandCount(group);
Serial.println(count);
for (int8_t idx = 0; idx < count; ++idx)
{
if (easyvr.dumpCommand(group, idx, name, train))
{
Serial.print(idx);
Serial.print(" = ");
Serial.print(name);
Serial.print(", Trained ");
Serial.print(train, DEC);
if (!easyvr.isConflict())
Serial.println(" times, OK");
else
{
int8_t confl = easyvr.getWord();
if (confl >= 0)
Serial.print(" times, Similar to Word ");
else
{
confl = easyvr.getCommand();
Serial.print(" times, Similar to Command ");
}
Serial.println(confl);
}
}
}
}
}
group = 0;
mask |= 1; // force to use trigger
useCommands = (mask != 1);
}
const char* ws0[] =
{
"ROBOT",
};
const char* ws1[] =
{
"ACTION",
"MOVE",
"TURN",
"RUN",
"LOOK",
"ATTACK",
"STOP",
"HELLO",
};
const char* ws2[] =
{
"LEFT",
"RIGHT",
"UP",
"DOWN",
"FORWARD",
"BACKWARD",
};
const char* ws3[] =
{
"ZERO",
"ONE",
"TWO",
"THREE",
"FOUR",
"FIVE",
"SIX",
"SEVEN",
"EIGHT",
"NINE",
"TEN",
};
const char** ws[] = { ws0, ws1, ws2, ws3 };
bool checkMonitorInput()
{
if (Serial.available() <= 0)
return false;
// check console commands
int16_t rx = Serial.read();
if (rx == 'b')
{
useCommands = false;
set++;
if (set > 3)
set = 0;
}
if (rx == 'c')
{
useCommands = true;
do
{
group++;
if (group > EasyVR::PASSWORD)
group = 0;
} while (!((mask >> group) & 1));
}
if (rx == 's')
{
int16_t num = 0;
delay(5);
while ((rx = Serial.read()) >= 0)
{
if (isdigit(rx))
num = num * 10 + (rx - '0');
else
break;
delay(5);
}
if (rx == '.')
{
easyvr.stop();
easyvr.playSound(num, EasyVR::VOL_DOUBLE);
}
}
if (rx >= 0)
{
easyvr.stop();
Serial.flush();
return true;
}
return false;
}
void loop()
{
checkMonitorInput();
easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening)
if (useCommands)
{
Serial.print("Say a command in Group ");
Serial.println(group);
easyvr.recognizeCommand(group);
}
else
{
Serial.print("Say a word in Wordset ");
Serial.println(set);
easyvr.recognizeWord(set);
}
do
{
if (checkMonitorInput())
return;
}
while (!easyvr.hasFinished());
easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off
int16_t idx = easyvr.getWord();
if (idx >= 0)
{
Serial.print("Word: ");
Serial.print(easyvr.getWord());
Serial.print(" = ");
if (useCommands)
Serial.println(ws[group][idx]);
else
Serial.println(ws[set][idx]);
// ok, let's try another set
set++;
if (set > 3)
set = 0;
easyvr.playSound(0, EasyVR::VOL_FULL);
}
else
{
idx = easyvr.getCommand();
if (idx >= 0)
{
Serial.print("Command: ");
Serial.print(easyvr.getCommand());
if (easyvr.dumpCommand(group, idx, name, train))
{
Serial.print(" = ");
Serial.println(name);
}
else
Serial.println();
// ok, let's try another group
do
{
group++;
if (group > EasyVR::PASSWORD)
group = 0;
} while (!((mask >> group) & 1));
easyvr.playSound(0, EasyVR::VOL_FULL);
}
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);
}
}
}
}
Na IDE do Arduino, selecione a versão da sua placa Arduino (UNO, Duemilanove, etc) e a porta (COMx, ttyUSB0, ttyACMx) e clique UPLOAD. Abra o Serial Monitor e selecione "9600" de baud. digite a letra "b" e aperte ENTER.
A figura abaixo mostra o Serial Monitor rodando a programação exemplo:
O Wordset 0 é o Trigger, isto é, diga a palavra "ROBOT", ao acertar a palavra, ele mostrará a palavra e irá para o Wordset1 e assim por diante.
E é isso! Esperamos que gostado! Caso tenha dúvidas, poste aqui mesmo no blog! Se tiver sugestões para tutoriais, poste aqui! Para ver outros tutoriais e projetos desenvolvidos pela equipe LdG ou por outros garagistas, clique aqui e aqui! Até a próxima!
Referências:
http://www.labdegaragem.org/loja/index.php/31-shields/easyvr-shield...
http://www.sparkfun.com/products/10963
http://www.tigal.com/product/2333
http://download.tigal.com/veear/EasyVR-Commander-3.3.7-QS-5.2.1.zip
http://download.tigal.com/veear/EasyVR-Arduino-library-1.1.zip
Comentar
Meu nome é Ricardo, estou tentando fazer um contolador para lampada acionada por voz, estou com dificuldades, gostaria de saber se possui algum tutorial onde eu possa entender como eu coloco a programação
do arduino UNO e a programação do EasyVr, não entendi muito bem como funciona as duas placas em conjunto.
Agradeço.
abraços
Funcionando ... Grato lab de garagem!
Meu nome é Carlos meu email é carlomoraes1@ibest.com.br, eu não entendi, se o programa foi desenvolvido pelo Laboratório de garagem por que tem que mudar a linguagem para INGLES, NÃO PODE SER PROGRAMADO EM PORTUGUÊS PARA QUE POSSAMOS ENTENDER, desculpe sou novo com Arduino é que não entendi nada, poderia me esclarecer melhor pra que serve esse produto, como ele aciona alguma coisa no Arduino, que não seja apenas reconhecer se eu falei uma palavra certa.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 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)