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

http://download.tigal.com/veear/EasyVR_User_Manual_3.3.pdf

Exibições: 44858

Comentar

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)

Comentário de Chandler Costa de Oliveira em 15 setembro 2013 às 14:55

gostaria de saber se consigo fazer que esse shield mande um valor binário para um pic? no caso uma decodificação de minha voz para um sinal.

Comentário de Diego Paulino em 23 junho 2013 às 22:57

em que parte q eu declaro os pinos para serem LOW/HIGH ?

Comentário de Laboratório de Garagem em 16 maio 2013 às 18:03

Olá Jéssica Kelly,

O link foi atualizado... pode baixar.

Comentário de Jéssica Kelly Costa em 15 maio 2013 às 9:04
Olá... estou tentando baixar o EasyVR User Manual... mas não estou conseguindo. Haveria como me enviar por e-mail este manual? Grata.
Comentário de Marcos Daniel Souza Araújo em 23 abril 2013 às 9:02

Sim, é para isso que ele serve Hugo.

Comentário de Hugo Napoli Santos em 16 abril 2013 às 16:13
  • Boa Tarde, estou querendo adquirir a shield EasyVR, e gostaria de saber se consigo fazer com que ela responda quando eu der alguma ordem.Por exemplo: Ligue a Luz! Ela responde: Luz ligada com sucesso.

Comentário de Rafael Alves em 4 abril 2013 às 3:05

Usando esse codigo, o meu fica direto imprimindo EasyVR not detected. Alguem sabe o que é isso?

Comentário de JGarcia em 10 outubro 2012 às 21:59

Boa noite galera, estou com uma dúvida em relação a esta placa.., comprei essa shield EasyVR e a placa Arduino UNO, no entando quando faço esse processo descrito no logo a cima, no programa EasyVR commander quando clico em conectar ele diz que não detectou nenhum dispositivo na port "COM7", andei pesquisando e percebi que seria necessario fazer uma ligação do ETX;ERX nos pinos 13 e 12. essa informação procede ? fazendo isso conseguirei a conexão com o UNO ? é necessario eu colocar algum programa no UNO liberando tal porta para poder conectar pelo programa EASYVR COMMANDER?..

desculpa tanta pergunta rsrs mas creio que só aqui poderei ter respostas

desde já grato !!

Comentário de Leo Leite em 10 agosto 2012 às 14:57

E ai pessoal, estou tentando utilizar o Easy Vr mais estou tomando uma surra, at[e no exemplo.

Utilizei o exemplo do labgaragem, mas me retornou os seguintes erros

C:\arduino-1.0.1\libraries\SoftwareSerial/SoftwareSerial.h:52: error: conflicting return type specified for 'virtual void SoftwareSerial::write(uint8_t)'
C:\arduino-1.0.1\hardware\arduino\cores\arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)

o que s'ao esses erros

tem alguem que manja ai desse easy vr e esteja disposto a me auxiliar

Comentário de Ricardo Silva em 7 agosto 2012 às 14:27

Marcos, Obrigado pela ajuda...realmente estou começando a pesquisar no google e youtube e existe sim alguns tutoriais...para acionar a lampada vou ter que fazer um driver externo para o acionamento.

Passei a parte da manha estudando tbm a placa e os tutoriais..., vou dar uma olhada nos webnários que vc comentou, assim que eu obter mais esclarecimentos sobre a programação e o funcionamento irei postar aqui..

obrigado.

abraços

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço