bclose

Reconocimiento de voz

El módulo Elechouse Voice Recognition V3

Objetivos

.

 
    • Utilizar el reconocimiento de voz con Arduino.
    • Presentar el módulo Elechouse Voice Recognition V3.
    • Aprender a grabar y cargar nuestras órdenes por voz en el Arduino.
    • Utilizar las voces pregrabados para interactuar con Arduino.

 

Material requerido.

 

  Tienda España Tienda Mexico
ArduinoUNO

Arduino Uno o compatible

 Arduino Uno o compatible.
Img_3_4

 Una Protoboard.

Una Protoboard

colores

4 diodos LED de colores.

4 diodos LED de colores

Img_3_5

4 resistencia de 330 Ohmios.

4 resistencia de 330 Ohmios.

Img_3_6

Algunos cables de Protoboard macho-macho y macho-hembra.

Algunos cables de Protoboard macho-macho y macho-hembra.

módulo reconocimiento de voz

Un módulo de reconocimiento de voz Elechouse Voice Recognition V3.

Un módulo de reconocimiento de voz Elechouse Voice Recognition V3.

 

MÓDULO DE RECONOCIMIENTO DE VOZ

 

A estas alturas ya nos hemos acostumbrados a poder interactuar con ciertos dispositivos electrónicos por medio de nuestra voz, sobre todo y como casi siempre, con los omnipresentes smartphones.

Y aunque con nuestros Arduinos no vamos a ser capaces de emular a Siri (o a Cortana), vamos a poder meternos de lleno en el tema del reconocimiento de voz de una forma sorprendentemente sencilla gracias al módulo Elechouse Voice Recognition V3.

Evidentemente, no podemos esperar que hablemos y de una forma innata nuestro Arduino entienda lo que decimos, sino que tendremos que grabar anteriormente los comandos que queramos utilizar en nuestro programa.

Antes de ponernos a trabajar con el módulo, vamos a hablar un poco de sus características y sus limitaciones. El módulo tiene capacidad para almacenar hasta 255 comandos de voz diferentes, pero sólo podremos utilizar a la vez 7 de ellos. Además los comandos pueden tener una duración de unos 2 o 3 segundos.

La forma de trabajar con él será la siguiente:

 
  • Grabamos los comandos (hasta 255).
  • Cargamos los comandos que queramos utilizar (7 máximo).
  • Implementamos los comandos en el programa en el que lo necesitemos. 

El módulo es muy fácil de conectar, tiene 2 pines para la alimentación y 2, Tx y Rx, para comunicarse con nuestro Arduino. Como vamos a utilizar la librería SoftwareSerial, podéis utilizar los pines que queráis, nosotros vamos a utilizar los pines 2 y 3 porque son para los que vienen configurados los ejemplos de la librería que vamos a utilizar. Además tenemos que conectarle el micrófono en el jak.

montaje módulo reconocimiento voz arduino

Y como acabamos de adelantar, necesitaremos descargar esta librería: voicerecognitionv3. La librería se encargará de hacer el trabajo “sucio”, y además tiene ya preparado el programa que nos servirá para grabar nuestros comandos de voz y cargarlos en el módulo.

 

GRABAR Y CARGAR EN EL MÓDULO LOS COMANDOS DE VOZ

 

Cada vez que queramos grabar, cargar, modificar o borrar los comandos que tengamos en el módulo, tendremos que arrancar uno de los ejemplos que vienen con la librería: vr_sample_train. Después de cargar el programa, abrimos el monitor serie y lo configuramos para trabajar a 115.500 baudios. Nos encontraremos con una pantalla como esta:

lista ordenes

Ahí nos aparecen los comandos que tenemos disponibles y su forma de utilizarlos. Basta con introducirlos en la línea de comandos. Los que nosotros utilizaremos serán: sigtrain y load; aunque por supuesto podéis probar a utilizar los demás. En la columna “Comment” tenéis una breve explicación de la finalidad que tienen.

 
  • Si os pica la curiosidad y queréis saber en qué transforma el módulo vuestras voces, podéis usar el comando getsig indicando que número de comando queráis consultar. 

El primero que vamos a usar es el comando sigtrain que sirve para grabar los comandos de voz. Junto al comando le pasaremos la posición en la que queremos que se guarde y el nombre que queremos asignarle.

Como para probarlo vamos a utilizar un ejemplo que enciende y apaga un LED, tendremos que grabar dos voces, una para encenderlo y otro para apagarlo. Para grabar la primera escribiremos:  “sigtrain 0 Encender”.

sigtrain

Cuando pulsemos ”Intro” veremos como en el módulo comienza a parpadear un LED naranja rápidamente. Es la señal para que nos preparemos. Tendremos que grabar cada comando dos veces, y si coinciden se guardarán. Si no es así tendremos que grabar más veces hasta que coincidan.

El procedimiento es el siguiente:

 
  • LED naranja parpadea rápido: Prepárate.
  • LED rojo fijo: Grabar comando primera vez.
  • LED naranja parpadea lento: Prepárate para la segunda grabación.
  • LED rojo fijo: Grabar comando segunda vez.
  • LED rojo y naranja parpadeando a la vez: Los comandos coinciden y se guardan. 

Mientras hacemos esto en el monitor serie veremos una serie de mensajes que nos irán guiando durante el proceso de grabación.

reconocimiento completado

Para grabar el comando para apagar el procedimiento será exactamente el mismo, pero usaremos el comando “sigtrain 1 Apagar”.

dos voces grabadas

Ahora tendremos que cargar las voces que hemos grabado. Para ello utilizaremos el comando load, indicándole que números de comando queremos cargar, en nuestro caso el 0 y el 1: “load 0 1”. Si se graban correctamente veremos un mensaje indicándonoslo en el monitor serie. Recordad que el máximo de comandos a cargar son 7 de entre los 255 que podemos llegar a grabar.

load 0 1 reconocimiento voz

Para comprobar que todo funciona correctamente, vamos a abrir otro de los ejemplos que vienen con la librería: vr_sample_control_led. De momento no vamos a comentar nada de la programación (lo haremos más adelante), y nos limitaremos a ver que todo funcione correctamente.

Este programa lo que hace es encender y apagar el LED conectado al pin 13 de Arduino en función del comando de voz que reconozca el módulo. Es importante que hayáis grabado los comandos en el orden que hemos indicado, 0 para encender y 1 para apagar, u os funcionará al revés.

Dicho esto no tenéis más que cargarlo y probar si cuando decimos “Encender” o “Apagar” efectivamente el LED responde como debe. En el monitor serie podemos ver qué comandos se han cargado al cargar el programa, y nos mostrará cada vez que se reconozca un comando de voz.

led control

 

PROGRAMA CON RECONOCIMIENTO DE VOZ

 

Bueno, pues una vez que ya sabemos grabar y cargar las voces, y hemos probado que funciona correctamente, vamos a ver cómo hacemos para crear un programa propio que incluya un mayor número de comandos.

Podemos usarlo para cualquier cosa: encender y apagar luces, relés, motores, posicionar servos… o cualquier cosa que se os ocurra. La limitación es que sólo podemos usar 7 comandos de voz en un mismo programa, y que no pueden durar más de 2 o 3 segundos.

Nosotros vamos a crear un programa que simule el encendido y apagado de luces de una casa, utilizando nuestra voz a modo de interruptor. Para ello Conectaremos 4 LEDs, que corresponderán al salón, la cocina, el baño y la habitación.

Lo que pretendemos es que cuando nombremos una de esas estancias se encienda la luz si estaba apagada, y se apague si estaba encendida. Además utilizaremos dos comandos de voz más: “Encender” para encender todos los LEDs y “Apagar” para apagar todos.

Así que, lo dicho, abrimos el programa para grabar y cargar los comandos y grabamos y cargamos los seis comandos que vamos a utilizar:

sigtrain 0 Salon
sigtrain 1 Cocina
sigtrain 2 Bano
sigtrain 3 Habitacion
sigtrain 4 Encender	
sigtrain 5 apagar

load 0 1 2 3 4 5
comandos led casa

A la hora de crear el programa, no vamos a hacerlo desde cero, sino que vamos a aprovechar el programa que viene de ejemplo con la librería que hemos utilizado antes y lo vamos a modificar a nuestro antojo, de forma que no tendremos que preocuparnos de la conversión y comparación de los comandos de voz. Mi consejo es que habráis el ejemplo que hemos utilizado anteriormente y le deis a “Guardar como”, de forma que le podremos poner el nombre que queramos y modificarlo a nuestra conveniencia a partir de ahora sin fastidiar el ejemplo.

Lo primero que tenemos que hacer es cambiar el la variable led que hay en el programa y que está asignada al pin 13 por los nuevos pines que vamos a utilizar:

int ledSalon = 10;
int ledCocina = 11;
int ledBano = 12;
int ledHabitacion = 13;

Justo a continuación es donde definimos los comandos que vamos a utilizar, y que en nuestro caso son 6:

#define Salon (0)
#define Cocina (1)
#define Bano (2)
#define Habitacion (3)
#define Encender (4)
#define Apagar (5)

Después tenemos un par de funciones que no vamos a tocar que son las que se encargan de trabajar con las voces: void printSignature y void printVR.

Ya en el setup, podéis cambiar el mensaje que nos aparece en el monitor serie, y tendremos que declarar como salida los pines que vamos a utilizar. Además los apagaremos todos al comenzar el programa:

 Serial.println("Elechouse Voice Recognition V3 Prueba Prometec");

 pinMode(ledSalon, OUTPUT);
 pinMode(ledCocina, OUTPUT);
 pinMode(ledBano, OUTPUT);
 pinMode(ledHabitacion, OUTPUT);

 digitalWrite(ledSalon, LOW);
 digitalWrite(ledCocina, LOW);
 digitalWrite(ledBano, LOW);
 digitalWrite(ledHabitacion, LOW);

Si os fijáis, también en el setup tenemos unas estructuras de tipo if, que son las que se encargan de avisar si se ha reconocido algo que hayamos dicho como unp de los comandos que hemos grabado anteriormente. Tenemos que cambiarlo por los comandos que hemos definido al inicio del programa:

  if (myVR.load((uint8_t)Salon) >= 0) {
 Serial.println("Salon loaded");
 }

 if (myVR.load((uint8_t)Cocina) >= 0) {
 Serial.println("Cocina loaded");
 }

 if (myVR.load((uint8_t)Bano) >= 0) {
 Serial.println("Bano loaded");
 }

 if (myVR.load((uint8_t)Habitacion) >= 0) {
 Serial.println("Habitacion loaded");
 }

 if (myVR.load((uint8_t)Encender) >= 0) {
 Serial.println("Encender loaded");
 }

 if (myVR.load((uint8_t)Apagar) >= 0) {
 Serial.println("Apagar loaded");
 }

Ya en el loop podemos ver que tenemos una estructura del tipo “switch case” en donde indicamos lo que tiene que hacer nuestro programa en función del comando que haya reconocido. Ahí es donde hacemos que al nombrar una de las estancias utilicemos nuestra voz como un interruptor, o encendamos o apaguemos todos los LED.

Contenido solo disponible para suscriptores. ¡Accede al contenido!

 

Resumen de la sesión

.

En esta sesión hemos aprendido varias cosas importantes:

 
    • Hemos aprendido a utilizar el reconocimiento de voz con Arduino.
    • Hemos presentado el módulo Elechouse Voice Recognition V3.
    • Sabemos grabar y cargar comandos de voz en el módulo.
    • Creamos un programa en el que usamos los comandos grabados para controlar una serie de LEDs.

 

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(68) Comments

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Mario, las diferencias con la versión anterior puedes verlas aquí http://www.elechouse.com/elechouse/index.php?main_page=product_info&products_id=2254

    La limitación de comandos supongo que tendrá que ver con la memoria del módulo.-

    Un saludo.

  • Avatar for Ivan Uriarte
    • Mario

    Hola que tal, excelente explicación.
    Tengo una duda, porque no permite usar los 255 comandos en un mismo programa?
    cual es la diferencia entre la version v.1 y la v.3 ? esta pregunta se basa en a lectura de algunas paginas, en el cual decia que la version v1 puede tener 64 grupos con la posibilidad de guardas 2000 palabras, por favor ayudeme con la respuesta

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Johanna, cuanto más largas son las palabras más complicado será reconocerlas, o eso creo. Te da el problema al grabarlas en la tarjeta o luego al intentar el reconocimiento?

  • Avatar for Ivan Uriarte
    • Johanna

    Hola. Me podría ayudar diciendo porque me da error al grabar palabras en español largas. Estamos usando: ADELANTE, DERECHA, IZQUIERDA y nos da errores de reconocimiento. Gracias

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Alexis, no lo he probado pero la entrada en de jack normal así que supongo que sí deberías poder.

  • Avatar for Ivan Uriarte

    Se puede conectar otro micrófono más potente

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Juan, para el MEga no valen los pines 2 y 3 para la comunicación serie mediante Software Serial. Puedes usar los pines 10 y 11, o mejor, usar uno de los puertos serie extra que tiene el Mega, 1, 2 o 3.

  • Avatar for Ivan Uriarte

    hola gracias por tu aporte a todo nosotros seguidores de la elctrónica, tengo una duda yo tengo un arduino mega 2560 y lo he conectado como indicas, pero me sale error y no carga nada he pensado en usar un arduino uno, lo has intentado gravar con un mega 2560? no te da error?

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Mauro, usamos el ejemplo vr_sample_train para grabar las voces y después lo modificamos para la segunda parte. Un saludo.

  • Avatar for Ivan Uriarte
    • Mauro

    Me podrían ayudar?

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Muchas gracias Edwin. Un saludo.

  • Avatar for Ivan Uriarte
    • Edwin

    Excelente ejemplo muy buena pagina gracias.

  • Avatar for Ivan Uriarte

    Buenas tardes, estoy haciendo un proyecto para la escuela y quería saber cuál es el ejemplo de la librería que usan

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Martín, yo lo he probado únicamente con mi voz, así que no puedo decirte nada al respecto.

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Marco, pues la verdad es que hace tiempo que no lo uso y no recuerdo si lo probé así, aunque supongo que no debería. A ver si puedo hacer alguna prueba y te digo algo.

  • Avatar for Ivan Uriarte

    Hola, una pregunta para un proyecto, no se que alcance tiene, si se puede que el reconocimiento de voz fuese sólo de una voz, por ejemplo, que pudiera prenderlo sólo con mi voz, o existe algún otra placa que tenga funcionalidad para eso. Gracias

  • Avatar for Ivan Uriarte

    Estimado,

    Primero que todo, muchísimas gracias por los tutoriales, he aprendido demasiado. Segundo, te cuento que estoy trabajando con el módulo de voice recognition y me funciona bien, sin embargo cuando lo desconecto del pc y lo conecto al enchufe (con un transformador adecuado) el programa cargado al arduino se pierde. Esto no ocurre cuando corro otros programas que no implican al modulo voice recognition, sabes que puede estar pasando?
    Quiero dejar una ampolleta que se prenda con mi voz pero no puedo dejar siempre el pc conectado a ella..

    Desde ya muchísimas gracias por tu ayuda!

  • Avatar for Ivan Uriarte
    • Admin

    buenos dias Aleix, pues es exactamente lo mismo. En lugar de encender el led pon la bomba y arrancara cuando reciba la orden

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Aleix, la parte de reconocimiento de voz sería igual. Luego en vez de encender un LED supongo que deberías usar un relé para controlar la bomba, además de una alimentación externa para la bomba.

  • Avatar for Ivan Uriarte

    Hola, primero perdone si la pregunta es obvia y segundo felicidades por el tutorial
    Pregunta: ¿cómo puedo hacer para que en vez de mandar ordenes a diodos led le mande ordenes a bombas de agua?
    La Bomba es peristaltica – docificadora 12v 5000rpm; concretamente son seis.

    Muchas gracias.

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login