Construye un Sistema Simple de Reconocimiento de Voz con C# y Arduino UNO
Componentes y materiales
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino UNO | 1 | |
| Resistencia 220 Ω | 3 | Cualquier valor sirve, evita resistencias muy bajas |
| LED (genérico) | 3 | 1 azul, 1 rojo, 1 verde |
| Protoboard | 1 | |
| Cables jumper | 1 set | |
| Auriculares con micrófono | 1 | Los de smartphone funcionan. También vale micrófono integrado del PC |
Aplicaciones y servicios online
- Arduino IDE
- Microsoft Visual Studio 2015+ (cualquier versión con .NET Framework para Windows Forms)
Sobre el proyecto
Nota: Hola,
Hice este proyecto hace 2 años y tuvo buena acogida. Si eres nuevo, recomiendo seguir el tutorial actualizado (2020):
https://medium.com/illumination/how-to-make-your-first-voice-project-using-arduino-956bfd494947
¡Gracias!
Descripción del proyecto
Todos tenemos sensores (oído, gusto, olfato...) que usamos a diario, no en una vía sino en comunicación bidireccional: transmisión y recepción de datos. ¡Aplicamos el mismo concepto a las máquinas!
Como principiante, casi todos empezamos parpadeando LEDs. Yo también, pero quería controlarlos con comandos de voz. Tras buscar y aprender por internet, completé el proyecto y lo comparto con la comunidad creativa, especialmente principiantes. ¡La forma más simple de reconocimiento de voz con Arduino!
Usamos LEDs para simplificar. Encenderemos/apagaremos LEDs no de forma estándar, sino con comandos de voz. Lo mejor: es muy simple y fácil, solo se necesita un poco de conocimiento de programación.
¿Por qué hice este proyecto?
Empezó cuando mi profesor demostró un proyecto en C# Windows Forms: controlaba una BOMBILLA VIRTUAL con comandos de voz, solo con Visual Studio, sin Arduino ni hardware. ¡Fue increíble! Para un nuevo proyecto con Arduino, pensé: ¿por qué no controlar un LED real con voz? Aquí controlamos hardware físico, no virtual.
¿Por qué es simple?
Razón importante: NO necesitas ningún módulo externo de reconocimiento de voz. Estaba seguro de que había forma de hacerlo sin módulo específico ¡y la encontré! Gracias a: c-sharpcorner.com
Cómo hacerlo
- Reunir componentes.
- Diseñar circuito en protoboard según esquema.
- Conectar Arduino por USB al PC.
- Descargar código Arduino, abrir Arduino IDE, nuevo sketch, pegar código.

Solo necesitas instalar Visual Studio. Uso VS 2010, pero vale cualquier versión que permita crear Windows Forms Application en C#.
Descargar proyecto C#: enlace Dropbox → download → direct download.

- Subir sketch a Arduino y ejecutar aplicación C# (flecha verde "Start").

Nota #0: El proyecto NO funcionará si no incluyes la librería using System.Speech en referencias del proyecto C#.
Cómo hacerlo: Barra de herramientas → Project → Add Reference → .NET → Buscar System.Speech → OK.

Nota #1: El puerto COM en Arduino IDE debe coincidir con el del código C#. En mi caso: COM5 en ambos.

Si tienes dudas, mira el video de demostración en YouTube y ¡listo para controlar LEDs con tu voz!
¿Qué puedes crear a partir de esto?
Usa tu creatividad para hacer algo nuevo. Aprende, Crea, Comparte y Repite.
Código
Código Fuente Arduino (C/C++)
/* Control de LEDs ON/OFF usando librería reconocimiento de voz C# (System.Speech)
* Parte emocionante: NO necesitas módulo externo para transmitir datos a Arduino
* Puedes usar micrófono integrado del PC o de auriculares.
*
* Idea básica para principiantes. Luego tu creatividad decide cómo usarlo útilmente.
* 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) {
// Encendido LEDs
case 'B': digitalWrite(blueLed, HIGH); break;
case 'R': digitalWrite(redLed, HIGH); break;
case 'G': digitalWrite(greenLed, HIGH); break;
// Apagado LEDs (letras aleatorias Z, X, C - cámbialas en C# también)
case 'Z': digitalWrite(blueLed, LOW); break;
case 'X': digitalWrite(redLed, LOW); break;
case 'C': digitalWrite(greenLed, LOW); break;
// Todos a la vez
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)
/* Conexión C# y Arduino para transmitir datos de micrófono a placa
* By Jalal Mansoori
*/
using System;
using System.Windows.Forms;
using System.IO.Ports; // Conexión C#-Arduino
using System.Speech; // Reconocimiento de voz
using System.Speech.Recognition;
using System.Speech.Synthesis; // Síntesis de voz (hablar)
namespace CsharpCode {
public partial class Form1 : Form {
SerialPort myPort = new SerialPort();
SpeechRecognitionEngine re = new SpeechRecognitionEngine();
SpeechSynthesizer ss = new SpeechSynthesizer(); // Para que el programa hable
Choices commands = new Choices(); // Almacena comandos de voz
public Form1() {
InitializeComponent();
// Configuración puerto serie Arduino
myPort.PortName = "COM5"; // Cambiar según tu puerto en Arduino IDE
myPort.BaudRate = 9600; // Igual que Serial.begin(9600)
processing();
}
void processing() {
// Definir comandos de voz
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"
});
// Gramática con comandos
Grammar gr = new Grammar(new GrammarBuilder(commands));
re.RequestRecognizerUpdate();
re.LoadGrammarAsync(gr);
re.SetInputToDefaultAudioDevice(); // Micrófono por defecto
re.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(re_SpeechRecognized);
}
void re_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) {
switch(e.Result.Text) {
// Encendido
case "Blue On": sendDataToArduino('B'); break;
case "Red On": sendDataToArduino('R'); break;
case "Green On": sendDataToArduino('G'); break;
// Apagado
case "Blue Off": sendDataToArduino('Z'); break;
case "Red Off": sendDataToArduino('X'); break;
case "Green Off": sendDataToArduino('C'); break;
// Todos
case "All On": sendDataToArduino('V'); break;
case "All Off": sendDataToArduino('M'); break;
// Hablar
case "Arduino Say Good Bye to makers":
ss.SpeakAsync("Good Bye Makers"); break;
// Salir
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);
}
}
}
Esquemas
Sigue el esquema y conecta componentes en tu protoboard:
- Conectar LEDs y resistencias como en el diagrama.
- Conectar terminal + de cada LED en la misma columna donde la resistencia va al pin digital de Arduino:
Verde → pin 8
Rojo → pin 9
Azul → pin 10 - Conectar GND de Arduino a terminales - de los LEDs con jumper.
Archivo Fritzing: schematic_ob2ZmiQwOV.fzz
Proceso de manufactura
- Instalar Google Assistant en MATRIX Voice Raspberry Pi: guía paso a paso
- Reconocimiento Facial en Tiempo Real en Raspberry Pi – Guía Completa
- Construye una Puerta con Reconocimiento Facial Segura usando Windows IoT y Raspberry Pi
- Smart Pen: Seguimiento de Escritura y Movimiento en Tiempo Real con Raspberry Pi e IMU
- Construya su propio LUMAZOID: Visualizador de música DIY con Arduino
- Crea un Impresionante Sistema Ambilight para Monitor con Arduino
- Construye tu Propio Juego de Ruleta de 37 LEDs con Arduino Nano
- Construye un Dispositivo de Levitación Ultrasónica con Arduino – Guía Paso a Paso
- Robot "Vete" – Kit Inicial Arduino Fácil para Niños
- Reloj analógico por persistencia de visión (POV) con Arduino Nano – Proyecto DIY
- Pintura de Luz con un Solo LED: Crea Imágenes Dinámicas con Sistema Motorizado DIY