Está en la página 1de 12

12/10/2012

AQUIHAYAPUNTES.COM

COMANDAR UN PIC A TRAVS DE LA


VOZ

Biblioman

Comandar un PIC a travs de la voz


Introduccin En este tutorial voy a describir cuales han sido mis experiencias con el mdulo EasyVR y su conexin a un PIC. El objetivo era poder interactuar con el Microcontrolador a travs de la voz y establecer una comunicacin bidireccional con l, de tal manera que las ordenes se las mandramos al PIC a travs de un micrfono y el nos contestar por medio de un altavoz, un objetivo nada novedoso a estas alturas ya que hay bastantes ejemplos en la red que tratan sobre el uso de este mdulo pero la mayora de ellos estn basados en la plataforma Arduino, aqu se tratar de hacer un ejemplo en C utilizando el compilador de CCS y basndonos en la documentacin del fabricante.

Biblioman

www.AquiHayApuntes.com

Pgina 2

Comandar un PIC a travs de la voz


Caractersticas principales del mdulo EasyVR 26 Voces y comandos pre-grabados de fbrica SI (Speaker Independent) en seis idiomas diferentes: ingls, italiano, alemn, francs, espaol y japons. Soporta hasta 32 comandos con su voz asociada creados por el usuario y definidos en cualquier idioma SD (Speaker Dependent). Incluye una aplicacin de escritorio para Windows, desde donde se le puede programar fcilmente los diferentes comandos y voces al mdulo. El mdulo se puede conectar a cualquier host que disponga de una UART para la comunicacin serie. La alimentacin del mdulo es de 3.5 a 5V. Dispone de un conjunto de comandos para interactuar fcilmente con el mdulo a travs del puerto serie, bien por medio de la aplicacin de escritorio o bien a travs de cualquier Microcontrolador que disponga de UART. Tres pines de E/S digitales a niveles TTL de 3V DC (IO1, IO2, IO3). Una salida de audio (PWM) para la conexin con un altavoz de 8 Ohmios. Capacidad de reproducir hasta 9 minutos de sonidos y/o voces.

Dimensiones y asignacin de pines

Biblioman

www.AquiHayApuntes.com

Pgina 3

Comandar un PIC a travs de la voz


Esquema y conexin del circuito

Comentario del esquema: esta demo conecta el mdulo EasyVR a un PIC16f877, el circuito recibe las instrucciones a travs de la voz por medio de un micrfono conectado al EasyVR y el mdulo responde a los comandos a travs de un altavoz de 8 Ohmios conectado al mdulo por medio del conector J2. El mdulo se comunica con el PIC a travs de una comunicacin serie por medio de la UART. Pasemos a describir de forma ms detallada los elementos del circuito. El micrfono es del tipo omnidireccional es decir capta sonidos en un ngulo de 360 y en un margen de frecuencias que va desde los 100 Hz a los 20 KHz. Viene incluido con el mdulo por lo que solo nos tenemos que preocupar de conectarlo al conector J3 del EasyVR. El altavoz (no incluido) vale cualquiera que tenga una impedancia de 8 Ohmios, se conecta al conector J2 que es la salida de audio del mdulo. Hay que tener cuidado con la impedancia del altavoz, el conectar un altavoz con menor impedancia puede daar la salida de audio o el mdulo entero.

Biblioman

www.AquiHayApuntes.com

Pgina 4

Comandar un PIC a travs de la voz


El mdulo dispone de un mdulo de comunicacin serie asncrona (UART) para comunicarse con otros dispositivos como un Microcontrolador o con un PC a travs de un puerto COM y un adaptador de niveles MAX 232 o MAX 2323 ya que el rango de tensin del mdulo va desde 3.3V a 5V DC. La conexin es cruzada, es decir el pin ETX del mdulo EasyVr va conectado al pin RX del PIC y el pin ERX del mdulo al pin TX del PIC. La configuracin de la UART del mdulo es la siguiente: o o Velocidad: 9600 (defecto), 19200, 38700, 57600, 115200 Trama: 8 bits de datos, 1 bit de parada, sin paridad y sin control de flujo.

La demo dispone de un conmutador para cambiar la conexin serie del PIC al PC y viceversa, muy til para no tener que estar cambiando las conexiones. Las salidas digitales que encendern o apagaran las bombillas se hace a travs de los pines RB1 y RB2 del PIC. Los transistores y los rels hacen de adaptadores de tensin ya que las bombillas trabajan a 220 V AC. Del conector J4 del EasyVR solo se utiliza el pin /XM para poder actualizar la tabla de sonidos que reside en la memoria Flash del mdulo. El EasyVR dispone de un bootloader gestionado por hardware, cuando la patilla /XM se encuentre a nivel alto el dispositivo entra en modo programacin y permite actualizar la tabla de sonidos a travs de la aplicacin de escritorio. La patilla /XM se conecta a travs de un jumper y una resistencia pull-up, el valor de esta resistencia depende de la tensin de alimentacin aplicada al mdulo que como hemos comentado puede variar entre 3.5 y 5V, internamente el mdulo tiene conectada a la patilla /XM otra resistencia (pulldown) segn se muestra en la figura de abajo:

Por tanto si en /XM tenemos que tener una tensin de 3V y aplicamos una tensin de alimentacin de 5V, a partir de la frmula del divisor de tensin calculamos el valor de R:

R=

5 3

1000 -1000 680

Biblioman

www.AquiHayApuntes.com

Pgina 5

Comandar un PIC a travs de la voz


Nota: En la prctica a mi me ha ido bien con una resistencia de 1K.

Una foto de la demo montada

Cmo se programa? Para saber cmo realizar el programa en C que ir programado en el Microcontrolador primeramente deberemos conocer el protocolo de comunicacin que implementa el mdulo EasyVR para comunicarse con l, como he comentado anteriormente esa comunicacin se realizar a travs de un puerto serie asncrono segn se muestra en la figura de abajo:

Biblioman

www.AquiHayApuntes.com

Pgina 6

Comandar un PIC a travs de la voz


El protocolo de comunicacin slo usa caracteres ASCII imprimibles, que pueden dividirse en dos grupos principales: Los caracteres que se utilizan para los comandos que recibe el mdulo as como la respuesta que da el mdulo a esos comandos, ambos sern siempre caracteres en minscula. Los caracteres que se utilizan para enviar los parmetros de los comandos transmitidos como los recibidos sern siempre caracteres en mayscula.

Cada comando que se transmite por la lnea Tx (del Host-MCU al EasyVR) con los parmetros necesarios (cero o mas caracteres) genera la correspondiente respuesta por parte del EasyVR que ser recibida por el Host-MCU por la lnea Rx, esta respuesta tambin puede tener argumentos o parmetros de cero o mas caracteres. Hay un retardo mnimo entre cada byte enviado al host-MCU por parte del mdulo EasyVR que inicialmente es de 20 ms pero que despus podremos modificar en los rangos siguientes: 0 - 9
ms, 10 - 90 ms y 100 ms - 1 s para adaptar la velocidad de transmisin a la velocidad de proceso del host-MCU. La comunicacin es controlada por el host-MCU y cada byte que enva el mdulo EasyVR en respuesta a un comando enviado por el host debe de ser reconocido por este que enva el carcter espacio (0x20) Cuando el host-MCU enva una combinacin incorrecta de comandos y/o argumentos el easyVR responde con un byte de estado que debe ser tratado correctamente por parte del host-MCU. Tambin se debe de tener en cuenta el programar un retardo aceptable para recuperarse de fallos inesperados. Si el host-MCU no enva todos los argumentos necesarios de un determinado comando, el comando es ignorado por el mdulo, en este caso el mdulo no enva en respuesta ningn byte de estado y el host-MCU puede enviar otro comando. El mdulo pasa automticamente al modo sleep o de bajo consumo despus de una puesta en marcha, para sacarlo de ese estado e iniciar la comunicacin se enva un carcter cualquiera. Comandos: a continuacin voy a mostrar los comandos ms importantes utilizados en la demo, as como los argumentos requeridos por cada uno de ellos, para ver todos los comandos implementados en el protocolo ver el manual del fabricante.

Nombre del comando

Cdigo

Descripcin Reproduccin de sonidos en la T. Sonidos

Argumentos

Respuesta

CMD_PLAY_SX

'w' (77h)

[1] [2] [3]

STS_SUCCESS, STS_ERROR

*Argumentos: [1] [2] establecen el ndice que ocupa el sonido a reproducir en la tabla de sonidos segn la siguiente frmula: ndice = [1] * 32 + [2] *Argumento [3] configura el volumen de la reproduccin: 0 = Mnimo, 15 = Medio, 31 = Mximo.

Biblioman

www.AquiHayApuntes.com

Pgina 7

Comandar un PIC a travs de la voz


En respuesta tenemos los posibles valores devueltos por el mdulo, en el archivo de cabecera (protocol.h) viene la codificacin para cada una de las etiquetas.

Nombre del comando

Cdigo

Descripcin

Argumentos

Respuesta STS_RESULT, STS_SIMILAR, STS_TIMEOUT, STS_ERROR

CMD_RECOG_SD

'd' (64h)

Activa reconocimiento de voz SD/SV

[1]

*Argumentos [1]. Como argumento hay que pasarle el ndice del grupo donde se encuentra las voces a reconoce: (0 = trigger, 1-15 = generic, 16 = password) Los argumentos de los comandos como hemos dicho antes son caracteres imprimibles que siguen el siguiente criterio de codificacin:

Ejemplo simplificado implementado en C


void main(void) { while(TRUE) { switch (valor1){ case 'r'://Voz reconocida printf(" ");//Para que el EasyVR mande el siguiente valor. valor1=getc(); break; case 'B': //Saludar putc('w');//Comando para que se reproduzca un sonido de la TB de sonidos putc('A');//[1] putc('E');//[2] //indice=[1]x32+[2] putc('P');//[3] --> Volumen de reproduccin (3) valor por defecto.

Biblioman

www.AquiHayApuntes.com

Pgina 8

Comandar un PIC a travs de la voz


valor1=getc();//leer OK ('o') escucha();//Activamos la escucha break; //mas cases default: printf("wAAP");//beep error en el reconocimiento de voz valor1=getc();//leer OK ('o') escucha();//Activamos la escucha } } } void escucha(){ while (valor1!='r'){ printf("dB"); //Activacin escucha valor1=getc(); } }

Comentario: En el ejemplo se pueden distinguir los dos comandos bsicos utilizados para: Reproduccin de un sonido de la tabla de sonidos putc('w');//Comando para que se reproduzca un sonido de la TB de sonidos putc('A');//[1] putc('E');//[2] //indice=[1]x32+[2] putc('P');//[3] --> Volumen de reproduccin (3) valor por defecto. valor1=getc();//leer OK ('o') Enviamos el comando CMD_PLAY_SX cuyo cdigo es w en minscula ya que se trata de un comando. Luego le enviamos los tres parmetros, los dos primeros para determinar el ndice que ocupa el sonido en la tabla de sonidos, si sustituimos el valor de los argumentos segn la tabla en la frmula tenemos que ndice= 0*32+4=4, luego el sonido a reproducir ser el que ocupa la posicin 4 en la tabla de sonidos. El valor del tercer parmetro (E) tiene un valor de 15 que corresponde a un nivel de volumen medio. Cada vez que el comando es reconocido correctamente por el mdulo este mandar un OK que tendremos que leer en el programa del host-MCU

Biblioman

www.AquiHayApuntes.com

Pgina 9

Comandar un PIC a travs de la voz


Reconocimiento de un comando definido por el usuario: En este caso el comando que utilizamos es CMD_RECOG_SD cuyo cdigo es 'd' y que tiene como argumento el grupo donde se encuentra la voz a reconocer. Si el comando es aceptado el mdulo responder con un STS_RESULT (r), en ese caso tendremos que enviarle un carcter en blanco, con esto le decimos al mdulo que enve el siguiente valor que contendr la posicin del comando en el grupo. Si el comando no es reconocido mandar un STS_ERROR en cuyo caso se entrar el default-case, se enviar un beep de error y pondremos el mdulo otra vez en modo escucha a la espera del siguiente comando a reconocer. Podramos comunicarnos con el mdulo EasyVR nicamente a travs del programa del Microcontrolador pero es ms fcil configurar muchas de sus opciones a travs de la aplicacin de escritorio EasyVR Commander que el fabricante ofrece gratuitamente.

Junto a este programa tambin se instala la aplicacin QuickSynthesis 5 (QS5) necesaria para codificar en el formato necesario (wap con 16 bits sin compresin y mono de 22050 Hz) los archivos de sonidos que se cargarn en la tabla de sonidos del mdulo EasyVR:

Biblioman

www.AquiHayApuntes.com

Pgina 10

Comandar un PIC a travs de la voz

La forma de utilizar ambos programas se muestra en el siguiente vdeo:

http://www.youtube.com/watch?v=E1siC-wlNKc Nota: el vdeo le falta resolucin (lo siento falta de presupuesto), se ve un poco mejor si se ve a pantalla completa
Biblioman www.AquiHayApuntes.com Pgina 11

Comandar un PIC a travs de la voz


Un vdeo con la demo funcionando la tenis aqu:

http://www.youtube.com/watch?v=2kSQM2rmjcY Puedes seguir el desarrollo de esta demo en el siguiente hilo del foro. Fuentes de informacin
http://www.veear.eu

http://www.ccsinfo.com/ Audacity Marcas registradas Las marcas citadas en este artculo as como algunas de las imgenes procedentes de capturas de pantallas pertenecen a sus respectivos propietarios, su utilizacin en este artculo es con fines educativos y sin nimo de lucro. Copyrigh 2012 AquiHayApuntes.com Autor de este artculo: Biblioman Versin: 1.01 Pgina Web: http:\\www.aquihayapuntes.com Email: email.Biblioman@gmail.com Puedes copiar y distribuir libremente este artculo haciendo referencia al contenido de este prrafo.

Biblioman

www.AquiHayApuntes.com

Pgina 12