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: 44853

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 Wellington Floriano em 7 janeiro 2015 às 11:51

Bom dia! Gostaria de incluir um comando Wordset (SI), na linha de programação onde estão os "case". Alguém pode ajudar-me?

Comentário de Luan Purceno em 21 outubro 2014 às 0:01
Boa noite, como faço para aumentar a potência do microfone? Ou consigo instalar outro tipo de microfone mais potente? Fiz a instalação, mas só reconhece a voz falando muito perto da placa. Obrigado
Comentário de thiago carlos em 24 junho 2014 às 18:32

 Ricardo Taoni Xavier  seu não conecta ainda? nem em SW? pq em UP o meu não precisa clicar em conectar.

Comentário de thiago carlos em 24 junho 2014 às 18:31

@ Rodrigo Saraiva , eu tb uso o 2.0 e não tive esses erros. o problema que estava tendo era para carregar a tabela de som.

Comentário de thiago carlos em 24 junho 2014 às 18:28

nesse exemplo usando o monitor serial eu só consigo idetificar a palavra robot que está no trigger mas meus comandos foram colocados no group1. Como faço para ele reconhecer os comandos do group 1?

Comentário de thiago carlos em 24 junho 2014 às 18:26

@Thassilo Jahn , estava com um problema parecido para tentar fazer o upload da tabela de som. o que resolveu foi usar uma versão diferente do programa. usei a 3.6.22 e pra carregar com o jumper em UP não precisei clicar em conectar apenas mandei carregar. antes não conseguia.

Comentário de Rodrigo Saraiva em 9 dezembro 2013 às 20:22

Seria o problema de ser o meu EasyVR 2.0 e não o 1.0 ?

Comentário de Rodrigo Saraiva em 9 dezembro 2013 às 20:06

Olá pessoal, tento colocar esse programa pra rodar e me aparece uns erros, que dizem (error : conflicting return type specified for 'virtual void SoftwareSerial::write(uint8_t)' ) e ( error: overriding ' virtual size_t Print::write(uint8_t) ' ) Alguem por favor poderia me ajudar com esse probleminha, desde já obrigado !!!!

Comentário de Thassilo Jahn em 2 outubro 2013 às 16:22

Olá, o meu problema é que não consigo fazer upload de uma mesa de som para a placa, executei o Commander normal e até como administrador, mais não consigo, coloquei o jumper na posição UP e quando clico no botão Conectar ele não consegue Conectar a porta COM. Alguém pode me ajudar?

 

Comentário de Ricardo Taoni Xavier em 1 outubro 2013 às 19:56

pessoal meu não que conectar alguém sabe porque?

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço