Skip to Content

Uso del Módulo de Reconocimiento de Voz V3 con Arduino

Uso del Módulo de Reconocimiento de Voz V3 con Arduino

En este artículo aprenderás cómo usar el Módulo de Reconocimiento de Voz V3 para controlar una luz con tu voz. El Módulo de Reconocimiento de Voz V3 es, como su nombre indica, un módulo para reconocer voces. Cuando se detecta un comando de voz específico, el módulo lo señala a través de sus pines GPIO (OUT0…OUT6) y también transmite los datos vía UART (RXD, TXD) a un microordenador conectado.

En la siguiente sección te daré una visión general de sus capacidades y cómo usarlo. Para más detalles técnicos del módulo, consulta la hoja de datos enlazada aquí.

Reconocimiento de Sonidos

Ten en cuenta que el módulo también puede ser entrenado para reconocer todo tipo de sonidos; no solo voces. Por ejemplo, el sonido de la lluvia, un perro ladrando, etc. Esto abre posibilidades interesantes. Podrías, por ejemplo, cerrar automáticamente las ventanas si se detecta lluvia. O alimentar al perro si está ladrando.

Número de Comandos

En total, el módulo puede almacenar 80 sonidos, cada uno con una duración máxima de 1.5 segundos. Parece poco, pero es suficiente para comandos como «luz encendida» o «luz apagada». Hay otra limitación: solo se pueden distinguir 7 comandos a la vez (de los 80). Sin embargo, puedes encadenar comandos. Por ejemplo, podrías entrenar secuencias de comandos como «Jarvis», «Luces», «Encender». En cada paso de esta cadena puedes reconocer 7 comandos, resultando en 7 * 7 * 7 = 343 secuencias de comandos diferentes en total. Así que el módulo tiene suficiente memoria para controlar una gran cantidad de dispositivos al encadenar grupos de comandos (> 7 11 ).

Siempre activo pero offline

El módulo está siempre escuchando, ¡lo cual es genial! No tienes que pulsar un botón para iniciar el reconocimiento de voz. Y dado que el módulo no está conectado a internet y solo graba fragmentos cortos de sonido, no hay problemas de privacidad. Además, al ser un dispositivo offline, el reconocimiento es rápido, ya que el módulo no necesita comunicarse con un servidor.

Precisión

El manual indica una precisión de reconocimiento del 99% en condiciones ideales, pero ten en cuenta que el reconocimiento depende del hablante. Además, la precisión disminuye significativamente si hay ruido o si estás lejos del micrófono.

Funcionamiento independiente

Puedes usar el módulo sin un microprocesador. Funciona con 4.5-5.5V y consume unos 40mA. Hay 7 pines GPIO para los 7 comandos que se pueden detectar a la vez. Hay 3 pines de entrada (IN0, IN1, IN2) que te permiten cambiar entre grupos de comandos; estos son los conjuntos de 7 comandos que has entrenado.

Comunicación

Sin embargo, la mayoría de las veces querrás usar la interfaz serial UART (RXD, TXD) para comunicarte con el Arduino y programar tu propio software que decida qué hacer cuando se detecta un comando. Esto es exactamente lo que te mostraré en la siguiente sección.

Componentes necesarios

A continuación encontrarás los componentes necesarios para este proyecto. Ten en cuenta que algunos Módulos de Reconocimiento de Voz no tienen los pines soldados. Puede que necesites soldarlos para poder conectar el módulo usando cables Dupont.

Arduino Uno

USB Data Sync cable Arduino

Cable USB para Arduino UNO

Dupont wire set

Juego de cables Dupont

Módulo de Reconocimiento 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.

Conectando el Módulo de Reconocimiento de Voz

En esta sección te mostraré cómo conectar el Módulo de Reconocimiento de Voz V3 al Arduino. Por suerte, es muy sencillo.

Connecting the Voice Recognition Module to the Arduino
Conectando el Módulo de Reconocimiento de Voz al Arduino

Como puedes ver, solo necesitamos conectar la alimentación (5V y GND) al módulo y luego conectar la interfaz UART:

  • RXD -> Pin 2
  • TXD -> Pin 3

Asegúrate de que RXD está conectado al Pin 3 y TXD al Pin 2. Es un error común intercambiarlos y hasta la documentación en los ejemplos de código del módulo confunde esto.

La imagen de abajo muestra cómo se ve este circuito en la realidad. Sin embargo, añadí un LED adicional y usé cables diferentes ya que mi módulo no venía con pines soldados. Más tarde, soldé los pines y cambié a cables Dupont para una mejor conexión.

Cableado del Módulo de Reconocimiento de Voz con el Arduino

Usaremos el LED interno del Arduino para probar el control por voz, pero si quieres añadir un LED externo (como hice yo) aquí tienes el esquema para ello. Ten en cuenta que conectamos el LED al pin 5, lo que significa que tendrás que cambiar eso en el código mostrado abajo. También no olvides la resistencia de 220 Ohm para limitar la corriente a través del LED y evitar dañar tu Arduino.

Connecting the Voice Recognition Module and an LED to the Arduino
Conectando el Módulo de Reconocimiento de Voz y un LED al Arduino

En la siguiente sección te mostraré cómo instalar el software para el módulo de voz y cómo probar que está configurado correctamente.

Instalación y prueba del software

Empezamos descargando la VoiceRecognitionV3 biblioteca desde github repo.

Luego necesitamos añadir la biblioteca al entorno Arduino. Para ello ve a Sketch -> Include Library -> Add .ZIP library ... y selecciona la ubicación del archivo donde descargaste VoiceRecognitionV3-master.zip.

Add the VoiceRecognitionV3 library to the Arduino environment
Añade la biblioteca VoiceRecognitionV3 al entorno Arduino

Cargar código de ejemplo

Después deberías encontrar algún código de ejemplo para la biblioteca bajo File -> Examples -> VoiceRecognitionV3-master. Abre el ejemplo vr_sample_train.

Open example file vr_sample_train
Abre el archivo de ejemplo vr_sample_train

Compila el software y cárgalo en tu Arduino como de costumbre. Luego, abre el Monitor Serial, ajusta la velocidad en baudios a 115200 y el final de línea a New Line. Mira la imagen abajo.

Settings for Serial Monitor
Configuración del Monitor Serial

Es importante configurar la velocidad en baudios correcta, de lo contrario el Arduino no podrá comunicarse con el módulo. Verifica esto y si tienes problemas, también revisa qué velocidad en baudios está configurada en el código.

Comprobar estado del Reconocedor de Voz

Si ahora reinicias tu Arduino o recargas el software deberías ver la siguiente salida en tu Monitor Serial.

Serial Monitor output for vr_sample_train after restart
Salida del Monitor Serial para vr_sample_train tras reinicio

Finalmente, escribe el comando vr en la caja de mensajes del Monitor Serial y pulsa Enter. Si todo funciona correctamente, deberías ver el estado del reconocedor de voz (vr) mostrado abajo.

Serial Monitor shows status of voice recognizer
El Monitor Serial muestra el estado del reconocedor de voz

Indica que podemos comunicarnos con el módulo de reconocimiento de voz y que actualmente ninguno de los 7 comandos disponibles (Record) está cargado. El sistema está sin entrenar. Pero vamos a cambiar eso en la siguiente sección.

Si no puedes ver el estado del reconocedor de voz, asegúrate de que el cableado es correcto. TXD debe estar conectado al pin 2 y RXD al pin 3. También asegúrate de que el módulo tiene alimentación. El LED amarillo de encendido debe estar encendido.

Entrenando comandos de voz

Asumiendo que aún tienes vr_sample_train cargado en el Arduino y está funcionando, ahora podemos empezar a entrenar el módulo para reconocer comandos de voz. Escribe «train» en la caja de mensajes y luego el número (0..79) bajo el cual quieres almacenar este comando. Por ejemplo, train 0 y luego pulsa Enter.

Training the Voice Recognition Module
Entrenando el Módulo de Reconocimiento de Voz

El LED del módulo cambiará a modo parpadeo amarillo y luego a color rojo. Al mismo tiempo aparecerá la línea «Record 0 Speak now» en el Monitor Serial. Di tu comando, por ejemplo «Luz encendida» y si tiene éxito aparecerá la línea «Record 0 Speak again«. Si no tiene éxito, leerás «Record 0 Cann't matched«. (sí, sé que la ortografía y gramática están mal, pero eso es lo que dice 😉

Después de dos grabaciones exitosas, el Monitor Serial indicará que el entrenamiento fue un éxito y que el comando está almacenado bajo el índice 0: «Record 0 Trained«

Repite este proceso para un segundo comando «Luz apagada» ingresando «train 1» en la caja de mensajes. Una vez hecho, puedes verificar si los comandos están entrenados. Escribe «record 0» y luego «record 1» en la caja de mensajes y deberías ver la siguiente imagen.

Checking the commands recorded in the Voice Recognition Module
Comprobando si los comandos fueron grabados

Probando los comandos entrenados

Después del entrenamiento exitoso, escribe «load 0 1» para cargar los comandos y comenzar el reconocimiento. Los LEDs deberían parpadear en color amarillo, indicando que el módulo está escuchando. Si ahora dices tus comandos entrenados, por ejemplo «Luz encendida» seguido de «Luz apagada», deberías ver la siguiente salida.

Testing the trained commands
Probando los comandos entrenados

Si el LED amarillo no parpadea, el módulo no está escuchando. He encontrado que esto ocurre ocasionalmente y la única forma de resolverlo fue desconectar y volver a conectar rápidamente la alimentación. Otros también han reportado este problema (link) pero no se ha reportado una solución definitiva. Parece que el módulo es algo delicado.

En la siguiente sección usaremos los comandos entrenados para encender y apagar el LED incorporado del Arduino.

Controlando un LED con tu voz

Podrías cargar el ejemplo vr_sample_control_led para controlar el LED incorporado del Arduino con tu voz, pero encontré el código innecesariamente complejo y algo confuso. Por ejemplo, encontrarás este fragmento de código en el ejemplo:

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

Se contradice en la asignación de pines. ¿Es RX=2 o RX=3? Resulta que la asignación correcta es RX=3.

De todos modos, implementaremos nuestra propia solución que es más fácil de entender y ampliar. Aquí tienes la solución completa para controlar un LED.

#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;
    }
  }
}

Veamos más de cerca las secciones individuales del código.

Constantes y Variables

Comenzamos incluyendo las bibliotecas necesarias y definiendo las constantes y variables necesarias.

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;

Aquí, incluimos la biblioteca SoftwareSerial para habilitar la comunicación serial, y la biblioteca VoiceRecognitionV3 para la interfaz con el módulo de reconocimiento de voz. Creamos una instancia de la clase VR, especificando los pines RX y TX para la comunicación. También definimos un array llamado buf para almacenar los comandos de voz reconocidos.

Además, definimos el número de pin para el LED incorporado y dos constantes para representar los comandos de encender y apagar la luz. Si quieres controlar un LED externo, cambia la constante led al pin al que está conectado el LED, por ejemplo el pin 5 como en el esquema mostrado antes.

Función setup

En la función setup(), inicializamos el módulo de reconocimiento de voz, configuramos la velocidad en baudios para la comunicación serial, configuramos el pin del LED como salida y cargamos los comandos de voz para encender y apagar la luz.

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

Comenzamos llamando a la función begin() de la instancia VR para inicializar el módulo con una velocidad en baudios de 9600. También inicializamos la comunicación serial con una velocidad de 115200. El pin del LED se configura como salida usando la función pinMode().

Finalmente, cargamos los comandos de voz para encender y apagar la luz usando la función load() de la instancia VR. Recuerda que solo puedes cargar 7 comandos a la vez, pero puedes usar comandos para cambiar o cargar otros comandos y así construir cadenas de comandos.

Función loop

En la función loop(), comprobamos continuamente los comandos de voz y controlamos el LED en consecuencia.

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;
  }
}

Primero, llamamos a la función recognize() de la instancia VR para comprobar los comandos de voz. El comando reconocido se almacena en el array buf. Si no se reconoce ningún comando, la función devuelve -1 y salimos del bucle. De lo contrario, comprobamos el valor del segundo elemento en el array buf (buf[1]) para determinar el comando. Si el id del comando es lightOn, ponemos el pin del LED en HIGH usando la función digitalWrite(). Si el comando es lightOff, ponemos el pin del LED en LOW.

Si tienes problemas para entender el código para controlar un LED, echa un vistazo a nuestro tutorial How To Blink An LED Using Arduino (4 Different Ways). Y si quieres controlar un relé en lugar de un LED, simplemente reemplaza el LED por un Módulo Relé. Para más detalles, consulta el tutorial How To Use A Relay With Arduino.

Y eso es todo. Ahora tienes un LED controlado por voz. ¡Diviértete jugando con él! ; )

Aplicaciones

Aquí tienes algunas ideas de cómo puedes usar este módulo en tus proyectos:

  1. Automatización del hogar: Controla tus luces, electrodomésticos y otros dispositivos solo con tu voz.
  2. Sistema de seguridad activado por voz: Mejora la seguridad de tu hogar u oficina implementando un sistema de seguridad activado por voz.
  3. Robótica controlada por voz: Con el Módulo de Reconocimiento de Voz puedes ordenar a tus robots realizar acciones específicas o navegar entre obstáculos usando comandos de voz.
  4. Asistentes habilitados por voz: Crea tu propio asistente habilitado por voz, similar a Amazon Alexa o Google Assistant.
  5. Soluciones de accesibilidad: El Módulo de Reconocimiento de Voz puede usarse para desarrollar tecnologías asistivas para personas con discapacidades. Por ejemplo, puedes crear una silla de ruedas controlada por voz o un dispositivo de comunicación manos libres para personas con movilidad limitada.
  6. Proyectos educativos: Incorpora el reconocimiento de voz en proyectos educativos para hacer el aprendizaje más interactivo y atractivo. Los estudiantes pueden usar comandos de voz para controlar simulaciones, responder preguntas de exámenes o interactuar con personajes virtuales.

Conclusión

El Módulo de Reconocimiento de Voz V3 ofrece una forma sencilla de controlar dispositivos usando tu voz. Al no depender de un servidor con conexión a internet para el reconocimiento, este es rápido y no hay problemas de privacidad.

Por otro lado, el reconocimiento de voz depende del hablante y está limitado a frases simples. Además, encontré que la precisión del reconocimiento es muy baja, definitivamente por debajo del 99% indicado. Sin embargo, tu experiencia puede ser diferente.

En cualquier caso, es un proyecto divertido para probar y hay muchas aplicaciones interesantes.

Si tienes más preguntas o necesitas orientación adicional, consulta la sección de Preguntas Frecuentes o revisa los enlaces proporcionados para más recursos y tutoriales. ¡Feliz creación!

Preguntas Frecuentes

Aquí tienes algunas preguntas frecuentes sobre el uso del módulo de reconocimiento de voz.

¿Puedo usar el módulo de reconocimiento de voz con cualquier placa Arduino?

Sí, el módulo de reconocimiento de voz V3 es compatible con la mayoría de las placas Arduino. Se comunica con el Arduino usando comunicación serial, así que mientras tu Arduino tenga una interfaz serial, podrás usar el módulo.

¿Por qué no puedo conectar el módulo de reconocimiento de voz?

Para conectar el módulo de reconocimiento de voz a tu Arduino, debes hacer las siguientes conexiones: pin VCC del módulo al pin 5V del Arduino. Pin GND del módulo al pin GND del Arduino. Pin RX del módulo al pin 3 del Arduino. Pin TX del módulo al pin 2 del Arduino.

Esto me funcionó bien, pero otros han reportado problemas. Prueba con diferentes pines si tienes problemas con la conexión. Solo asegúrate de ajustar el código en consecuencia. También prueba con diferentes velocidades en baudios para la conexión serial.

¿Cómo entreno el módulo de reconocimiento de voz para que reconozca mis comandos?

Para entrenar el módulo de reconocimiento de voz, necesitas usar el IDE de Arduino y cargar un sketch en el Arduino. El sketch te guiará en el proceso de grabar y guardar tus comandos de voz. Una vez guardados, el módulo podrá reconocerlos.

¿Qué tan preciso es el módulo de reconocimiento de voz?

La hoja de datos indica una precisión de reconocimiento del 99% en condiciones ideales (sin ruido, cerca del micrófono, …). En mi experiencia, ni siquiera me acerqué a esa precisión.

¿Por qué el módulo de reconocimiento de voz no está escuchando?

Puede que experimentes que el LED amarillo del módulo no parpadea como debería cuando está escuchando. Me encontré con este problema varias veces. Lo que ayudó fue desconectar y volver a conectar rápidamente la alimentación. Un reinicio suave del Arduino no ayudó.

¿Por qué no puedo entrenar el módulo de reconocimiento de voz?

Asegúrate de que las velocidades en baudios para la comunicación serial estén configuradas correctamente en el código y en el monitor serial. También verifica que los pines RXD y TXD del módulo estén conectados a los pines correctos del Arduino. Es fácil intercambiarlos por accidente.

¿Puedo controlar otros dispositivos además de luces con el módulo de reconocimiento de voz?

Sí, el módulo de reconocimiento de voz puede usarse para controlar varios dispositivos además de luces. Puedes modificar el sketch de Arduino para controlar motores, servos o cualquier otro dispositivo que pueda ser controlado por el Arduino.

¿El módulo de reconocimiento de voz es adecuado para aplicaciones comerciales?

El módulo de reconocimiento de voz V3 está diseñado principalmente para fines educativos y de hobby.

Enlaces

Aquí tienes algunos enlaces a recursos y tutoriales adicionales.