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 Marcos Daniel Souza Araújo em 7 agosto 2012 às 14:17
para @ricardo

Existe algumas coisas na Net procure por easy VR, no youtube vc encontra bons tutoriais disso.
A programação é feita toda no arduino, porém torna-se necessário vc pré programar a placa
pra isso vc vai usar um software q esta sendo explicado no corpo do texto do lab de garagem...
Esse software vc ira usar para "treinar" o q se deve ser dito.
Por exemplo: Ligar luz!
Ainda não alcancei meus objetivos com a placa mas tudo que aprendi sobre ela foi no Google e Youtube
Comentário de Marcos Daniel Souza Araújo em 7 agosto 2012 às 14:12
Ola...
1º - o Programa não foi desenvolvido pelo Lab de garagem este é um programa que vem na biblioteca de programação da placa (alias, vc que vc deve baixar esta biblioteca para funcionamento do dispositivo), ele mostra a mudança para inglês, pois existem "falas" pré setadas no dispositivo em diversas linguas (e infelizmente não temos portugues nela)
2º A programação é feita na linguagem de programação nativa do arduino que é em inglês (assista o canal do lab de garagem no youtube existem Webnários que vão esclarecer suas dúvidas sobre arduino)
3º O arduino pode ser programado para acionar uma sáida de 5V , para acionar uma lampada de 220V torna-se necessário uma interface a rele.

Procure no youtube Easy VR lá tem muita informação.
estou estudando esta placa
Caso julgue necessário: marcosdaniel_87@hotmail.com
Comentário de Ricardo Silva em 7 agosto 2012 às 12:17

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

Comentário de Marcos Daniel Souza Araújo em 14 julho 2012 às 19:35

Funcionando ... Grato lab de garagem!

Comentário de Carlos Moraes em 3 julho 2012 às 22:43

   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.

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço