Sistema Simples de Reconhecimento de Voz com C# e Arduino UNO
Componentes e Materiais
| Componente | Quantidade | Observações |
|---|---|---|
| Arduino UNO | 1 | |
| Resistor 221 Ω | 3 | Pode usar qualquer valor, evite resistência muito baixa |
| LEDs (azul, vermelho, verde) | 3 | |
| Protoboard (genérica) | 1 | |
| Fios jumper (genéricos) | 1 | |
| Fone de ouvido com microfone | 1 | Pode usar microfone embutido do computador |
Aplicativos e Serviços Online
- Arduino IDE
- Microsoft Visual Studio 2015 (ou qualquer versão com .NET Framework para Windows Forms)
Sobre o Projeto
Nota: Olá!
Fiz este projeto há 2 anos e recebi feedback encorajador. Se você é novo, recomendo seguir o tutorial atualizado (2020):
https://medium.com/illumination/how-to-make-your-first-voice-project-using-arduino-956bfd494947
Descrição do Projeto
Todos somos abençoados com sensores (ouvidos, língua, nariz...) que usamos diariamente em comunicação bidirecional (transmissão e recepção de dados). Aplicamos o mesmo conceito em máquinas!
Como iniciante, quase todos começam piscando LEDs. Eu também, mas queria controlar componentes eletrônicos com comandos de voz. Após pesquisar e aprender na internet, completei o projeto e compartilho com a comunidade criativa, especialmente iniciantes! A maneira mais simples de reconhecimento de voz com Arduino!
Usamos apenas LEDs. Neste projeto, ligamos/desligamos LEDs não de forma padrão, mas com comandos de voz. É muito simples e fácil, requer apenas um pouco de conhecimento de programação.
Por Que Fiz Este Projeto?
Tudo começou quando meu professor demonstrou um projeto em C# Windows Forms controlando uma lâmpada virtual por voz, só com software, sem Arduino. Achei incrível! Para um novo projeto com Arduino, pensei: por não controlar LEDs por voz, pois aqui controlamos hardware fisicamente, não virtualmente.
Por Que Este Projeto É Simples?
Razão importante: não precisa de nenhum módulo externo de reconhecimento de voz! Tinha certeza que havia um jeito sem módulo dedicado e encontrei graças a este link.
Como Fazer
- Reúna todos os componentes.
- Monte o circuito na protoboard conforme diagrama abaixo.

- Conecte o cabo USB do Arduino ao computador.
- Baixe o código Arduino, abra a IDE, crie novo sketch e cole o código.
Você precisará instalar o Visual Studio (usei versão 2010, qualquer versão que permita criar Windows Forms Application em C#). Link para download: Dropbox.

- Carregue o sketch no Arduino e execute a aplicação C# clicando na seta verde "Start".

Nota #0: O projeto não funcionará se você não incluir a biblioteca using System.Speech no Visual Studio. Como fazer: Barra de ferramentas → Project → Add Reference → .NET → Busque "System.Speech" → OK.

Nota #1: Certifique-se de que a porta COM selecionada no Arduino IDE seja a mesma no código C#. No meu caso, COM5 em ambos.

Se tiver dúvidas, assista ao vídeo de demonstração no YouTube e estará pronto para controlar LEDs com sua voz!
O Que Você Pode Criar a Partir Disso?
Use sua criatividade para fazer algo novo. Aprenda, Crie, Compartilhe e Repita.
Código
Código Fonte Arduino (C/C++)
/* Controlando LEDs ON/OFF usando biblioteca de reconhecimento de voz do C# (System.Speech)
* Parte emocionante: não precisa de módulo externo para transmitir dados ao Arduino,
* pode usar microfone embutido do computador ou fone de ouvido.
* Programa para dar ideia básica a iniciantes, depois use sua criatividade.
* Keep Learning, Share, think and Repeat. Enjoy!
* By Jalal Mansoori
*/
const int blueLed = 10;
const int redLed = 9;
const int greenLed = 8;
char incomingData = '0';
void setup() {
Serial.begin(9600);
pinMode(blueLed, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
}
void loop() {
incomingData = Serial.read();
switch(incomingData) {
case 'B': digitalWrite(blueLed, HIGH); break;
case 'R': digitalWrite(redLed, HIGH); break;
case 'G': digitalWrite(greenLed, HIGH); break;
case 'Z': digitalWrite(blueLed, LOW); break;
case 'X': digitalWrite(redLed, LOW); break;
case 'C': digitalWrite(greenLed, LOW); break;
case 'V':
digitalWrite(blueLed, HIGH);
digitalWrite(redLed, HIGH);
digitalWrite(greenLed, HIGH);
break;
case 'M':
digitalWrite(blueLed, LOW);
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
break;
}
}
Código C# (Visual Studio)
/* Programa para conectar C# e Arduino transmitindo dados do microfone do computador para a placa Arduino
* By Jalal Mansoori
*/
using System;
using System.Windows.Forms;
using System.IO.Ports;
using System.Speech;
using System.Speech.Recognition;
using System.Speech.Synthesis;
namespace CsharpCode {
public partial class Form1 : Form {
SerialPort myPort = new SerialPort();
SpeechRecognitionEngine re = new SpeechRecognitionEngine();
SpeechSynthesizer ss = new SpeechSynthesizer();
Choices commands = new Choices();
public Form1() {
InitializeComponent();
myPort.PortName = "COM5"; // Altere se sua porta for diferente
myPort.BaudRate = 9600;
processing();
}
void processing() {
commands.Add(new string[] { "Blue On", "Red On", "Green On", "Blue Off", "Red Off", "Green Off", "Exit", "All On", "All Off", "Arduino Say Good Bye to makers" });
Grammar gr = new Grammar(new GrammarBuilder(commands));
re.RequestRecognizerUpdate();
re.LoadGrammarAsync(gr);
re.SetInputToDefaultAudioDevice();
re.SpeechRecognized += new EventHandler(re_SpeechRecognized);
}
void re_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) {
switch(e.Result.Text) {
case "Blue On": sendDataToArduino('B'); break;
case "Red On": sendDataToArduino('R'); break;
case "Green On": sendDataToArduino('G'); break;
case "Blue Off": sendDataToArduino('Z'); break;
case "Red Off": sendDataToArduino('X'); break;
case "Green Off": sendDataToArduino('C'); break;
case "All On": sendDataToArduino('V'); break;
case "All Off": sendDataToArduino('M'); break;
case "Arduino Say Good Bye to makers":
ss.SpeakAsync("Good Bye Makers");
break;
case "Exit":
Application.Exit();
break;
}
txtCommands.Text += e.Result.Text.ToString() + Environment.NewLine;
}
void sendDataToArduino(char character) {
myPort.Open();
myPort.Write(character.ToString());
myPort.Close();
}
private void btnStop_Click(object sender, EventArgs e) {
re.RecognizeAsyncStop();
btnStop.Enabled = false;
btnStart.Enabled = true;
}
private void btnStart_Click(object sender, EventArgs e) {
re.RecognizeAsync(RecognizeMode.Multiple);
btnStop.Enabled = true;
btnStart.Enabled = false;
MessageBox.Show("Voice Recognition Started!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
Esquemático
Siga o esquemático e conecte os componentes na protoboard:
- Conecte LEDs e resistores conforme diagrama.
- Conecte terminal positivo de cada LED na mesma coluna do resistor ligado ao pino digital do Arduino:
- LED Verde + → pino digital 8
- LED Vermelho + → pino digital 9
- LED Azul + → pino digital 10
- Por fim, conecte GND do Arduino aos terminais negativos dos LEDs usando jumper.
Processo de manufatura
- Instalando Google Assistant no MATRIX Voice Raspberry Pi – Guia Passo a Passo
- Reconhecimento Facial em Tempo Real no Raspberry Pi – Guia Completo
- Construa uma Porta com Reconhecimento Facial Seguro usando Windows IoT e Raspberry Pi
- Caneta Inteligente: Rastreamento de Escrita e Movimento em Tempo Real com Raspberry Pi e IMU
- Construa Seu Próprio LUMAZOID: Visualizador de Música DIY com Arduino
- Crie um Sistema Ambilight Impressionante para Monitor com Arduino
- Construa Seu Próprio Jogo de Roleta com 37 LEDs e Arduino Nano
- Construa um Dispositivo de Levitação Ultrassônica com Arduino – Guia Passo a Passo
- Construa um Robô 'Vá Embora' – Kit Inicial Arduino Fácil para Crianças
- Relógio Analógico Estilo POV com LEDs – Projeto DIY Arduino Nano