Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

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

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

  1. Reunir componentes.
  2. Diseñar circuito en protoboard según esquema.
  3. Construye un Sistema Simple de Reconocimiento de Voz con C# y Arduino UNO
  4. Conectar Arduino por USB al PC.
  5. 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.

Construye un Sistema Simple de Reconocimiento de Voz con C# y Arduino UNO
  1. Subir sketch a Arduino y ejecutar aplicación C# (flecha verde "Start").
Construye un Sistema Simple de Reconocimiento de Voz con C# y Arduino UNO

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.

Construye un Sistema Simple de Reconocimiento de Voz con C# y Arduino UNO

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

Construye un Sistema Simple de Reconocimiento de Voz con C# y Arduino UNO

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.

Construye un Sistema Simple de Reconocimiento de Voz con C# y Arduino UNO

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:

  1. Conectar LEDs y resistencias como en el diagrama.
  2. 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
  3. Conectar GND de Arduino a terminales - de los LEDs con jumper.

Archivo Fritzing: schematic_ob2ZmiQwOV.fzz

Proceso de manufactura

  1. Instalar Google Assistant en MATRIX Voice Raspberry Pi: guía paso a paso
  2. Reconocimiento Facial en Tiempo Real en Raspberry Pi – Guía Completa
  3. Construye una Puerta con Reconocimiento Facial Segura usando Windows IoT y Raspberry Pi
  4. Smart Pen: Seguimiento de Escritura y Movimiento en Tiempo Real con Raspberry Pi e IMU
  5. Construya su propio LUMAZOID: Visualizador de música DIY con Arduino
  6. Crea un Impresionante Sistema Ambilight para Monitor con Arduino
  7. Construye tu Propio Juego de Ruleta de 37 LEDs con Arduino Nano
  8. Construye un Dispositivo de Levitación Ultrasónica con Arduino – Guía Paso a Paso
  9. Robot "Vete" – Kit Inicial Arduino Fácil para Niños
  10. Reloj analógico por persistencia de visión (POV) con Arduino Nano – Proyecto DIY
  11. Pintura de Luz con un Solo LED: Crea Imágenes Dinámicas con Sistema Motorizado DIY