Essa provavelmente é uma das melhores formas de implementar o reconhecimento de voz em seus programas do Arduino. Porque você não vai precisar gastar nada e só precisa baixar o programa Processing que é leve e muito bom pra muitas outras coisas.

Caso você não tenha lido o post sobre as diferentes formas de fazer reconhecimento de voz, passe lá para entender tudo que vou falar.


Características

Essa solução usa um programa chamado Processing (imagem abaixo). Esse software se assemelha muita à IDE do Arduino e serve para muitas aplicações interessantes, em especial coisas gráficas. É por meio dele, que a gente consegue fazer a conversão da nossa fala para texto.

IDE do Processing

A gente vai fazer uso de uma biblioteca e mais a frente você verá como. Basicamente, nesta solução, o reconhecimento de voz é feito em uma página da internet. Essa página retorna o comando traduzido para o Processing e o Processing envia os dados para o Arduino pelo Serial. Ou seja, o Arduino tem que estar conectado no computador.

Como foi dito no outro post, essa é uma solução computadorizada. Portanto, as desvantagens incluem os gastos de energia e a falta de praticidade em se usar o sistema. E, como disse no início do post, a vantagem está no fato de que é uma solução simples, fácil e sem custo.


Implementação

Configurações e downloads

Caso você queira ver o tutorial no site do próprio autor da biblioteca, clique aqui.

Primeiro de tudo, você precisa baixar o Processing. Feito isso, a gente precisa baixar a biblioteca neste link. Para instalar a biblioteca, basta ir na pasta de documentos do computador -> Processing -> libraries e colocar a pasta da biblioteca lá dentro. Se a pasta libraries não existe, basta criá-la.

Antes do próximo passo, é preciso deixar claro uma coisa. Como essa solução faz uso de uma página na internet, existem dois caminhos para se seguir. O primeiro é pra quem tem conhecimento em html e quer criar o próprio arquivo para abrir a página (o código está disponível no site do autor). E o segundo é pra quem não conhece e quer uma solução rápida, que é usar um link já disponível com tudo funcionando.

O link dessa página pode ser acessado aqui. Depois que você entra na página, é preciso autorizar a página do navegador a utilizar o microfone. Feito isso, você precisa ir no canto direito e mudar a linha que esta escrita “en-US” para “pt-BR”. Veja a imagem abaixo para entender onde mudar.

Página na web processing

Programação

Agora que está tudo configurado, resta apenas a programação do Processing e do Arduino. O código abaixo eu apenas incrementei o código do autor (da biblioteca) com a comunicação serial para controlar o Arduino. O código envia toda tradução da voz que ele recebe para o Arduino, via serial.

Processing

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import processing.serial.*;
import websockets.*;

Serial myPort;
WebsocketServer socket;

void setup() {
  myPort = new Serial(this, Serial.list()[0], 9600); //Mude o 0 para o valor da sua porta

  socket = new WebsocketServer(this, 1337, "/p5websocket");
}

void draw() {
  background(0);
}

void webSocketServerEvent(String msg){
  myPort.write(msg); //Envia os dados para o Arduino via cabo serial
  println(msg); //Printa no console do processing para ver o que esta sendo reconhecido
}

Na linha “myPort = new Serial(this, Serial.list()[0], 9600);” você muda o “[0]” para o valor da porta serial que você está conectado (0,1,2…).

Arduino

Abaixo é o código do Arduino, que, no loop, verifica se tem existe algo para ser lido. E caso tenha, ele faz a leitura e verifica se o valor recebido é “acende LED” ou “apaga LED”. Com isso, ele acende ou apaga o led que está ligado ao pino 2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define led 2
String frase;

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}

void loop() {
  if (Serial.available()){ // Se existe algo para ser lido
    frase = Serial.readString();
    Serial.println(frase);
    if(frase.indexOf("acende LED") >-1){
      digitalWrite(led, HIGH);
    }
    if(frase.indexOf("apaga LED") > -1){
      digitalWrite(led, LOW);
    }
  }
  delay(100);
}

Os códigos não são complexos, pois a complexidade está na biblioteca e na página da internet. E como elas já estão feitas pra você, é bem fácil alterar o código e transformar no que você quer.

Veja que a identificação das palavras é feito no Arduino da seguinte forma: o valor é lido como uma String (conjunto de caracteres); depois o programa procura, nessa String, o índice da frase “acende LED” (ou “apaga LED”), se a frase existir na String, essa busca irá retornar um valor maior que 0; com isso a gente executa uma ação para o caso daquela frase ser dita.

Reconhecimento de voz – Como fazer?