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

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 RODRIGO DA SILVA CUNHA em 24 setembro 2014 às 13:29
muito bacana

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço