Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
Guía Guía rápida rápid a del módulo módu lo de d e reconoci recono cimiento miento de d e voz y reproducción reproduc ción EasyVR 1.- INTRODUCCION Se trata de un potente módulo de bajo coste para el reconocimiento de voz y reproducción de sonidos. Es la versión mejorada y actualizada del VRbot de la firma VeeaR (www.veear.eu www.veear.eu)) Las voces a reconocer pueden estar predefinidas y grabadas internamente. Se dice que son voces independientes del micrófono (SI). También se puede grabar y reconocer voces definidas por el propio usuario y en cualquier idioma. En este caso se tratan de voces dependientes del micrófono (SD), que se supone previamente han sido “ enseñadas ” y grabadas en la memoria interna del módulo. Ver la figura 1. Figura 1. 1. El módulo de reconocimiento EasyVR Esta guía está realizada a partir de la documentación que facilita el fabricante, el “EasyVR User Manual V3.1”, y trata de explicar las prestaciones y recursos de este módulo. También se comentan una serie de ejercicios que, a modo de ejemplo, tratan de mostrar posibles aplicaciones. Los ejemplos se presentan en un CD-ROM que se adjunta con el módulo EasyVR. Son ejemplos que están resueltos tanto en ensamblador como en C para la familia de microcontroladores PIC16F88X y están implementados sobre el laboratorio USB-PIC’SCHOOL de Ingeniería de Microsistemas Programados S.L., aunque pueden ser fácilmente adaptables a cualquier otra plataforma o lenguaje de programación. 1.1 Aplicaciones Son numerosas las posibles aplicaciones del módulo de reconocimiento EasyVR. Algunas sugerencias: • • • •
Sistemas de control de propósito general que se deseen gobernar mediante voz Automatización Automatiz ación de aplicaciones en el ámbito doméstico Control de acceso por voz Sistemas robóticos controlados controlados por voz
1.2 Característi Característi cas Se pueden destacar las más relevantes: •
•
• •
•
•
• •
26 comandos y voces pre-programados (SI) en: en inglés, italiano, japonés, alemán, francés y español Admite hasta 32 comandos y sus correspondientes voces definidas por el usuario (SD) en cualquier idioma Los comandos y voces SD se pueden organizar en hasta 16 grupos Se dispone de un interface gráfico de usuario (GUI) para Windows que permite una rápida familiarización con el uso del módulo. El módulo se puede conectar fácilmente con cualquier tipo de controlador mediante una sencilla comunicación serie. Dispone de un potente protocolo de comandos para el desarrollo de cualquier aplicación basada en el reconocimiento de voz. Alimentación Alimentaci ón de 3.3V a 5V 3 líneas de E/S o GPIO (IO1, IO2 e IO3) que se controlan directamente mediante los comandos correspondientes
1
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
• • •
www.microcontroladores.com
[email protected]
Salida PWM de audio que admite la conexión con un altavoz de 8 Ω Capacidad de de reproducción de hasta 9 minutos de sonidos y/o voces Se suministra junto con un CD-ROM que contiene el presente documento y una serie de librerías y ejemplos de aplicación para PIC16F88X desarrollados por Ingeniería de Microsistemas Programados
1.3 Especificaciones técnicas/eléctricas La figura 2 muestra las dimensiones físicas del módulo EasyVR así como la disposición de las señales que se explican en la siguiente tabla.
Figura 2. Distribución de señales del EasyVR CONECTOR Pin Nº 1 2 J1 3 4 J2 1-2 J3
NOMBRE GND VCC ERX ETX PWM
TIPO E E S S
1 2 1
MIC_RET MIC_IN /RST
E E
2
/XM
E
3
IO1
E/S
4
IO2
E/S
5
IO3
E/S
J4
DESCRIPCION Tierra de alimentación Entrada de alimentación Recepción serie de datos (niveles TTL) Transmisión serie de datos (niveles TTL) Salida PWM diferencial de audio. Puede conectarse directamente a un altavoz de 8 Ω Tierra para el microfóno Entrada de señal del micrófono Reset asíncrono del módulo activo por nivel “0”. Está conectada internamente con una resistencia Pull-Up de 100K Selección del modo de arranque del módulo. Internamente está conectada con una resistencia Pull-Down de 1K Línea de E/S de propósito general (nivel TTL de 3.0V) 3.0V) Línea de E/S de propósito general (nivel TTL de 3.0V) 3.0V) Línea de E/S de propósito general (nivel TTL de 3.0V) 3.0V)
2
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
• • •
www.microcontroladores.com
[email protected]
Salida PWM de audio que admite la conexión con un altavoz de 8 Ω Capacidad de de reproducción de hasta 9 minutos de sonidos y/o voces Se suministra junto con un CD-ROM que contiene el presente documento y una serie de librerías y ejemplos de aplicación para PIC16F88X desarrollados por Ingeniería de Microsistemas Programados
1.3 Especificaciones técnicas/eléctricas La figura 2 muestra las dimensiones físicas del módulo EasyVR así como la disposición de las señales que se explican en la siguiente tabla.
Figura 2. Distribución de señales del EasyVR CONECTOR Pin Nº 1 2 J1 3 4 J2 1-2 J3
NOMBRE GND VCC ERX ETX PWM
TIPO E E S S
1 2 1
MIC_RET MIC_IN /RST
E E
2
/XM
E
3
IO1
E/S
4
IO2
E/S
5
IO3
E/S
J4
DESCRIPCION Tierra de alimentación Entrada de alimentación Recepción serie de datos (niveles TTL) Transmisión serie de datos (niveles TTL) Salida PWM diferencial de audio. Puede conectarse directamente a un altavoz de 8 Ω Tierra para el microfóno Entrada de señal del micrófono Reset asíncrono del módulo activo por nivel “0”. Está conectada internamente con una resistencia Pull-Up de 100K Selección del modo de arranque del módulo. Internamente está conectada con una resistencia Pull-Down de 1K Línea de E/S de propósito general (nivel TTL de 3.0V) 3.0V) Línea de E/S de propósito general (nivel TTL de 3.0V) 3.0V) Línea de E/S de propósito general (nivel TTL de 3.0V) 3.0V)
2
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
Condiciones de trabajo recomendadas SIMBOLO VCC Ta ERX ETX
PARAMETRO Tensión de alimentación Temperatura ambiente de trabajo Recepción de datos serie Transmisión de datos serie
Mín. 3.3 0 0 0
Típ. 5 25 -
Máx 5.5 70 VCC VCC
UNIDAD V ºC V V
Mín. 2.4 -0.1
Típ. 3.0 0.0 <1
Máx 3.3 0.75 10
UNIDAD V V µA V V
Características eléctricas SIMBOLO VIH VIL IIL VOH VOL
PARAMETRO Tensión de entrada del nivel “1” Tensión de entrada del nivel “0” Corriente Corrient e de fuga de entrada Tensión de salida del nivel “1” Tensión de salida del nivel “0”
2.4 0.6
Alim Al iment entaci ación ón SIMBOLO PARAMETRO ISLEEP Consumo en el modo Sleep IOPER Consumo en el modo normal de trabajo ISPEAKER Consumo en reproducción de audio
Mín. <1 12 180
Típ.
Máx
UNIDAD mA mA mA
1.4 El El Int erface serie El módulo EasyVR se comporta como un dispositivo esclavo que se controla desde un dispositivo Master o controlador, mediante una comunicación serie asíncrona tipo UART con las siguientes características: • •
Velocidad de comunicación: 9600 baudios (por defecto), 19200, 38700, 57600 y 115200 baudios Trama: 8 bits de datos, 1 bit de stop y sin paridad
Junto con el módulo EasyVR se adjunta un software para Windows, el EasyVR Commander. Se trata de un interface gráfico de usuario (GUI) que permite utilizar y analizar de forma rápida, eficaz y sencilla todas las funciones del módulo de reconocimiento reconocimiento EasyVR. U47 6
Su instalación en el PC es muy sencilla y lo único que hay que realizar son las conexiones adecuadas de las señales ETX, ERX y alimentación. Se recuerda que las señales de comunicación de datos son compatibles con niveles de tensión TTL por lo que NO NO se pueden conectar directamente al puerto COM del PC. Hay que realizar el clásico circuito para la adaptación de niveles TTL a RS232, p.e. mediante el conocido circuito MAX2323, como se muestra en el esquema de la figura 3.
5
INTERFACE RS-232
PWM2 PWM1 MIC.
1 2
+5VCC
GND
ETX
VCC
ERX
EasyVR
MAX232 4
RxD
3
TxD
12 9 11 10 1 3
100n
2 100n
T1OUT T2OUT T1IN T2IN
R1IN R2IN R1OUT R2OUT
C1+ C1-
C2+ C2-
V+
V c c V
6 1
13 8 14 7 4 5
TxD RxD
5 9 4 8 3 7 2 6 1
100n
6
D N 100n G 5 1
100n +5VCC +5VCC
Figura 3. 3. Esquema de interface de TTL a RS232 mediante el MAX232
3
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651 U48 6 5
PWM2 RTS PWM1 CTS
MIC. 1 2
+5VCC
GND VCC
ETX ERX
4
RxD
3
TxD
EasyVR
www.microcontroladores.com
[email protected]
En Ingeniería de Microsistemas Programados hemos empleado nuestro laboratorio USB-PIC’SCHOOL y el interface RS232 en él integrado. El mismo laboratorio también dispone de la alimentación de +5VCC necesaria. Así, en la figura 4, se muestra las conexiones realizadas y, en la figura 5, se muestra una fotografía del montaje. Figura 4. Esquema de conexiones
USB-PIC'SCHOOL INTERFACE RS232
Figura 5. Montaje práctico del EasyVR sobre USB-PIC’SCHOOL
1.5 El micrófono Junto con el módulo EasyVR se suministra un micrófono unidireccional del tipo electret (Horn EM9745P382): Sensibilidad -38dB; Impedancia 2.2K; Tensión de trabajo 3V; Respuesta a un amplio rango de frecuencias de 100Hz hasta 20KHz Debemos tener en cuenta que una colocación acústicamente inadecuada del micrófono reducirá la precisión en el reconocimiento de las voces. Es posible emplear múltiples soluciones para fijar mecánicamente el micrófono en nuestra aplicación. Algunas mejorarán la precisión más que otras. En general debemos tener en cuenta las siguientes consideraciones para montar el micrófono: 1. Montaje en pared. El micrófono debe colocarse lo más cerca posible de la superficie y fijado en una carcasa de plástico. No debe haber espacios vacíos entre el micrófono y la carcasa. Dichos espacios pueden modificar la resonancia acústica y reducir la precisión del reconocimiento. Ver la figura 6.
Figura 6. Fijación del micrófono sobre una carcasa
4
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
2. No obstruir el orificio. La parte frontal del micrófono debe quedar totalmente libre de objetos que obstruyan el sonido e interfieran por tanto en el reconocimiento. El diámetro del orificio frente al micro debe ser de al menos de 5mm. Si hubiera que proteger el orificio mediante algún tipo de plástico, éste no debería tener un grosor superior a 0.7mm. Ver la figura 7. Figura 7. Acceso libre al micro 3. Aislamiento. El micro debe quedar aislado respecto a la carcasa. Esto se puede conseguir envolviendo al micro con un material esponjoso como se muestra en la figura 8. El propósito es evitar ruidos producidos al manipular el módulo EasyVR o al propio micro, que reducirían la precisión del reconocimiento.
Figura 8. Asilamiento del micro 4. Distancia. La distancia entre la boca y el micrófono también se tiene en cuenta a la hora de realizar un reconocimiento con precisión. Aumentar la distancia de 15 cm a 30 cm puede reducir el valor de la señal que proporciona el micro en un factor de cuatro, con lo que el reconocimiento de una voz puede ser inviable. El mismo factor y los mismos problemas se puede dar si quien dicta la voz emplea un volumen fuerte o suave. 1.6 Salida de audi o La salida de audio del módulo EasyVR puede actuar directamente sobre un altavoz de 8 Ω. También es posible conectar esta salida con la entrada de un amplificador externo de audio. Nota: Conectar directamente unos altavoces de menor impedancia, puede dañar la salida de audio o al módulo EasyVR en su totalidad. También es posible conectar cargas de mayor impedancia como por ejemplo unos auriculares. En este caso la potencia de salida habrá que reducirla conectando una resistencia en serie con ellos. El valor de esta resistencia depende de la potencia de los auriculares y del volumen de salida. Suele ser del orden de los 10K. Nota: La conexión directa de los auriculares con la salida de audio, los puede dañar. 1.7 Líneas de E/S de propósi to general Además de las dos líneas que emplea el módulo EasyVR para comunicarse con el controlador principal, disponemos de tres líneas de E/S de propósito general que se pueden emplear para conectar y controlar sencillos periféricos como leds, interruptores, etc.
5
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
Estas líneas (IO1-IO3) proceden directamente del propio controlador que gestiona el funcionamiento del módulo EasyVR, y trabajan con una tensión de referencia de 3.0V. Si necesitamos conectarlas con circuitos que emplean una alimentación diferente, debemos adoptar diferentes soluciones que eviten que se dañen. Usar una línea como salida Todas las líneas se configuran, por defecto, como entradas con resistencias pull-up internas. Mediante el comando apropiado cualquier línea que se quiera utilizar como salida, debe configurarse así expresamente. En la figura 9 se muestra diferentes conexiones de una de esas líneas configurada como salida.
Figura 9. Posibles conexiones de una línea configurada como salida a) La línea de salida controla directamente un led de bajo consumo. b) La línea de salida se conecta con un circuito de adaptación a 5V. c) La línea de salida controla una carga de alta tensión mediante un relé alimentado a 12VDC El valor exacto de los componentes dependerá de cada caso en función de la aplicación. Por ejemplo, el valor de la resistencia para el circuito A se puede calcular según:
Donde VLED es la tensión directa del led que nos indica su f abricante. V OH es la tensión a nivel “1” de la línea de salida. IOH es la corriente que suministra esa línea de salida. Supongamos que V LED es de 1.8V e I OH es de 5mA, el valor de RLED será: 2.4 1.8
0.005
120Ω
Por seguridad ponemos una resistencia de un valor algo superior, como por ejemplo de 150 Ω. Si quisiéramos activar un led u otra carga de mayor consumo, necesitamos un circuito como el B. La carga se conectaría entre la resistencia de salida y el colector del transistor. Usar una línea como entr ada Tras conectar la alimentación o producir un Reset, todas las líneas de E/S quedan configuradas como entradas con resistencia pull-up interna. Cada patilla de entrada se puede configurar con una carga pull-up de diferente valor o, directamente, sin carga. En la fugura 10 se muestra diferentes conexiones posibles a una línea de entrada.
6
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
Figura 10. Diferentes conexiones en las líneas de entrada a) Conexión de un interruptor, pulsador, sensor, etc.. b) Entrada de una señal de +5V c) Entrada aislada mediante un optoacoplador En los tres circuitos anteriores se asume que se está empleando una de las cargas pull-up internas. Si se desconectan dichas cargas la línea correspondiente queda en estado de alta impedancia. 1.8 Actualización d e la memoria Flash interna El nuevo módulo EasyVR integra un programa gestor de arranque (bootloader) que permite actualizar el firmware interno del módulo, así como descargar nuevas “ Tablas de sonido” digitalizado sobre la memoria. El gestor se activa cuando, durante la conexión de alimentación o generación de Reset, la patilla /XM se mantiene a nivel alto. Esta patilla se puede controlar fácilmente mediante un jumper que la conecte con una resistencia pull-up externa cuando nos interese. Ver la figura 11. Figura 11. Control de la patilla /XM Para descargar una actualización del firmware o una tabla de sonidos al módulo EasyVR, se desconecta la alimentación. Se cierra el jumper y se vuelve a conectar, con lo que la patilla /XM queda a nivel “1”. En el modo normal de trabajo, el jumper debe estar abierto. De esta forma la patilla /XM queda a nivel “0” mediante la resistencia pull-down interna. El valor de la resistencia pull-up depende de la tensión de alimentación empleada. Para calcula la tensión en la patilla /XM cuando el jumper está cerrado, se emplea la siguiente ecuación (se trata de un divisor de tensión):
1 1
Si se desea que la patilla /XM una tensión de 3V (nivel alto), despejamos R y nos queda:
1000 1000 3
Los valores más utilizados son de 100 Ω o 680Ω para una alimentación de 3.3V o de 5V respectivamente.
7
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
2.- EasyVR Comm ander: EL INTERFACE GRAFICO DE USUARIO (GUI) Se trata de una aplicación para Windows que permite usar y configurar el módulo EasyVR de una forma muy sencilla e intuitiva. Basta conectarlo con el canal serie de un PC mediante algún tipo de circuito de interface TTL-RS232 como el mostrado en la figura 3. También se puede emplear el interface que incluye el laboratorio USBPIC’School tal y como se mostró en las figuras 4 y 5. 2.1 Estableciendo la comunicación Una vez instalado el programa EasyVR GUI y realizadas las conexiones eléctricas entre el módulo y el COMx del PC, ejecutamos la aplicación. Nos aparecerá una ventana de trabajo como la mostrada en la figura 12.
Figura 12. El área de trabajo
En el ángulo superior izquierdo tenemos un desplegable que permitirá seleccionar el canal COM disponible en nuestro PC. También disponemos de dos botones para la conexión/desconexión de la comunicación entre el módulo EasyVR y el PC. En la parte superior central existen una serie de botones con las diferentes tareas que podemos realizar con el módulo: añadir/editar/borrar comandos, enseñanza de las voces asociadas a los comandos, reconocimiento de esas voces, reproducción de sonidos, etc. Cada vez que se establece la comunicación el software EasyVR Commander lee el contenido del módulo en su totalidad y lo traslada a las diferentes áreas de trabajo: el área de grupos y el área de comandos. En el área de grupos aparecen los grupos 0-16 disponibles para almacenar las voces definidas por el usuario (SD) y otros tres grupos llamados “Wordset 1-3” donde están almacenadas las voces pregrabadas o voces SI. Al lado de cada grupo aparecerá también el nº de voces que contiene el mismo. Se recuerda que en el módulo se pueden grabar un TOTAL de 32 voces SD definidas por el usuario. Lo que pasa es que estas voces se pueden almacenar o clasificar en diferentes grupos si fuera necesario. Abajo del todo hay un último grupo, SoundT, donde se pueden almacenar diferentes sonidos digitalizados para su posterior reproducción. En el área de comandos se Editan/Visualizan las etiquetas o comandos asociados a las voces y qué posición ocupan dentro de un determinado grupo. Un comando o etiqueta no es ni más ni menos que una cadena ASCII de hasta 32 caracteres. Toda etiqueta o comando debe estar asociado a una voz o viceversa, durante la fase de enseñanza. De esta forma, cuando el módulo reconozca una voz, devuelve el comando o etiqueta asociada a la misma. Sólo se admiten etiquetas formadas por los caracteres ASCII en mayúsculas desde la A a la Z. 2.2 Las voces SI pre defini das Vienen grabadas de fábrica y no pueden ser modificadas. Pueden ser reconocidas en 6 idiomas diferentes: Inglés, Italiano, Japonés, Alemán, Español y Francés. Están almacenadas en los grupos llamados Trigger, Wordset
8
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
1, Wordset 2 y Wordset 3. La tabla de la figura 13 muestra, según el idioma elegido, los grupos con las etiquetas o comandos (y sus voces) que contienen. Para visualizarlas basta con seleccionar, en el área de grupos, el grupo deseado.
Figura 13. Tabla resumen de lcomandos y voces predefinidos (SI) Vamos a realizar un primer ejemplo de reconocimiento de voces pre definidas SI. Para ello: 1. Seleccionamos, mediante el botón “Set Language”, el idioma deseado: Inglés (por defecto), Italiano, Japonés, Alemán, Español o Francés (elige el que mejor pronuncies). 2. Seleccionamos el grupo en que se encuentran las voces a reconocer, por ejemplo el Wordset 3. 3. Mediante el botón “Test Group” iniciamos el reconocimiento. 4. Dictamos cualquiera de las voces disponibles en el grupo seleccionado y en el idioma elegido.
9
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
5. Si la voz es reconocida, la etiqueta o comando asociada a ella quedará resaltada. 6. Repetir el proceso con diferentes voces de ese grupo o de cualquier otro. 7. Si una vez se inicia el proceso de reconocimiento, se tarda un cierto tiempo en dictar la voz, aparecerá un mensaje de rebasamiento del tiempo “ Timerout expired ”. En la figura 14 se muestra el resultado de reconocer una voz. En primer lugar en el área de grupos aparece resaltado el grupo Wordset 3 seleccionado (que tiene 11 voces). En el área de datos aparece resaltada en verde la etiqueta o comando correspondiente a la voz pronunciada (p.e. “ FIVE”) que ocupa la posición 5 del grupo seleccionado.
Figura 14. Reconocimiento de una voz 2.3 Las voces SD definidas por el usuario Son las que puede grabar el usuario en cualquier idioma, para luego ser reconocidas. El máximo de voces admitidas es de 32 y pueden ser organizadas en diferentes grupos según convenga. 2.3.1 Edición de etiquetas y com andos Como ya se ha comentado, una etiqueta o comando no es más que una cadena ASCII que posteriormente se asociará a una voz de forma que, cuando esta sea reconocida, el sistema nos responda con ese comando asociado. En primer lugar vamos a crear o editar una serie de comandos. Para ello: 1. Seleccionamos el grupo deseado (p.e. el “Group 1”) 2. Mediante el botón “ Add Command” y/o “Insert Command” vamos añadiendo todas las etiquetas o comandos deseados. Proponemos que sean los mostrados en la figura 15. 3. Podemos emplear los botones “Remove Command” y/o “Rename Command” para borrar y/o renombrar (reeditar) una etiqueta o comando cualquiera de la lista. 4. Para las etiquetas o comandos sólo se admiten los caracteres ASCII de la A a la Z en mayúsculas. 5. Se puede apreciar que a cada comando se le asigna un número que se corresponde con la posición o índice de ese comando respecto al grupo en que se encuentra.
10
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
6. En el área de grupos, el grupo seleccionado, va representando el número de comandos que contiene según se van añadiendo. 7. Repetir el proceso para editar los comandos que se muestran en la figura 16 y que se introducen en el grupo 16. Estos grupos y comandos asociados serán empleados en los ejemplos de programación que se propondrán más adelante.
Figura 15. Edición de comandos en el grupo 1
Figura 16. Edición de comandos en el grupo 16
11
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
2.3.2 El cic lo de enseñanza Consiste en grabar las voces que se asociarán a los comandos editados anteriormente y que se usarán durante el reconocimiento. Para ello: 1. 2. 3. 4. 5.
Seleccionar el grupo al que pertenece el comando al que queremos asociar una voz. Seleccionar el comando propiamente dicho Mediante el botón “Train Command ” se inicia el ciclo de enseñanza. Disponemos de un cierto tiempo para dictar la voz que queramos Esa voz hay que volver a dictarla por 2ª vez para tener una mayor garantía en los posteriores reconocimientos. 6. Observaremos que a la derecha del comando aparece un valor que expresa el nº de veces (2) que la voz ha sido enseñada, seguido de OK cuando finaliza el ciclo. 7. Si rebasamos el tiempo o si la repetición de la voz por 2ª vez no corresponde con la de la 1ª, aparecerá el correspondiente mensaje de error. 8. Repetimos el proceso con todos los comandos disponibles en todos los grupos. Se debe indicar que, aunque es muy frecuente que una voz coincida con su correspondiente comando, esto no tiene porqué ser necesariamente así. Hay una asociación entre voz y comando o etiqueta aunque sean diferentes. Por ejemplo a la etiqueta “UNO” le podemos asociar la voz “HOLA”. Durante el posterior, reconocimiento cuando dictemos la voz “HOLA”, el módulo nos responderá con la etiqueta asociada “UNO” y la posición que ocupa dentro del grupo. 2.3.3 El reconocim iento A estas alturas ya tenemos nuestro módulo EasyVR con una serie de etiquetas y voces SD definidas por nosotros, los usuarios. Para el reconocimiento de las mismas basta seguir los mismos pasos que se hicieron anteriormente con el reconocimiento de voces predefinidas SI. Se resumen a continuación 1. 2. 3. 4. 5. 6.
Seleccionamos el grupo en que se encuentran las voces a reconocer, por ejemplo el Group 1. Mediante el botón “Test Group” iniciamos el reconocimiento. Dictamos cualquiera de las voces disponibles en el grupo seleccionado. Si la voz es reconocida, la etiqueta o comando asociada a ella quedará resaltada. Repetir el proceso con diferentes voces de ese grupo o de cualquier otro. Si una vez se inicia el proceso de reconocimiento, se tarda un cierto tiempo en dictar la voz, aparecerá un mensaje de rebasamiento del tiempo “ Timerout expired ”.
3.- CREAR Y USAR TABLAS DE SONIDOS El módulo EasyVR puede también reproducir sonidos de cualquier tipo (música, voces, señales acústicas, etc.) previamente almacenados en su memoria flash interna. El módulo incorpora de serie el sonido “beep”. Los sonidos se organizan en lo que se llama una “ Tabla de sonidos ” que el usuario debe generar mediante la aplicación QuickSynthesis 5 (QS5) de la firma Sensory. Esta aplicación se instala cuando instalamos el programa EasyVR Commander que usamos anteriormente. Para obtener más información sobre ella, podemos recurrir a su propia ayuda (en inglés). De momento, vamos a tratar de resumir los pasos más importantes que debemos seguir. 1. Preparamos los archivos de audio que queremos reproducir mediante el módulo EasyVR. Estos archivos deben tener formato WAV, con 16 bits sin compresión y mono de 22050Hz. Para crea este tipo de archivos existen gran cantidad de programas y aplicaciones. En MSE hemos empleado el “ Grabador de sonidos ” incluido en las plataformas Windows. En el disco de usuario se incluye la carpeta “ Sonidos ” con una total de 11 archivos tipo WAV con diferentes mensajes hablados. 2. Abrir la aplicación QuickSynthesys 5 y crear un nuevo proyecto especificando la familia RSC4. A continuación se nos pide el nombre del proyecto (p.e.” Sonidos_MSE” ). 3. Vamos añadiendo cada uno de los ficheros WAV con los que queremos construir la “Tabla de sonidos ” para su posterior grabación y reproducción en el módulo EasyVR. Con cada archivo añadido se debe indicar el
12
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
tipo de compresión que se le va a aplicar. En la figura 17 se muestra la lista archivos WAV con los que vamos a construir la “ Tabla de sonidos ”, y la compresión asignada a cada uno. Se pueden identificar perfectamente los archivos que hay en nuestra carpeta “ Sonidos ”.
Figura 17. Añadiendo ficheros WAV para construir la “Tabla de sonidos” La compresión para cada archivo tiene que ver con la calidad de reproducción y el tiempo total de reproducción disponible en el módulo EasyVR. En general, a menor compresión más calidad, aunque también ocupa mayor espacio en la memoria flash del módulo, por lo que el tiempo total de reproducción será menor. La siguiente tabla nos puede dar una idea aproximada de la relación entre calidad y tiempo disponible. Nosotros hemos elegido el modelo SX-6 de 8KHz de compresión. Se puede experimentar con otros modelos y quedarlos con el que nos proporciona una mejor relación calidad/duración. Compresión SX-2 SX-3 SX-4 SX-5 SX-6 ADPCM de 4 bits OCM de 8 bits
Tiempo disponible (8KHz) 8.7 minutos 7.6 minutos 6.8 minutos 6.1 minutos 5.6 minutos 87 segundos 45 segundos
Tiempo disponib le (9.3KHz) 7.5 minutos 6.6 minutos 5.9 minutos 5.2 minutos 4.8 minutos No disponible 38 segundos
4. Seleccionamos todos los archivos de la lista y procedemos a comprimirlos mediante el botón “Compress”. 5. Mediante el botón “Build” o Ctrl+B construimos el proyecto para obtener la “ Tabla de sonidos ”. Debemos usar los ajustes por defecto: “ Build linkable module ”, “Load in CONST space” y “Load above or at:0 ”. 6. Debemos guardar el proyecto y, si procede, volverlo a construir para tener la versión más actualizada posible. En nuestro ejemplo el proyecto se llama “ Sonidos_MSE.qxp ”.
13
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
Una vez que, con los pasos anteriores, hemos obtenido la “ Tabla de sonidos ”, debemos ahora descargarla sobre el módulo EasyVR tal y como se comentó en el apartado “ 1.8 Actualización de la memoria Flash interna ”. Los pasos se resumen a continuación: 1. Desconectar la comunicación entre la aplicación EasyVR Commander y el módulo (“Disconnect”). 2. Desconectar la alimentación del módulo EasyVR y cerrar el jumper según el esquema de la figura 11. Con esto conectamos la patilla /XM a Vcc a través de la resistencia. Volvemos a conectar la alimentación con lo que el módulo está en el modo de actualización del firmware o de descarga de la “ Tabla de sonidos ”. 3. Re establecer la comunicación entre el programa EasyVR Commander y el módulo (“Connect”). Observamos que el botón “Update Sound Table” queda habilitado. 4. Pulsamos este botón. Se abre una ventana de dialogo que nos permite buscar el fichero con la “ Tabla de sonidos ” que hemos obtenido mediante la aplicación Quick Sinthesis 5. En el ejemplo, dicho fichero se llamaba “Sonidos_MSE.qxp”. 5. Aparece una ventana como la mostrada en la figura 18. En ella se aprecia la lista de los sonidos que compilamos en el proyecto anterior. Activamos la casilla “Slow transfers” y pulsamos “Download”. Debemos esperar un cierto tiempo para que dicha tabla de sonidos se grabe sobre la memoria flash del módulo EasyVR.
Figura 18. Descarga de la Tabla de sonidos
6. Desconectamos la alimentación del módulo y retiramos el jumper. La patilla /XM queda ahora conectada a nivel “0” gracias a la resistencia pull-down interna. Volvemos a conectar la alimentación y re establecemos la comunicación entre EasyVR Commander y el módulo. ¡¡ LISTO !! Ahora la memoria flash de nuestro módulo EasyVR contiene las voces SD que definimos anteriormente en diferentes grupos, y los sonidos que acabamos de grabar. Estos últimos se pueden ver en el área de grupos, en el grupo llamado “ – SoundT…” como se muestra en la figura 19. Para reproducir cualquiera de ellos basta con seleccionarlo y pulsar el botón “Play Sound” representado mediante un altavoz. Sobra decir que es necesario tener conectado un altavoz de 8 Ω entre las patillas 1y 2 del conector J2 (salida PWM).
14
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
Figura 19. Reproducción de un sonido de la Tabla de sonidos 4.- EL PROTOCOLO DE COMUNICACIÓN DEL MODULO EasyVR Este es el tema más espinoso. Sin embargo gracias al protocolo de comunicación del EasyVR nos será posible realizar nuestras propias aplicaciones a medida. Efectivamente, el EasyVR se puede conectar, además de a un PC, a cualquier otro sistema de control basado en microcontroladores como pueden ser los PIC’s, Basic Stamp, Atmel, Arduino, etc… que actuarán como Host. El EasyVR emplea un UART como interface estándar de comunicación con niveles lógicos compatibles TTL de acuerdo a la tensión con la que se le alimente (3.3-5V). Las conexiones entre el EasyVR y el microcontrolador principal (Host MCU) son compatibles a nivel eléctrico. Lo único que se debe tener en cuenta es que la señal ETX de transmisión de datos del EasyVR debe conectarse con la de recepción RX del controlador y viceversa. Es decir, las señales se deben cruzar como se muestra en la figura 20. Figura 20. Conexión entre el EasyVR y un Host Por defecto, al conectar la alimentación, la configuración de la comunicación es de 9600 baudios, 8 bits de datos, 1 de stop y sin paridad. Los baudios pueden configurarse en el rango de 9600 hasta 115200. En la comunicación solo se emplean caracteres ASCII imprimibles, lo que permite el control de EasyVR desde cualquier software de comunicación para PC como, por ejemplo, el hyperterminal de Windows. Se siguen los siguientes criterios: Los comandos que se trasmiten desde el Host al módulo por la línea TX son siempre caracteres en minúsculas. Por su parte el EasyVR responde al Host por la línea RX unos caracteres de estado que también son siempre en minúsculas. •
15
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
•
•
•
•
•
•
www.microcontroladores.com
[email protected]
Los argumentos o parámetros necesarios tanto para los comandos transmitidos como los de estado recibidos, son siempre caracteres en mayúsculas. Cada comando que transmite el Host por la línea TX con los argumentos o parámetros necesarios (cero o más caracteres), genera la correspondiente respuesta por parte del EasyVR que se recibe por la línea RX. Esta respuesta también puede tener parámetros o argumentos de cero o más caracteres. Existe un retardo mínimo entre cada byte enviado al Host por parte del EasyVR, que por defecto es de 20mS. Se puede configurar en rangos que van de 0 a 9 ms, de 10 a 90 ms y de 100mS a 1 s. Esto permite adaptarse a la velocidad de proceso alta o baja por parte del Host. El flujo de información lo controla el Host en todo momento. Cada byte que manda el EasyVR como réplica a un determinado comando, debe ser reconocido por parte del Host que le envía el carácter espacio (0x20) para recibir así los sucesivos bytes de respuesta si los hubiera. Los comandos y/o argumentos incorrectos quedan reflejados por el correspondiente byte de estado que envía el EasyVR al Host para su oportuno tratamiento. Por otra parte, si el Host no envía todos los bytes de argumentos o parámetros necesarios por un determinado comando, este es ignorado por parte del módulo EasyVR Cada vez que se conecta la alimentación el módulo EasyVR queda en el modo sleep de bajo consumo. Para iniciar la comunicación basta con que el Host le mande cualquier carácter.
4.1 Los argumentos Algunos comandos necesitan argumentos o parámetros numéricos para su correcta ejecución. Los valores numéricos de esos parámetros están en el rango de -1 hasta 31. Sin embargo, como ya se ha comentado, la comunicación con el módulo EasyVR se realiza siempre mediante caracteres ASCII imprimibles. Así pues, los valores numéricos de los parámetros, habrá que codificarlos en su equivalente carácter ASCII y viceversa. Se sigue el siguiente criterio: partiendo del carácter ‘@’ (0x40) y de forma correlativa, se representan los valores del -1 al 31. Para los valores positivos del 0 al 31 basta con emplear el carácter ‘A’ (0x41) como offset o desplazamiento. ASCII HEX Valor
‘@’ 0x40 -1
‘A’ 0x41 0
‘B’ 0x42 1
‘C’ 0x43 2
‘D’ 0x44 3
----------
‘_’ 0x5F 30
‘`‘ 0x60 31
4.2 Los comandos A continuación se exponen todos los comandos aceptados por el módulo EasyVR. Recordemos que los argumentos o parámetros numéricos que precisan alguno de ellos deben ser codificados realmente por su equivalente carácter ASCII imprimible, en mayúsculas, según la tabla anterior. NOMBRE COD./DESCRIPCION ARGUMENTOS RESPUESTA
CMD_BREAK ‘b’ (0x62) Aborta la ejecución de cualquier comando previo Ninguno STS_SUCCESS, STS_INTERR
NOMBRE CMD_SLEEP COD./DESCRIPCION ‘s’ (0x73) Coloca al módulo EasyVR en uno de los modos sleep de bajo consumo [1] Modo sleep (0-8) ARGUMENTOS
RESPUESTA
0=se reactiva (wake up) al recibir un carácter 1=se reactiva (wake up) al recibir un sonido agudo o un carácter 2=se reactiva (wake up) al recibir un sonido grave o un carácter 3-5=se reactiva (wake up) al recibir una doble palmada o un carácter 6-8=se reactiva (wake up) al recibir una triple palmada o un carácter STS_SUCCESS
16
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
NOMBRE CMD_KNOW COD./DESCRIPCION ‘k’ (0x6B) Ajusta el nivel de reconocimiento de las voces pre definidas SI [1] 0= nivel bajo: se obtienen muchos resultados válidos ARGUMENTOS 2= típico: valor por defecto 4= nivel alto: se obtienen pocos resultados válidos y hay que pronunciar la voz con precisión STS_SUCCESS RESPUESTA NOMBRE CMD_LEVEL COD./DESCRIPCION ‘v’ (0x76) Ajusta el nivel de reconocimiento de las voces SD definidas por el usuario [1] 1=fácil, 2=por defecto, 5=difícil ARGUMENTOS
RESPUESTA
Un valor alto supone una mayor precisión en la dicción y por tanto más errores de reconocimiento STS_SUCCESS
NOMBRE COD./DESCRIPCION ARGUMENTOS RESPUESTA
CMD_LANGUAGE ‘l’ (0x6C) Ajusta el lenguaje empleado en el reconocimiento de las voces SI [1] 0= Inglés, 1= Italiano, 2= Japonés, 3= Alemán, 4= Español y 5= Francés STS_SUCCESS
NOMBRE COD./DESCRIPCION ARGUMENTOS RESPUESTA
CMD_TIMEOUT ‘o’ (0x6F) Ajusta el tiempo de espera durante el reconocimiento de una voz [1] -1= defecto, 0= infinito, 1 a 31= segundos STS_SUCCESS
NOMBRE CMD_RECOG_SI COD./DESCRIPCION ‘i’ (0x69) Activa el ciclo de reconocimiento de voces predefinidas SI en el grupo o wordset especificado ARGUMENTOS [1] 0-3= Nº del grupo o wordset donde se realizará el reconocimiento RESPUESTA STS_SIMILAR, STS_TIMEOUT, STS_ERROR NOMBRE CMD_TRAIN_SD COD./DESCRIPCION ‘t’ (0x74) Activa el ciclo de enseñanza para una nueva voz SD definida por el usuario ARGUMENTOS [1] Grupo donde se grabará la nueva voz: 0= Trigger, 1-15= grupos del 1 al 15, 16=grupo 16 o password [2] Posición dentro del grupo en donde se grabará la voz (0 a 31) RESPUESTA STS_SUCCESS, STS_RESULT, STS_TIMEOUT, STS_ERROR NOMBRE CMD_GROUP_SD COD./DESCRIPCION ‘g’ (0x67’ Permite insertar un nuevo comando o etiqueta [1] Grupo donde se insertará el nuevo comando: 0= Trigger, 1-15= grupos ARGUMENTOS del 1 al 15, 16=grupo 16 o password [2] Posición dentro del grupo a partir de la cual se insertara la nueva etiqueta o comando (0 a 31) STS_SUCCESS, STS_OUT_OF_MEM RESPUESTA
17
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
NOMBRE CMD_UNGROUP_SD COD./DESCRIPCION ‘u’ (0x75) Borra un comando o etiqueta ARGUMENTOS [1] Grupo de donde se borrará el comando: 0= Tigger, 1-15= grupos del 1 al 15, 16=grupo 16 o password [2] Posición dentro del grupo de donde se quita el comando o etiqueta (0 a 31) STS_SUCCESS RESPUESTA NOMBRE COD./DESCRIPCION ARGUMENTOS RESPUESTA
CMD_RECOG_SD ‘d’ (0x64) Inicia el ciclo de reconocimiento de una voz SD definida por el usuario [1] Grupo donde se encuentran las voces a reconocer (0 a 15) STS_SUCCESS, STS_TIMEOUT, STS_ERROR
NOMBRE CMD_ERASE_SD COD./DESCRIPCION ‘e’ (0x65) Borra una voz definida por el usuario (se supone previamente grabada) ARGUMENTOS [1] Grupo donde se borrará la voz: 0= Tigger, 1-15= grupos del 1 al 15, 16=grupo 16 o password [2] Posición dentro del grupo en que se encuentra la voz a grabar (0 a 31) STS_SUCCESS RESPUESTA NOMBRE CMD_NAME_SD COD./DESCRIPCION ‘n’ (0x6E) Almacena los caracteres que forman la etiqueta o comando [1] Grupo donde se almacenará la etiqueta: 0= Tigger, 1-15= grupos del 1 al ARGUMENTOS 15, 16=grupo 16 o password [2] Posición dentro del grupo donde se desea grabar los caracteres que definen una etiqueta o comando (0 a 31) [3] Número de caracteres que conforman la etiqueta o comando (0 a 31) [4 a n] Caracteres de la cadena que forman la etiqueta. Deben ser caracteres ASCII de la A al ‘ ´ ‘. Máximo 32 RESPUESTA STS_SUCCESS NOMBRE CMD_COUNT_SD COD./DESCRIPCION ‘c’ (0x63) Obtiene el número de comandos o etiquetas que tiene almacenadas el grupo indicado [1] Grupo del que se quiere averiguar cuántas etiquetas o comandos tiene: ARGUMENTOS 0= Tigger, 1-15= grupos del 1 al 15, 16=grupo 16 o password RESPUESTA STS_COUNT NOMBRE CMD_DUMP_SD COD./DESCRIPCION ‘p’ (0x70) Lee la cadena de caracteres que forman una etiqueta o comando [1] Grupo donde se encuentra el comando: 0= Tigger, 1-15= grupos del 1 al ARGUMENTOS 15, 16=grupo 16 o password [2] Posición dentro del grupo en que se encuentra la etiqueta o comando (0 a 31) RESPUESTA STS_DATA
18
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
NOMBRE CMD_MASK_SD COD./DESCRIPCION ‘m’(0x6D) Devuelve una máscara de 32 bits que expresa qué grupos están vacíos o bien contienen alguna etiqueta/comando o voz Ninguno ARGUMENTOS STS_MASK RESPUESTA NOMBRE CMD_RESETALL COD./DESCRIPCION ‘r’ (0x72) Borra todos las etiquetas/comandos y voces SD de todos los grupos (excepto los predefinidos SI) ‘R’(0x52) Carácter de confirmación. El módulo EasyVR queda virgen ARGUMENTOS Ninguno RESPUESTA CMD_SUCCESS NOMBRE COD./DESCRIPCION ARGUMENTOS RESPUESTA
CMD_ID ‘x’ (0x78) Ninguno STS_ID
NOMBRE COD./DESCRIPCION ARGUMENTOS RESPUESTA
CMD_DELAY ‘y’ (0x79) Ajusta el retardo de la transmisión [1] Tiempo: 0-10=0-10mS, 11-19=20-100mS, 20-28=200-1000mS STS_SUCCESS
NOMBRE COD./DESCRIPCION ARGUMENTOS RESPUESTA
CMD_BAUDRATE ‘a’ (0x61) Ajusta la velocidad de comunicación [1] Baudios: 1= 115200; 2= 57600; 3= 38400; 6= 19200 y 12= 9600 STS_SUCCESS
Devuelve el código o versión del firmware interno del módulo EasyVR
NOMBRE CMD_QUERY_IO COD./DESCRIPCION ‘q’ (0x71) Configura o modifica las líneas de E/S de propósito general. ARGUMENTOS [1] Nº de línea: 1=patilla IO1, 2=patilla IO2 y 3=patilla IO3 [2] Modo: 0=Salida a “0”, 1= salida a “1”, 2=entrada sin pull-up, 3=entrada con pull-up de 10K y 4=entrada con pull-up de 200K RESPUESTA STS_SUCCESS (en los modos 0 y1) o STS_PIN (en los modos 2-4) NOMBRE CMD_PLAY_SX COD./DESCRIPCION ‘w’ (0x6E) Reproducción de los sonidos de la Tabla de sonidos ARGUMENTOS [1] [2] Forman el índice en la tabla del sonido a reproducir (índice=[1]*32+[2]) [3] Volumen de la reproducción: 0= mínimo, 15=escala completa, 31=doble ganancia STS_SUCCESS, STS_ERROR RESPUESTA NOMBRE COD./DESCRIPCION ARGUMENTOS RESPUESTA
CMD_DUMP_SX ‘h’ (0x68) Lee los datos de la Tabla de sonidos Ninguno STS_TABLE_SX, STS_OUT_OF_MEM
19
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
4.3 Las respu estas Todos los comandos transmitidos por el Host generan la correspondiente respuesta por parte del EasyVR, que debe ser recibida y analizada por el Host. Estas respuestas constan siempre en un carácter o código y a su vez pueden tener también argumentos o parámetros numéricos. Estos se representarán mediante los correspondientes caracteres ASCII imprimibles como se explicó con anterioridad. Se recuerda que, cada vez que el EasyVR transmite un byte de parámetro al Host, este debe transmitir el carácter espacio (0x20) para recibir el siguiente byte. NOMBRE STS_MASK COD./DESCRIPCION ‘k’ (0x6B) Devuelve 8 bytes que representan la máscara que indica qué grupos están vacíos y cuáles no ARGUMENTOS [1 – 8] De cada byte del argumento sólo se emplean los 4 bits de menos peso. Se obtiene así una máscara de 32 bits. El bit de menos peso representa al grupo 0, el siguiente bit al grupo 1 y así sucesivamente. Sin un bit está a “0” indica que su correspondiente grupo está vacío. Si el bit está a “1” indica que su correspondiente grupo contiene alguna etiqueta/comando y voz. EN RESPUESTA A CMD_MASK_SD NOMBRE COD./DESCRIPCION ARGUMENTOS EN RESPUESTA A
STS_COUNT ‘c’ (0x63) Devuelve el nº de comandos o etiquetas de un determinado grupo [1] Número de etiquetas o comandos existentes en un grupo (0 a 31) CMD_COUNT_SD
NOMBRE STS_AWAKEN COD./DESCRIPCION ‘w (0x77) Re activación o wake up del módulo tras la conexión de la alimentación o tras salir de cualquiera de los modos sleep de bajo consumo Ninguno ARGUMENTOS A cualquier carácter recibido tras conectar la alimentación o tras haber ejecutado EN RESPUESTA A uno de los modos sleep de bajo consumo NOMBRE STS_DATA COD./DESCRIPCION ‘d’ (0x64) Devuelve datos [1] Información de la enseñanza: -1=vacío, 1 a 6= número de veces que se ARGUMENTOS grabó correctamente una voz SD; >8= Conflicto en la voz SD grabada; >16 conflicto en una voz SI [2] Posición dentro del grupo (0 a 31) [3] Número de caracteres que tiene la etiqueta o comando (0-31) [4 a n] Caracteres de la cadena que forman la etiqueta. EN RESPUESTA A CMD_DUMP_SD NOMBRE COD./DESCRIPCION ARGUMENTOS EN RESPUESTA A
STS_ERROR ‘e’ (0x65) Error en el reconocimiento de una voz [1-2] Devuelve 2 valores de 4 bits que forman un byte con un código de error CMD_RECOG_SI, CMD_RECOG_SD, CMD_TRAIN_SD, CMD_PLAY_SX
NOMBRE COD./DESCRIPCION ARGUMENTOS EN RESPUESTA A
STS_INVALID ‘v’ (0x76) Comando o argumento no válido Ninguno A cualquier comando o argumento no válido que transmite el Host al EasyVR
20
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
NOMBRE COD./DESCRIPCION ARGUMENTOS EN RESPUESTA A
STS_TIMEOUT ‘t’ (0x74) Sobre pasamiento en el tiempo Ninguno CMD_RECOG_SI, CMD_RECOG_SD, CMD_TRAIN_SD
NOMBRE COD./DESCRIPCION ARGUMENTOS EN RESPUESTA A
STS_INTERR ‘i’ (0x69) Reconocimiento interrumpido Ninguno CMD_BREAK durante un ciclo de enseñanza o reconocimiento de una voz
NOMBRE COD./DESCRIPCION ARGUMENTOS EN RESPUESTA A
STS_SUCCESS ‘o’ (0x6F) Ejecución OK sin errores Ninguno CMD_BREAK, CMD_DELAY, CMD_BAUDRATE, CMD_TIMEOUT, CMD_KNOW CMD_LEVEL, CMD_LANGUAGE, CMD_SLEEP, CMD_GROUP_SD, CMD_UNGROUP_SD, CMD_ERASE_SD, CMD_NAME_SD, CMD_RESETALL, CMD_QUERY_IO, CMD_PLAY_SX
NOMBRE STS_RESULT COD./DESCRIPCION ‘r’ (0x72) Reconocimiento de una voz SD definida por el usuario durante la enseñanza o el reconocimiento propiamente dicho ARGUMENTOS [1] Posición dentro del grupo a la que pertenece la voz SD recién reconocida (0 a 31) EN RESPUESTA A CMD_RECOG_SD, CMD_TRAIN_SD NOMBRE STS_SIMILAR COD./DESCRIPCION ‘s’ (0x73) Reconocimiento o parecido con una voz predefinida SI ARGUMENTOS [1] Posición dentro del grupo a la que pertenece la voz SI recién reconocida (0 a 31) CMD_RECOG_SI EN RESPUESTA A NOMBRE COD./DESCRIPCION ARGUMENTOS EN RESPUESTA A
STS_OUT_OF_MEM ‘m’(0x6D) Error, la memoria del módulo EasyVR está llena Ninguno CMD_GROUP_SD, CMD_DUMP_SX
NOMBRE COD./DESCRIPCION ARGUMENTOS EN RESPUESTA A
STS_ID ‘x’ (0x78) [1] CMD_ID
NOMBRE COD./DESCRIPCION ARGUMENTOS EN RESPUESTA A
STS_PIN ‘p’ (0x70) Proporciona el estado de una patilla de entrada [1] Nivel lógico: 0= nivel “0”, 1= nivel “1” CMD_QUERY_IO
Proporciona información del firmware interno del EasyVR Identificación de la versión
21
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
NOMBRE STS_TABLE_SX COD./DESCRIPCION ‘d’ (0x64) Devuelve datos de la tabla de sonidos ARGUMENTOS [1] [2] Contador de 10 bits que apunta a la tabla (contador=[1]*32+[2]) [3] Tamaño de la tabla (0-31) [4 a n] Texto del nombre de la tabla EN RESPUESTA A CMD_DUMP_SX 5.- LIBRERIAS En el CD-ROM, junto con los ejemplos propiamente dichos, se proporcionan dos librerías escritas tanto en C (*.H) como en ensamblador (*.INC), que incluyen una serie de funciones o rutinas que facilitan el empleo de la pantalla LCD del laboratorio USB-PIC’SCHOOL y del módulo de reconocimiento EasyVR. Estas librerías se deben incluir en nuestros programas fuente de aplicación mediante la directiva < include> 5.1 Librería LCD4bitsPIC16 Contiene funciones de propósito general para controlar una pantalla LCD alfanumérica mediante un controlador PIC de la familia PIC16FXXX y con un interface de 4 bits. En la siguiente tabla se resumen las funciones o rutinas que contiene esta librería. NOMBRE
PARAM. DE ENTRADA
PARAM. DE SALIDA
UP_LCD
Ninguno
Ninguno
LCD_INI
Ninguno
Ninguno
LCD_DATO
W=Contiene el carácter a
Ninguno
LCD_REG
visualizar W=Contiene el comando a ejecutar por parte de la pantalla LCD
DESCRIPCION Configura las líneas de E/S para adaptarlas a la pantalla LCD Rutina para la inicialización de la pantalla LCD según especificaciones del fabricante Envía a la pantalla el dato a visualizar en la posición actual del cursor Envía a la pantalla el comando que debe ejecutar
Ninguno
5.2 Librería Easy VR_16FXXX Contiene funciones específicas para controlar el módulo de reconocimiento de voz EasyVR desde un controlador PIC16FXXX. La siguiente tabla resume las funciones o rutinas contenidas en esta librería NOMBRE EasyVR_Serie
PARAM. DE ENTRADA Ninguno
PARAM. DE SALIDA EasyVR_Status=’o’
(0x6F)
Ninguno
EasyVR_Status=’o’
VR_ID
Ninguno
(0x6F) o ‘i’ (0x69) EasyVR_Dato1=Nº versión
de
VR_COUNT_SD
EasyVR_Grupo=Nº
EasyVR_Cont =Nº
de
VR_BREAK
VR_DUMP_SD
de grupo a inspeccionar EasyVR_Grupo=Nº de grupo a inspeccionar (016) de EasyVR_Pos=Nº posición dentro del grupo (0-32)
DESCRIPCION Inicia el EUART para la comunicación serie con el módulo de reconocimiento EasyVR. Por defecto esta se realizará a 9600 baudios, 8 bits de datos, 1 de stop y sin paridad. También espera el Wake Up del módulo tras un Power Down. Aborta cualquier operación en curso.
comandos EasyVR_Buff =etiqueta de EasyVR_Cont=Nº
caracteres de la etiqueta EasyVR_Dato1= Info. De la enseñanza EasyVR_Dato2= Posición conflictiva
Devuelve la identificación o versión del firmware interno del módulo de reconocimiento EasyVR. Devuelve el número de comandos (0-31) que hay en un determinado grupo Devuelve a partir de la posición de EasyVR_Buff la etiqueta o comando que haya en el grupo indicado y en la posición señalada dentro de ese grupo. La etiqueta de un comando puede tener un máximo de 32 caracteres.
22
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651 VR_KNOW
EasyVR_Dato1=Nivel
EasyVR_Status=’o’
(0x6F)
VR_LEVEL
EasyVR_Dato1=Nivel
EasyVR_Status=’o’
(0x6F)
VR_LANGUAGE
VR_TIMEOUT
EasyVR_Dato1=Nº
de
EasyVR_Status=’o’
idioma
(0x6F)
EasyVR_Dato1=segundos
EasyVR_Status=’o’
(0x6F)
VR_DELAY
VR_BAUDRATE
EasyVR_Dato1=mili
EasyVR_Status=’o’
segundos
(0x6F)
EasyVR_Dato1=baudios
EasyVR_Status=’o’
(0x6F)
VR_SLEEP
EasyVR_Dato1=modo
EasyVR_Status=’o’
(0x6F)
VR_RECOG_SD
EasyVR_Grupo=Nº
grupo (0 a 16)
de
EasyVR_Status=’r’ o ‘t’ o
‘e’ EasyVR_Pos =Posición
de la voz en el grupo EasyVR_Cont =Nº de caracteres de la etiqueta EasyVR_Buff = etiqueta EasyVR_dato1 y EasyVR_dato2= Códigos de error
www.microcontroladores.com
[email protected]
Ajusta el nivel de exigencia de reconocimiento para las voces predefinidas (SI). La variable EasyVR_Dato1 debe contener el valor del nivel: 0=nivel bajo (muchos resultados válidos), 2=valor típico (por defecto), 4=alto (pocos resultados válidos) Ajusta el nivel de exigencia de reconocimiento para las voces del usuario (SD). La variable EasyVR_Dato1 debe contener el valor del nivel: 0=nivel bajo (mínimo), 2=valor típico (por defecto), 5=nivel alto (máximo, pocos resultados válidos) Ajusta el lenguaje empleado para el reconocimiento de las voces predefinidas (SI). La variable EasyVR_Dato1 debe contener el valor del lenguaje: 0=Ingles, 1=Italiano, 2=Japones, 3=Alemán Ajusta el tiempo de respuesta o Time Out. Si durante la ejecución de determinados comandos se supera este tiempo, dicha ejecución se da por finalizado. La variable EasyVR_Dato1 se supone cargada con el valor a temporizar: -1 (0xFF)= defecto, 0=infinito, de 1 a 32 valor del Time Out en segundos Ajusta el tiempo mínimo que emplea el módulo EasyVR entre la transmisión de un byte y el siguiente. La variable EasyVR_Dato1 se supone cargada con el valor: 0-10= de 0 a 10mS, 11-19= de 20100mS, 20-28=de 200mS a 1s. Ajusta la velocidad de comunicación (baudios) entre el módulo EasyVR y el controlador. La variable EasyVR_Dato1 se supone cargada con el valor: 1=115200, 2=57600, 3=38400, 6=19200, 12=9600. Determina el modo power down (dormir) de bajo consumo. La variable EasyVR_Dato1 se supone cargada con el modo: 0= Despertar al recibir un carácter, 1= despertar con un silbido o al recibir, 2= despertar con un ruido o al recibir carácter, 3-5= con una doble palmada o al recibir un carácter, 6-8= con una triple palmada o al recibir un carácter. Activa el reconocimiento de una voz definida por el usuario (SD). En EasyVR_Grupo debe indicarse el grupo (0-16). En EasyVR_Status se devuelve: 'r' si la voz ha sido reconocida, 't' si ha habido sobre pasamiento en el tiempo o 'e' si ha habido error en el reconocimiento. En EasyVR_Pos se devuelve la posición dentro del grupo que ocupa la voz, en caso de ser reconocida. En este caso su correspondiente comando o etiqueta se almacena a partir de EasyVR_Buffer y EasyVR_Cont indicará el
23
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
VR_RECOG_SI
EasyVR_Grupo=Nº
de
grupo (0-3)
www.microcontroladores.com
[email protected]
EasyVR_Status=’s’, ‘t’ o
‘e’ EasyVR_Pos =
posición
dentro del grupo y EasyVR_dato1 EasyVR_dato2= Códigos de error
VR_ADD_SD
EasyVR_Grupo=Nº
de
grupo
EasyVR_Pos =’o’, ’e’, ‘m’
o ‘v’
EasyVR_Pos=Posición EasyVR_Buff =etiqueta
VR_TRAIN_SD
EasyVR_Grupo=Nº
de
grupo
EasyVR_Status=’o’, ‘e’ o
‘t’
EasyVR_Pos=Posición
VR_ERASE_SD
EasyVR_Grupo=Nº
de
EasyVR_Status=’o’
grupo EasyVR_Pos=Nº
de
posición VR_UNGROUP _SD
EasyVR_Grupo=Nº
de
EasyVR_Status=’o’
de
EasyVR_Status=’o’,
grupo EasyVR_Pos=Posición
VR_ADD _TRAIN_SD
EasyVR_Grupo=Nº
grupo EasyVR_Pos=Posición de EasyVR_Cont=Nº
caracteres
‘m’ o ‘v’
‘e’,
número de caracteres. En EasyVR_Dato1 y EasyVR_Dato2 se indica el código de error en caso de que lo hubiera. En caso de error o de Time Out, dicho buffer queda borrado. Activa el reconocimiento de una voz predefinida (SI). En EasyVR_Grupo debe indicarse el grupo (0-3). En EasyVR_Status se devuelve: 's' si la voz es similar, 't' si ha habido sobre pasamiento en el tiempo o 'e' si ha habido error en el reconocimiento. En EasyVR_Pos se devuelve la posición dentro del grupo que ocupa la voz en caso de ser similar. En EasyVR_Dato1 y EasyVR_Dato2 se indica el código de error en caso de que lo hubiera. Añade un nuevo comando o etiqueta SD. En EasyVR_Grupo se indicará el grupo donde se va a insertar, en EasyVR_Pos se indicará la posición dentro del grupo, En EasyVR_Cont se indica el número de caracteres de que consta el comando o etiqueta y, a partir de EasyVR_Buff, se supone almacenada la cadena ASCII que define el comando. En EasyVR_Status se devuelve 'o' si la ejecución es correcta, 'e' si hay error o 'm' si no hay memoria suficiente para almacenar el nuevo comando o 'v' si el comando o argumentos no son válidos. Añade una voz definida por el usuario (SD) a una determinada etiqueta o comando previamente añadida al módulo EasyVR (enseñanza). En EasyVR_Grupo se indica el grupo al que pertenecerá la nueva voz. En EasyVR_Pos se indica la posición de la voz dentro del grupo. En EasyVR_Status se devuelve 'o' si la función se ejecuta correctamente, 'e' si hay error y 't' si se produce un Timer Out durante la enseñanza. Borra una de las voces definidas por el usuario (SD). En EasyVR_Grupo se indica el grupo al que pertenecece la voz a borrar, en EasyVR_Pos se indica la posición dentro de ese grupo. En EasyVR_Status se devuelve 'o' si la función se ejecuta correctamente. Borra la etiqueta o comando asociado a una de las voces definidas por el usuario (SD). En EasyVR_Grupo se indica el grupo al que pertenecece la voz a borrar, en EasyVR_Pos se indica la posición dentro de ese grupo. En EasyVR_Status se devuelve 'o' si la función se ejecuta correctamente. Esta rutina engloba las funciones VR_ADD_SD y VR_TRAIN_SD en una única función: Añade un nuevo comando o etiqueta SD y seguidamente le asocia una nueva voz. En EasyVR_Grupo se indicará el grupo donde se va a insertar, en EasyVR_Pos se indicará la posición dentro del grupo, En EasyVR_Cont se indica el número de caracteres de que consta el comando o etiqueta, cuya cadena ASCII se supone almacenada a partir de EasyVR_Buff. En EasyVR_Status se
24
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
VR_ERASE _UNG_SD
EasyVR_Grupo=Nº
de
EasyVR_Status=’o’
grupo EasyVR_Pos =Posición
VR_MASK_SD
Ninguno
EasyVR_Status=’k’ EasyVR_Buff =máscara
VR_RESETALL
Ninguno
Ninguno
VR_PLAY_SX
EasyVR_Temp1 = 2 bits MSB. EasyVR_Temp2 = 8 bits LSB. EasyVR_Temp3 = volume (entre 0 y 31)
EasyVR_Status=’o’ o ‘e’
www.microcontroladores.com
[email protected]
devuelve 'o' si la ejecución es correcta, 'e' si hay error o 'm' si no hay memoria suficiente para almacenar el nuevo comando, 't' si se produce un Timer Out durante la enseñanza o 'v' si el comando o argumentos no son válidos. ;: Esta rutina engloba las funciones VR_ERASE_SD y VR_UNGROUP_SD en una única función: borra una voz y seguidamente borra la etiqueta o comando asociado a la misma. En EasyVR_Grupo se indica el grupo al que pertenecece la voz a borrar, en EasyVR_Pos se indica la posición dentro de ese grupo. En EasyVR_Status se devuelve 'o' si la función se ejecuta correctamente. Devuelve la máscara de los grupos no vacios. Dicha máscara consta de 4 bytes (32 bits) que se almacenan en hex. a partir de EasyVR_Buff, empezando por el de menos peso. Un bit 1 representa grupo usado o no vacio. P.e. la máscara = 00000000 00000000 01001000 00000101 representa que los grupos 0, 2, 11 y 14 están usados, el resto están vacios. En EasyVR_Status se devuelve 'k' Borra todos los comandos y grupos existentes Reproduce el sonido de la Tabla de sonidos. En las variables EasyVR_Temp1 y EasyVR_Temp2 se indica el índice de 16 bits del sonido a reproducir (entre 0 y 1023). EasyVR_Temp1 tiene los 2 bits de más peso y Easy_Temp2 los 8 bits de menos peso. En la variable EasyVR_Temp3 se indica el volumen de reproducción entre 0 y 31. En EasyVR_Status se devuelve 'o' al finalizar correctamente la reproducción o 'e' si hay error.
. 6.- EJEMPLO PRACTICOS Junto con el módulo de reconocimiento de voz se adjunta un CD-ROM con una serie de ejemplos y aplicaciones. Estos ejemplos, puramente didácticos, han sido realizados por Ingeniería de Microsistemas Programados con la única finalidad de facilitar el empleo del EasyVR. Están diseñados para el microcontrolador PIC16F88X y se proporcionan las librerías y los programas fuente escritos tanto en lenguaje C como en ensamblador. Son fácilmente adaptables a cualquier otro dispositivo y se han realizado sobre nuestro laboratorio de prácticas USB-PIC’SCHOOL, aunque se pueden implementar fácilmente sobre cualquier otra plataforma hardware. Esperamos que sean de ayuda a todos los usuarios que deseen incorporar la potencia y prestaciones de un sistema de reconocimiento de voz en todos sus proyectos y aplicaciones. 6.1 Ejemplo 1: Reconocimiento de voces predefinidas SI Objetivos Realizar una primera toma de contacto con el módulo de reconocimiento de voz EasyVR controlado desde un programa de aplicación del usuario. Se trata de reconocer las voces predefinidas SI alojadas en el grupo wordset 3 y que corresponden a los números del 0 al 10 que deberán pronunciarse en inglés.
25
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
Esquema La figura 21 muestra el esquema de conexiones necesario para implementar este ejemplo. Empleamos el laboratorio USB-PIC’SCHOOL conectando las líneas de RB7:RB0 del PIC con los leds de salida S7:S0. Por su parte el módulo EasyVR se alimenta con +5Vcc. Su línea ETX de transmisión se conecta con RC7/RX del PIC mientras que la línea de recepción ERX se conecta con la de transmisión RC6/TX del PIC. U49 6 5
SALIDAS DIGITALES
PWM2 PWM1
7 6 5 4 3 2 1 0 S S S S S S S S
MIC. 1 2
+5VCC
GND
ETX
VCC
ERX
EasyVR
4
RC7/RX
3
RC6/TX RB7 RB6 RB5RB4RB3 RB2RB1 RB0
Figura 21. Esquema de conexiones Comentarios El ejemplo controla las salidas RB7:RB0 con el dictado de las voces SI predefinidas “zero” a “seven” (en inglés). Cuando una voz es reconocida la salida correspondiente cambia de estado. Si se detecta un error de reconocimiento, todas las salidas producen una intermitencia. Si la voz no está comprendida entre 0 y 7 (en inglés) no se produce ningún cambio en las salidas. En el ejemplo se puede observar que, una vez reconocida una voz, se obtiene qué número de posición ocupa esa voz dentro del grupo. Dicho número permite calcular sobre qué salida se debe actuar. En la fotografía de la figura 22 se muestra el montaje realizado sobre el laboratorio USB-PIC’SCHOOL.
Figura 22. Montaje práctico del ejemplo 1 A pesar de su sencillez, este ejemplo nos permite intuir las posibilidades del módulo EasyVR de cara al control por voz de determinados procesos.
26
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
6.2 Ejemplo 2: Reconocimiento de voces SD definidas por el usuario Objetivos El ejemplo es similar al anterior. En esta ocasión se trata de realizar el reconocimiento de voces definidas por el usuario y en cualquier lenguaje. Vamos a emplear el grupo 1 donde se supone se han definido las voces del 0 al 9 en cualquier lenguaje (p.e. castellano) mediante el empleo del entorno EasyVR Commander, tal y como se explicó en el apartado 2.3 anterior. Esquema La figura 23 muestra el esquema de conexiones. Las salidas RB0:RB7 controlan los segmentos a:dp del display de las unidades del laboratorio. El módulo EasyVR se conecta como en el ejemplo anterior: ETX con RC7/RX y ERX con RC6/TX. U54
7 SEGMENTOS a b c d e f g dp AC DEC .
6
RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7
5
PWM2 PWM1 MIC.
1 2
GND VCC
ETX ERX
4
RC7/RX
3
RC6/TX
AC UN .I +5VCC
EasyVR
+5 Vcc
Figura 23. Esquema eléctrico del ejemplo 2 Comentarios Cuando se detecta una de las voces SD definidas por el usuario en el grupo 1, el programa extrae qué posición ocupa esa voz dentro de ese grupo. A partir de dicho número de posición se obtiene el código de 7 segmentos que hay que visualizar sobre el display. Si la voz no es reconocida el display se apaga. En la fotografía de la figura 24 se muestra el montaje sobre el laboratorio USB-PIC’SCHOOL. El resultado final es que sobre el display se visualiza el número de la voz dictada. Figura 24. Montaje práctico del ejemplo 2
6.3 Ejemplo 3: Reconocimiento de voces SD definidas por el usuario y visualización de las etiquetas Objetivos Este ejemplo reconoce una de las voces definidas por el usuario en el grupo 1. Sobre la pantalla LCD, además de visualizar el número que ocupa la voz dentro del grupo, se visualiza también la etiqueta o comando asociada a la misma.
27
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
PANTALLA LCD U50 6
2X16
Esquema
PWM2
5
PWM1
S W / 0 1 2 3 4 5 6 7 R R E D D D D D D D D
MIC. 1
4 5 6 7 8 9 0 1 2 3 4 1 1 1 1 1 RB3 RB2 RB1 RB0
2
GND
ETX
VCC
ERX
+5VCC
4
RC7/RX
3
RC6/TX
EasyVR
RA1 RA2 RA3
Se muestra en la figura 25. La pantalla LCD se gobierna mediante un interface de 4 bits con las líneas RB3:RB0. Las señales de control de la misma las proporcionan RA1, RA2 y RA3 que se conectan con E, R/W y RS respectivamente. El módulo EasyVR se conecta como en anteriores ocasiones.
Figura 25. Esquema eléctrico Comentarios La nueva aportación de este ejemplo es el extraer y visualizar el comando o etiqueta asociado a una voz. Como ya se ha explicado dicha etiqueta consiste en una cadena ASCII de caracteres imprimibles y que está asociada a una voz. Efectivamente, cuando se reconoce cualquiera de las voces SD definidas por el usuario en el grupo 1, el programa extrae y visualiza qué número de posición que ocupa dentro del grupo. A partir de ese número también obtiene y visualiza la cadena ASCII asociada a esa voz y ese número. La fotografía de la figura 16 muestra el montaje práctico del ejemplo.
Figura 26. Montaje práctico del ejemplo 3 sobre el laboratorio USBPIC’SCHOOL
Tanto las voces como sus correspondientes comandos o etiquetas asociadas se definieron según el apartado 2.3 de este documento. En cualquier caso hay que indicar que esa etiqueta NO tiene porqué coincidir con la voz. 6.4 Ejemplo 4: Reconocimiento de voces SD definidas por el usuario Objetivos Este importante ejemplo pretende servir para mostrar cómo los programas de aplicación del usuario también pueden realizar ciclos de enseñanza de voces y grabarlas sobre el módulo EasyVR junto con las etiquetas o comandos que queramos asociarlas. Todo ello lo vamos a realizar sobre el grupo 2 y con TOTAL independencia de un PC.
28
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
Esquema Se emplea el mismo esquema de conexiones que el empleado en la figura 25 del ejemplo anterior Comentarios El ejemplo es un poco más complicado que los anteriores, pero merece la pena analizarlo con cuidado ya que puede servir de referencia para posteriores aplicaciones. Empieza grabando las etiquetas o comandos sobre el grupo 2, en las posiciones 0 al 4 de ese grupo: ADELANTE, ATRÁS, DERECHA, IZQUIERDA y PARA. Seguidamente comienzan los ciclos de enseñanza gracias a los cuales a cada una de esas etiquetas se les asocia una voz (no tiene porqué ser la misma). El ciclo de enseñanza de cada voz se repite dos veces para obtener una mejor definición de la misma. Sobre la pantalla LCD irán apareciendo una serie de mensajes intuitivos que irán informando de los diferentes pasos. Una vez grabadas las 5 etiquetas y sus voces, el programa queda bloqueado en un bucle cerrado. Posteriormente, podemos conectar el módulo EasyVR a nuestro PC y, mediante el entorno EasyVR Commander para Windows, ver el estado actual del módulo con las nuevas voces y etiquetas recién incorporadas. La figura 27 muestra el aspecto que debiera tener el contenido del módulo visto con el software EasyVR Commander.
Figura 27. Estado actual del EasyVR Una vez hemos ejecutado este ejemplo podemos luego ejecutar el ejemplo 3 anterior para verificar que tanto las voces que acabamos de enseñar, como sus etiquetas, son debidamente reconocidas. En ese ejemplo 3 tan solo habrá que modificar el número de grupo (Grupo 2).
29
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
6.5 Ejemplo 5: Reconocimiento de voces SD definidas por el usuario Objetivos Se trata de reconocer las voces que se definieron y grabaron en el ejemplo anterior sobre el grupo 2. En la pantalla LCD se visualizará la etiqueta y la posición dentro del grupo 2, en que se encuentre cualquiera de las voces reconocidas. Además, para dar un mayor interés, se supone que se está controlando un sistema móvil que reproducirá los movimientos según la voz dictada. Esquema
U55 6
Se muestra en la figura 28. Tanto la pantalla LCD como el EasyVR se conectan como en anteriores ocasiones. Las líneas RC0:RC3 se conectan con los leds de salida S0:S3
5
PWM2 PWM1
PANTALLA LC D
MIC. 1
2X16 W S / 0 1 2 3 4 5 6 7 R R E D D D D D D D D
2
+5VCC
4 5 6 7 8 9 0 1 2 3 4 1 1 1 1 1
Figura 28. Ejemplo 5
ETX
VCC
ERX
4
RC7/RX
3
RC6/TX
EasyVR
SALIDAS DIGITALES RB3 RB2 RB1 RB0 RA1 RA2 RA3
Comentarios
GND
7 6 5 4 3 2 1 0 S S S S S S S S
RC0/ADELANTE RC1/ATRAS RC2/IZDA. RC3/DCHA.
Con objeto de dar una sencilla idea de aplicación, el ejemplo propone controlar 4 salidas que simulan otros tantos movimientos de un supuesto sistema móvil (p.e. un robot). Para ello las líneas RC0:RC3 conectadas a las salidas S0:S3 simulan activar los mecanismos que reproducirán los movimientos hacia adelante, atrás, giro a la derecha, giro a la izquierda y parada. Cuando se reconoce una de las voces del grupo 2 (grabadas en el ejemplo anterior), la pantalla LCD visualiza la etiqueta o comando correspondiente y su posición dentro del grupo, al tiempo que se activará el led correspondiente. En la fotografía de la figura 29 se muestra el montaje práctico realizado sobre el laboratorio USB-PIC’SCHOOL. Figura 29. Montaje práctico del ejemplo 5
30
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
6.6 Ejemplo 6: Reconocimiento de voces SD definidas por el usuario Objetivos El ejemplo trata de reconocer voces SD definidas por el usuario en diferentes grupos. Efectivamente, se combinan las voces del grupo 2 (movimiento) con las del grupo 1 (números 0 al 9) con objeto de realizar una aplicación en la que un sistema móvil realiza un movimiento determinado durante un cierto tiempo. Todo ello controlado por la voz. Esquema Es el mismo esquema que el de la figura 28 del ejemplo anterior. Comentarios El programa empieza tratando de reconocer las voces de movimiento del grupo 2: ADELANTE, ATRÁS, DERECHA, IZQUIERDA y PARO. Cuando una de ellas es reconocida, se visualiza en el LCD y se determina qué tipo de movimiento hay que realizar. Seguidamente trata de reconocer las voces numéricas del grupo 1 (del 0 al 9). Cuando se reconoce cualquiera de ellas, se visualiza en el LCD de forma concatenada con la voz de movimiento (p.e. DERECHA NUEVE). Esta voz numérica representará tiempo en segundos. Efectivamente, cuando se han reconocido ambas voces, la de movimiento y la de tiempo, se procede a realizar la maniobra. Se activa la salida RC0:RC3 correspondiente durante el tiempo establecido en segundos. La figura 30 muestra el montaje del ejemplo sobre el laboratorio y su ejecución.
Figura 30. Montaje práctico del ejemplo 6
31
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
6.7 Ejemplo 7 : Reconocimiento de voces SD definidas por el usuario Objetivos Se trata de un ejemplo meramente didáctico en el que se pretende mostrar algunas de las funciones contenidas en la librería < EasyVR_16FXXX>. De una forma intuitiva, gracias a la pantalla LCD, podremos explorar el contenido interno del módulo EasyVR y visualizar qué grupos están ocupados, cuantas voces poseen, que posición ocupan dentro de un grupo y la etiqueta o comando correspondiente. Esquema
U51 6
Se muestra en la figura 31. Tanto la pantalla LCD como el módulo EasyVR se conectan como se ha venido realizando en anteriores ejercicios. Los pulsadores E7, E6 y E4 se conectan con las líneas RA4, RA5 y RA0 respectivamente. RA4 permite seleccionar secuencialmente los grupos que contengan alguna voz. RA5 selecciona la posición dentro de un grupo. RA0 elimina la etiqueta y la voz que haya en la posición y grupo actual.
5
PWM2 PWM1
PANTALLA LCD
MIC. 1
2X16 S W / 0 1 2 3 4 5 6 7 R R E D D D D D D D D
2
+5VCC
4 5 6 7 8 9 0 1 2 3 4 1 1 1 1 1 RB3 RB2 RB1 RB0 RA1 RA2 RA3
GND
ETX
VCC
ERX
EasyVR
4
RC7/RX
3
RC6/TX
E. DIGITALES
7 6 5 4 3 2 1 0 E E E E E E E E
RA0/BORRAR
Figura 31. Esquema de conexiones
RA5/POS. RA4/GRUPO
Comentarios El ejemplo pretende mostrar el empleo de algunas de las funciones contenidas en la librería "EasyVR_16FXXX.inc" y que no han sido usadas hasta ahora: • • •
VR_MASK_SD: Obtiene la máscara con los grupos de voces SD no vacíos VR_COUNT_SD: Obtiene el nº de comandos y voces de ese grupo VR_ERASE_UNG_SD: Borra la voz y etiqueta asociada en la posición y grupo actual
Con cada transición 1-0-1 en RA4 (aplicada desde el pulsador E7 de USB-PIC'School) se selecciona el siguiente grupo que contenga una o varias etiquetas (no vacío) Con cada transición 1-0-1 en RA5 (aplicada desde el pulsador E6) se selecciona la siguiente posición dentro del grupo. En la pantalla LCD se visualizará el nº de grupo actual (no vacío), el nº de etiquetas contenidas en ese grupo, posición de la etiqueta dentro del grupo y la etiqueta propiamente dicha. Con una transición 1-0-1 en RA0 (aplicada desde el pulsador E4) se elimina, del módulo EasyVR, la etiqueta y voz que en ese momento se esté visualizando en la pantalla LCD Podemos emplear el entorno EasyVR Commander de windows para crear nuevos grupos y etiquetas que luego serán visualizas y/o borras mediante la ejecución de este ejemplo. En la figura 32 se muestra el montaje práctico de este ejemplo con el resultado de su ejecución.
32
Ingeniería de Microsistemas Programados S.L Al da. Mazarr edo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya (Spain) Tfno /Fax: 94 4230651
www.microcontroladores.com
[email protected]
Figura 32. Montaje práctico del ejemplo 7 6.8 Ejemplo 8 : Reproducción de sonidos Objetivos Se trata de un ejemplo que nos permite reproducir los sonidos grabados en la memoria flash del módulo EasyVR. Se supone que dicha memoria flash está grabado con los sonidos que se incluyen en la carpeta “Sonidos” del CDROM del usuario, tal y como se explicó en el apartado 3 del presente documento. Mediante el pulsador E7 del laboratorio USB-PIC’School, conectado a la entrada RA4, se van reproduciendo secuencialmente los 12 sonidos grabados, incluido el “beep” que viene de fábrica. Esquema Se muestra en la figura 33. RA4 permite seleccionar secuencialmente el sonido a reproducir. En las patillas PWM del módulo se debe conectar un altavoz de 8 Ω. E. DIGITALES
U52
Altav oz 8 ohmios 6 5
PWM2 PWM1 MIC.
1 2
+5VCC
GND
ETX
VCC
ERX
4
RC7/RX
3
RC6/TX
7 6 5 4 3 2 1 0 E E E E E E E E
EasyVR
RA4/SEL.
Figura 33. Esquema de conexiones
33