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:

EasyVR Shield

Arduíno UNO Rev.3

Módulo Relé

Protoboard

Jumper

LED

Resistor 330

Alto falante 8 ohm 0,5W

1. EasyVR Shield Reconhecedor de Voz

Figura 1 - EasyVR Shield

Características:

  • 28 comandos independentes (SI) prontos para comandos básicos (em inglês, italiano, japonês, alemão, espanhol e francês).
  • Suporta até 32 comandos principais (SD) em qualquer linguagem, bem como senhas via voz.
  • SonicNet - Controle um ou mais EasyVR de maneira sem fio através de tons gerados pelos módulos ou outra finte de som.
  • Geração de tom DTMF
  • Fácil de usar e possui interface gráfica simples.
  • O módulo pode ser usado e acessado via interface UART (tensão de operação: de 3,3V a 5V).
  • Protocolo serial simples e robusto para acessar e programar o módulo.
  • Faça suas próprias tabelas de som utilizando a ferramenta Sensory QuickSynthesis4
  • O novo EasyVR GUI inclui um comando para processar e baixar tabelas de sons customizadas (sobrescrevendo as tabelas existentes).
  • Conector para entrada de microfone.
  • Saída de áudio que suporta alto falantes de 8ohm.
  • Entrada para fone de ouvido.
  • Acesso aos pinos de entrada e saída do EasyVR.
  • LED programável mostra o feedback durante o uso.
  • Bibliotecas para Arduíno disponíveis.

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

Exibições: 19168

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 Wagner em 29 março 2016 às 10:58
Olá pessoal, bom dia!

Eu estou com um problema neste projeto e não estou conseguindo resolver, será que alguém pode me ajudar? Por favor.

O problema é.. até a parte de jogar o áudio para a placa está dando tudo certo, só que quando eu mando testar no alto falante, saí apenas um chiado! O beep funciona, mas qualquer outro áudio que eu grave usando Audacity, saí apenas um chiado no alto falante.

Para isolar o problema, eu testei o alto falante em outro lugar e funcionou..

Se alguém puder me ajudar, desde já, fico extremamente agradecido!

Abraços!
Comentário de Bernardo Cervo Zamberlan em 24 março 2016 às 21:27

Olá, alguem sabe como faço para adquirir a licença ou uma versão free do quick T2SI?? Muito Obrigado

Comentário de vanderson de campos pereira em 23 março 2016 às 16:22

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

Comentário de Ricardo Colombo em 31 maio 2015 às 15:44

Depois de gravado e programado, vou precisar de um pc junto ao arduino para funcionar por voz ou só a shield e o arduino?

Comentário de Jose Everton Figueiredo Gomes em 17 março 2015 às 21:00

Tem como usar o microfone do computador no shield?

Comentário de Luciano Rodrigues em 12 março 2015 às 18:44
Meu computador não conecta(não reconhece) o modulo easy vr junto com o arduino uno r3, fiz passo a passo do tutorial, oque devo fazer ?
Atenciosamente.
Comentário de ALDAIR JUSTINO DOS SANTOS em 12 março 2015 às 18:01

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.

Comentário de Tiago Baldavis em 25 outubro 2014 às 10:06

O meu da esse erro logo após clicar em download

conforme imagem

https://lh6.googleusercontent.com/-hTOuFjJdYMM/VEuR1WCFNKI/AAAAAAAA...

Comentário de Laboratório de Garagem em 30 setembro 2014 às 10:23

Bom dia Jefferson,

Você tem que instalar a bilbioteca  AFSoftSerial.

Comentário de jefferson paixao costa em 24 setembro 2014 às 20:54

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

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço