Skip to Content

Usando o Módulo de Reconhecimento de Voz V3 com Arduino

Usando o Módulo de Reconhecimento de Voz V3 com Arduino

Neste artigo, vais aprender a usar o Módulo de Reconhecimento de Voz V3 para controlar uma luz com a tua voz. O Módulo de Reconhecimento de Voz V3 é – como o nome indica – um módulo para reconhecer vozes. Quando um comando de voz específico é detetado, o módulo sinaliza isso através dos seus pinos GPIO (OUT0…OUT6) e também transmite os dados via UART (RXD, TXD) para um microcomputador ligado.

Na secção seguinte, vou dar-te uma visão geral das suas capacidades e como o usar. Para mais detalhes técnicos do módulo, consulta a folha de dados ligada aqui.

Reconhecimento de Som

Note que o módulo pode também ser treinado para reconhecer todo o tipo de sons; não apenas vozes. Por exemplo, o som da chuva, o latido de um cão, e assim por diante. Isto abre possibilidades interessantes. Podes, por exemplo, fechar automaticamente as janelas se for detetada chuva. Ou alimentar o cão, se ele estiver a ladrar.

Número de Comandos

No total, o módulo pode armazenar 80 sons, cada um com no máximo 1,5 segundos. Parece pouco, mas é suficiente para comandos como “luz ligada” ou “luz desligada”. Há outra limitação: só podem ser distinguidos 7 comandos ao mesmo tempo (dos 80). No entanto, podes encadear comandos. Por exemplo, podes treinar sequências de comandos como “Jarvis”, “Luzes”, “Ligadas”. Em cada passo desta cadeia podes reconhecer 7 comandos, resultando em 7 * 7 * 7 = 343 sequências de comandos diferentes no total. Portanto, o módulo tem memória suficiente para controlar um grande número de dispositivos ao encadear grupos de comandos (> 7 11 ).

Sempre ligado mas offline

O módulo está sempre a ouvir, o que é ótimo! Não precisas de carregar num botão para iniciar o reconhecimento de voz. E como o módulo não está ligado à internet e só grava fragmentos curtos de som, as preocupações com a privacidade não são um problema. Além disso, sendo um dispositivo offline, o reconhecimento é rápido, pois o módulo não precisa de comunicar com um servidor.

Precisão

O manual indica uma precisão de reconhecimento de 99% em condições ideais, mas nota que o reconhecimento depende do orador. A precisão também diminui significativamente se houver ruído ou se estiveres longe do microfone.

Autónomo

Podes usar o módulo sem um microprocessador. Funciona com 4,5-5,5V e consome cerca de 40mA. Existem 7 pinos GPIO para os 7 comandos que podem ser detetados ao mesmo tempo. Há 3 pinos de entrada (IN0, IN1, IN2) que permitem alternar entre grupos de comandos; estes são os conjuntos de 7 comandos que treinaste.

Comunicação

No entanto, na maioria das vezes vais querer usar a interface serial UART (RXD, TXD) para comunicar com o Arduino e programar o teu próprio software que decide o que fazer quando um comando é detetado. É exatamente isso que vou mostrar na secção seguinte.

Peças Necessárias

Abaixo encontras as peças necessárias para este projeto. Nota que alguns Módulos de Reconhecimento de Voz não têm os pinos soldados. Podes precisar de soldá-los para conseguires ligar o módulo usando fios Dupont.

Arduino Uno

USB Data Sync cable Arduino

Cabo USB para Arduino UNO

Dupont wire set

Conjunto de Fios Dupont

Módulo de Reconhecimento de Voz V3

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Ligação do Módulo de Reconhecimento de Voz

Nesta secção vou mostrar-te como ligar o Módulo de Reconhecimento de Voz V3 ao Arduino. Felizmente, é muito simples.

Connecting the Voice Recognition Module to the Arduino
Ligação do Módulo de Reconhecimento de Voz ao Arduino

Como podes ver, só precisamos de ligar a alimentação (5V e GND) ao módulo e depois ligar a interface UART:

  • RXD -> Pino 2
  • TXD -> Pino 3

Certifica-te que o RXD está ligado ao Pino 3 e o TXD ao Pino 2. É um erro comum trocar estes e até a documentação nos exemplos de código do módulo confunde isto.

A imagem abaixo mostra como este circuito fica na prática. No entanto, adicionei um LED adicional e usei fios diferentes porque o meu módulo não veio com pinos soldados. Mais tarde, soldei os pinos e passei a usar fios Dupont para melhor conexão.

Ligação do Módulo de Reconhecimento de Voz com o Arduino

Vamos usar o LED interno do Arduino para testar o controlo por voz, mas se quiseres adicionar um LED externo (como eu fiz), aqui está o esquema para isso. Nota que ligamos o LED ao pino 5, o que significa que terás de alterar isso no código mostrado abaixo. Também não te esqueças do resistor de 220 Ohm para limitar a corrente pelo LED e evitar danos no Arduino.

Connecting the Voice Recognition Module and an LED to the Arduino
Ligação do Módulo de Reconhecimento de Voz e um LED ao Arduino

Na próxima secção mostro-te como instalar o software para o módulo de voz e como testar se está corretamente configurado.

Instalação e Teste do Software

Começamos por descarregar a VoiceRecognitionV3 biblioteca do github repo.

De seguida, precisamos de adicionar a biblioteca ao ambiente Arduino. Para isso, vai a Sketch -> Include Library -> Add .ZIP library ... e seleciona a localização do ficheiro onde descarregaste a VoiceRecognitionV3-master.zip.

Add the VoiceRecognitionV3 library to the Arduino environment
Adiciona a biblioteca VoiceRecognitionV3 ao ambiente Arduino

Carregar código de exemplo

Depois deverás encontrar algum código de exemplo para a biblioteca em File -> Examples -> VoiceRecognitionV3-master. Abre o exemplo vr_sample_train.

Open example file vr_sample_train
Abre o ficheiro de exemplo vr_sample_train

Compila o software e carrega-o no teu Arduino como de costume. Depois, abre o Monitor Serial, define a taxa de baud para 115200 e o fim de linha para New Line. Vê a imagem abaixo.

Settings for Serial Monitor
Configurações para o Monitor Serial

Definir a taxa de baud correta é importante, caso contrário o Arduino não conseguirá comunicar com o módulo. Verifica isto e, se tiveres problemas, verifica também qual a taxa de baud definida no código.

Verificar estado do Reconhecedor de Voz

Se agora reiniciares o Arduino ou recarregares o software, deverás ver a seguinte saída no Monitor Serial.

Serial Monitor output for vr_sample_train after restart
Saída do Monitor Serial para vr_sample_train após reinício

Finalmente, escreve o comando vr na caixa de mensagem do Monitor Serial e pressiona Enter. Se tudo estiver a funcionar corretamente, deverás ver o estado do reconhecedor de voz (vr) mostrado abaixo.

Serial Monitor shows status of voice recognizer
O Monitor Serial mostra o estado do reconhecedor de voz

Indica que podemos comunicar com o módulo de reconhecimento de voz e que atualmente nenhum dos 7 comandos disponíveis (Record) está carregado. O sistema está sem treino. Mas vamos mudar isso na próxima secção.

Se não conseguires ver o estado do reconhecedor de voz, certifica-te que a ligação está correta. O TXD tem de estar ligado ao pino 2 e o RXD ao pino 3. Também confirma que o módulo tem alimentação. O LED amarelo de energia deve estar aceso.

Treinar Comandos de Voz

Assumindo que ainda tens vr_sample_train carregado no Arduino e a correr, podemos agora começar a treinar o módulo para reconhecer comandos de voz. Escreve “train” na caixa de mensagem e depois o número (0..79) sob o qual este comando deve ser guardado. Por exemplo, train 0 e depois pressiona Enter.

Training the Voice Recognition Module
Treinar o Módulo de Reconhecimento de Voz

O LED no módulo vai passar para modo de piscar amarelo e depois para vermelho. Ao mesmo tempo, a linha “Record 0 Speak now” aparecerá no Monitor Serial. Diz o teu comando, por exemplo “Luz ligada” e, se for bem-sucedido, aparecerá a linha “Record 0 Speak again“. Se não for, vais ler “Record 0 Cann't matched“. (sim, sei que a ortografia e gramática estão erradas, mas é o que lá está 😉

Após duas gravações bem-sucedidas, o Monitor Serial indicará que o treino foi um sucesso e que o comando está agora guardado no índice 0: “Record 0 Trained

Repete este processo para um segundo comando “Luz desligada” escrevendo “train 1” na caixa de mensagem. Quando terminares, podes verificar se os comandos foram treinados. Escreve “record 0” e depois “record 1” na caixa de mensagem e deverás ver a imagem seguinte.

Checking the commands recorded in the Voice Recognition Module
Verificar se os comandos foram gravados

Testar os Comandos Treinados

Após o treino bem-sucedido, escreve “load 0 1” para carregar os comandos e iniciar o reconhecimento. Os LEDs devem agora piscar a amarelo; indicando que o módulo está a ouvir. Se disseres agora os comandos treinados, por exemplo “Luz ligada” seguido de “Luz desligada”, deverás ver a seguinte saída.

Testing the trained commands
Testar os comandos treinados

Se o LED amarelo não estiver a piscar, o módulo não está a ouvir. Descobri que isto acontece ocasionalmente e a única forma de resolver o problema foi desligar e voltar a ligar rapidamente a alimentação. Outros também reportaram este problema (link), mas não foi encontrada uma boa solução. Parece que o módulo é um pouco temperamental.

Na próxima secção vamos usar os comandos treinados para ligar e desligar o LED incorporado do Arduino.

Controlar um LED com a tua Voz

Poderias carregar o exemplo vr_sample_control_led para controlar o LED incorporado do Arduino com a tua voz, mas achei o código desnecessariamente complexo e parcialmente confuso. Por exemplo, vais encontrar este pedaço de código no exemplo:

/**        
 * Connection
 * Arduino    VoiceRecognitionModule
 * 2   ------->     TX
 * 3   ------->     RX
 */
VR myVR(2,3);    // 2:RX 3:TX, you can choose your favourite pins.

Contradiz-se na atribuição dos pinos. É RX=2 ou RX=3? A atribuição correta é RX=3!

De qualquer forma, vamos implementar a nossa própria solução que é mais fácil de entender e de expandir. Vê a solução completa para controlar um LED abaixo.

#include "SoftwareSerial.h"
#include "VoiceRecognitionV3.h"

VR vr(2, 3);  // 2:TX 3:RX!
uint8_t buf[64];

const int led = 13;  // built-in
const uint8_t lightOn = 0;
const uint8_t lightOff = 1;

void setup() {
  vr.begin(9600);
  Serial.begin(115200);
  pinMode(led, OUTPUT);
  vr.load(lightOn);
  vr.load(lightOff);
}

void loop() {
  if (vr.recognize(buf, 50) > 0) {
    switch (buf[1]) {
      case lightOn:
        digitalWrite(led, HIGH);
        break;
      case lightOff:
        digitalWrite(led, LOW);
        break;
    }
  }
}

Vamos analisar mais de perto as secções individuais do código.

Constantes e Variáveis

Começamos por incluir as bibliotecas necessárias e definir as constantes e variáveis necessárias.

include "SoftwareSerial.h"
#include "VoiceRecognitionV3.h"

VR vr(2, 3);  // 2:TX 3:RX!
uint8_t buf[64];

const int led = 13;  // built-in
const uint8_t lightOn = 0;
const uint8_t lightOff = 1;

Aqui, incluímos a biblioteca SoftwareSerial para permitir a comunicação serial, e a biblioteca VoiceRecognitionV3 para interagir com o módulo de reconhecimento de voz. Criamos uma instância da classe VR, especificando os pinos RX e TX para comunicação. Também definimos um array chamado buf para armazenar os comandos de voz reconhecidos.

Adicionalmente, definimos o número do pino para o LED incorporado e duas constantes para representar os comandos de ligar e desligar a luz. Se quiseres controlar um LED externo, altera a constante led para o pino ao qual o LED está ligado, por exemplo, o pino 5 como no esquema mostrado anteriormente.

Função Setup

Na função setup(), inicializamos o módulo de reconhecimento de voz, definimos a taxa de baud para a comunicação serial, configuramos o pino do LED como saída e carregamos os comandos de voz para ligar e desligar a luz.

void setup() {
  vr.begin(9600);
  Serial.begin(115200);
  pinMode(led, OUTPUT);
  vr.load(lightOn);
  vr.load(lightOff);
}

Começamos por chamar a função begin() da instância VR para inicializar o módulo com uma taxa de baud de 9600. Também inicializamos a comunicação serial com uma taxa de baud de 115200. O pino do LED é configurado como saída usando a função pinMode().

Finalmente, carregamos os comandos de voz para ligar e desligar a luz usando a função load() da instância VR. Lembra-te que só podes carregar 7 comandos de cada vez. Mas podes usar comandos para alternar ou carregar outros comandos para criar cadeias de comandos.

Função Loop

Na função loop(), verificamos continuamente os comandos de voz e controlamos o LED em conformidade.

void loop() {
  int ret = vr.recognize(buf, 50);
  if (ret == -1) return;

  switch (buf[1]) {
    case lightOn:
      digitalWrite(led, HIGH);
      break;
    case lightOff:
      digitalWrite(led, LOW);
      break;
  }
}

Primeiro, chamamos a função recognize() da instância VR para verificar comandos de voz. O comando reconhecido é armazenado no array buf. Se nenhum comando for reconhecido, a função retorna -1 e saímos do loop. Caso contrário, verificamos o valor do segundo elemento no array buf (buf[1]) para determinar o comando. Se o id do comando for lightOn, definimos o pino do LED para HIGH usando a função digitalWrite(). Se o comando for lightOff, definimos o pino do LED para LOW.

Se tiveres dificuldades em entender o código para controlar um LED, dá uma vista de olhos no nosso tutorial How To Blink An LED Using Arduino (4 Different Ways). E se quiseres controlar um relé em vez de um LED, basta substituir o LED por um Módulo Relé. Para mais detalhes, vê o tutorial How To Use A Relay With Arduino.

E é isso. Agora tens um LED controlado por voz. Diverte-te a brincar com ele ; )

Aplicações

Aqui tens algumas ideias de como podes usar este módulo nos teus projetos:

  1. Automação Doméstica: Controlar as luzes, aparelhos e outros dispositivos apenas com a tua voz.
  2. Sistema de Segurança Ativado por Voz: Melhora a segurança da tua casa ou escritório implementando um sistema de segurança ativado por voz.
  3. Robótica Controlada por Voz: Com o Módulo de Reconhecimento de Voz podes comandar os teus robôs para executar ações específicas ou navegar por obstáculos usando comandos de voz.
  4. Assistentes com Voz: Cria o teu próprio assistente ativado por voz, semelhante ao Amazon Alexa ou Google Assistant.
  5. Soluções de Acessibilidade: O Módulo de Reconhecimento de Voz pode ser usado para desenvolver tecnologias assistivas para pessoas com deficiências. Por exemplo, podes criar uma cadeira de rodas controlada por voz ou um dispositivo de comunicação mãos-livres para pessoas com mobilidade limitada.
  6. Projetos Educativos: Incorpora o reconhecimento de voz em projetos educativos para tornar a aprendizagem mais interativa e envolvente. Os alunos podem usar comandos de voz para controlar simulações, responder a perguntas de quizzes ou interagir com personagens virtuais.

Conclusão

O Módulo de Reconhecimento de Voz V3 oferece uma forma simples de controlar dispositivos usando a tua voz. Como não depende de um servidor com ligação à internet para o reconhecimento de voz, o reconhecimento é rápido e as preocupações com a privacidade não existem.

Por outro lado, o reconhecimento de voz depende do orador e está limitado a frases simples. Também achei a precisão do reconhecimento muito baixa, definitivamente abaixo dos 99% indicados. No entanto, a tua experiência pode ser diferente.

De qualquer forma, é um projeto divertido para experimentar e há muitas aplicações interessantes.

Se tiveres mais perguntas ou precisares de orientação adicional, consulta a secção de Perguntas Frequentes ou vê os links fornecidos para mais recursos e tutoriais. Boa criação!

Perguntas Frequentes

Aqui estão algumas perguntas frequentes sobre o uso do módulo de reconhecimento de voz.

Posso usar o módulo de reconhecimento de voz com qualquer placa Arduino?

Sim, o módulo de reconhecimento de voz V3 é compatível com a maioria das placas Arduino. Comunica com o Arduino usando comunicação serial, por isso, desde que o teu Arduino tenha uma interface serial, poderás usar o módulo.

Por que não consigo ligar ao módulo de reconhecimento de voz?

Para ligar o módulo de reconhecimento de voz ao teu Arduino, precisas de fazer as seguintes ligações: pino VCC do módulo ao pino 5V do Arduino. Pino GND do módulo ao pino GND do Arduino. Pino RX do módulo ao pino 3 do Arduino. Pino TX do módulo ao pino 2 do Arduino.

Isto funcionou bem para mim, mas outros relataram problemas. Experimenta pinos diferentes se tiveres problemas com a ligação. Só certifica-te de ajustar o código em conformidade. Talvez também experimenta a taxa de baud para a ligação serial.

Como treino o módulo de reconhecimento de voz para reconhecer os meus comandos?

Para treinar o módulo de reconhecimento de voz, precisas de usar o Arduino IDE e carregar um sketch para o Arduino. O sketch vai guiar-te no processo de gravar e guardar os teus comandos de voz. Uma vez guardados, o módulo será capaz de reconhecê-los.

Qual é a precisão do módulo de reconhecimento de voz?

A folha de dados indica uma precisão de reconhecimento de 99% em condições ideais (sem ruído, perto do microfone, …). Na minha experiência, não cheguei nem perto dessa precisão, no entanto.

Por que o módulo de reconhecimento de voz não está a ouvir?

Podes experienciar o caso em que o LED amarelo do módulo não está a piscar como deveria quando está a ouvir. Encontrei este problema algumas vezes. O que ajudou foi desligar e voltar a ligar rapidamente a alimentação. Um reset suave do Arduino não ajudou.

Por que não consigo treinar o módulo de reconhecimento de voz?

Certifica-te que as taxas de baud para a comunicação serial estão definidas corretamente no código e no monitor serial. Também garante que os pinos RXD e TXD do módulo estão ligados aos pinos corretos no Arduino. É fácil trocá-los por engano.

Posso controlar outros dispositivos além de luzes com o módulo de reconhecimento de voz?

Sim, o módulo de reconhecimento de voz pode ser usado para controlar vários dispositivos além de luzes. Podes modificar o sketch do Arduino para controlar motores, servos ou qualquer outro dispositivo que possa ser controlado pelo Arduino.

O módulo de reconhecimento de voz é adequado para aplicações comerciais?

O módulo de reconhecimento de voz V3 é principalmente desenhado para fins de hobby e educativos.

Links

Aqui estão alguns links para recursos adicionais e tutoriais.