# Control por comandos de voz



## Rolando (Ago 17, 2005)

Necesito información sobre algún integrado o circuito que reconozca comandos por voz, para luego adaptarlo a un pic (por ej).

El circuito es para controlar una silla de ruedas eléctrica, PARA UNA CHICA QUE QUEDO CUADRIPLEGICA. Es Adhonorem ya que las sillas con joystic cuestan $15000 pesos, y no nos sirve porque ella solamente puede hablar. Realmente necesito AUNQUE SEA cualquier tipo de idea o pagina web.

Si internet es util, hacemelo creer. Ella te lo va a agradecer !


----------



## Andres Cuenca (Ago 17, 2005)

Te invito a que visites esta pagina, las aplicaciones de reconocimiento de voz que conozco utilizan estos integrados.

http://www.sensoryinc.com/html/products/ics.html

Saludos.


----------



## MaMu (Ago 18, 2005)

Si sos de Argentina, puedo recomendarte que solicites el catálogo de la linea HT (holtek) ya que ahi mismo he visto varias aplicaciones ya armadas que trabajan con el reconocimiento de voz.
La linea Holtek la importa Cika Electrónica y creo que es el unico.


----------



## Marcelo (Ago 21, 2005)

Rolando, creo que una solución más práctica, multifuncional y rápida de implementar es utilizar una solución mixta basada en software/hardware, empleando para ello cualquier plugin (OCX o DLL) de Microsoft u otra compañía para C++ o Visual Basic para reconocimiento de voz.

Fíjate por ejemplo en:
http://www.wizzardsoftware.com/products_developer.php
http://www.sharewareconnection.com/download-wave-to-text-activex-ocx-from-sharecon.html
http://www.o2a.com/AX/dtalkAX.htm
http://www.popularshareware.com/Voice-Insert-ActiveX-download-11237.html

y hay muchas más por allí.

Para esto deberías disponer de un laptop y una interfaz puerto paralelo que te permite controlar los motores u otros elementos que necesites  a voluntad.

De esta forma requerirías del laptop, la interfaz y el programa.

Esto sería mucho más versátil pues permite expandir la utilización a cualquier aspecto requerido, utilizando el mismo software, es mucho más rápido de implementar y además tendrías todos los puertos de interfaz listos para usar (Seriales y Paralelo). Hay montones de circuitos como por ejemplo los PWM (Pulse With Modulation) para poder controlar motores AC, DC, Paso a Paso y Servos desde el puerto paralelo, los dedicados a la robótica los utilizan mucho.

La idea general del software a desarrollar es que el activex te traduzca la voz a caracteres y  basado en la interpretación de estos caracteres realizarías la acción que deseas sobre el puerto paralelo, por ejemplo con las palabras  "Adelante" "Atrás" "Izquierda" "Derecha" "Parar" "Ir". te bastarían para controlar 2 motores  que muevan la silla en estas direcciones.

El Laptop que necesitarías no tendría que ser de última generación pues solo estaría dedicado a esta aplicación. Me atrevo a decir que hasta un 486 con Windows 98 sería suficiente y además sería muy económico.

La interfáz es más que común y "sencilla" de realizar y por aquí hay un montón de personas que te podrían ayudar en su desarrollo.

Por otro lado podrías utilizar la pantalla del Laptop para mostrar información adicional como puede ser el estado de carga de las baterías y con esta configuración dispondrías de todo el setup para desarrolar aplicaciones adicionales como pudieran ser: generar alarmas, accionar controles remotos para encender y apagar luces, televisores, llamar por teléfono y muchas cosas más.

Saludos.

Marcelo.


----------



## Andres Cuenca (Ago 21, 2005)

Comparto la idea de Marcelo, utilizar un software de reconocimiento de voz hace el proyecto mas versátil y sencillo, además que la lógica de control también se realiza por sottware, dejando una simple etapa de potencia para controlar los motores.


----------



## Rolando (Sep 2, 2005)

Marce, es una muy buena idea. La descarté al principio porque los costos de una laptop me parecian elevados pero al investigar los CHIP-VOICE me di cuenta que 500 dolares para un chip, aunque sea de reconocimiento, ES CARO.
El programa que deberia usar tendria que ser compatible con C, que es el que se usar. Tambien tengo pensado usar un puente H para la etapa de potencia. 

GRACIAS MARCE 

Y SIGAN POR FAVOR


----------



## Marcelo (Sep 3, 2005)

Hola Rolando,

Fíjate en esta página donde vas a  conseguir montones de ideas para controlar motores, incluidos puentes H.

http://www.commlinx.com.au/Control.htm

El problema de usar puentes H para este proyecto es que la etapa de potencia debería constar de transistores y diodos muy grandes para poder manejar los motores y sus transitorias debido a los inducidos de armadura. 

Creo que sería mejor utilizar relés y un micro que los controle. Es mucho más fácil y directo. Según mi experiencia, otro problema del puente H es que debe estar bien balanceado para que el torque en ambos sentidos sea aproximadamente igual. Necesitaras 2 de ellos.

Obviamente, lo anterior es respecto a los puentes H hechos "a mano", pues existen chips que ya contienen puentes doble H con compensación. que preveen estos problemas.

Aqui tienes un circuito que maneja hasta 20V, 24A con componentes discretos:

http://www.palmiga.com/myztec/byo/turbo/miniz-turbo.pdf#search='double%20hbridge%20chip'

y aquí uno de los integrados:

http://www.acroname.com/robotics/información/ideas/stacking/stacking.html

otros son el L293D reemplazado actualmente por SN754410NE y el ULN2003A. Estos chips manejan hasta 1 o 2 amperes solamente, aunque se pueden montar uno sobre el otro para manejar cargas mayores (como se muestra en el primer link).

Tengo un circuito diseñado por mi que usa un Hbridge para controlar un motor de 9 voltios DC 500 mA, un MAX232 para comunicación serial y una etapa de control con un PIC 16F84A que comanda el puente. Además permite la lectura de un sensor de pulsos por RB0. Si te interesa que te mande los esquemáticos déjame tu correo electrónico.

Este circuito está diseñado para mover un enfocador de un telescopio automáticamente y si bien no lo vas a poder usar directamente, te podría servir como base para el diseño. 
Creo que sería muy fácil adaptarlo a lo que necesitas. Reescribir el firmware del pic también sería sencillo. 

De igual forma se puede cambiar el PIC a uno con UART como el 16F87 que es pin a pin compatible, para que las rutinas de comunicaciones sean mucho más fácil de desarrollar, pero como está funciona perfectamente y tiene aplicación directa a lo que necesitas.

Con respecto a las DLL de reconocimiento de voz, las ACTIVEX que te comenté se pueden usar en C++ y VB. Allí no hay problema. Si dominas C++, hacer el programa será un paseo. 

Creo que todo es cuestion de ponerse a hacerlo y listo.

Saludos.
Marcelo.


----------



## MaMu (Sep 3, 2005)

Marcelo dijo:
			
		

> ....otros son el L293D reemplazado actualmente por SN754410NE y el ULN2003A. Estos chips manejan hasta 1 o 2 amperes solamente, aunque se pueden montar uno sobre el otro para manejar cargas mayores ....(como se muestra en el primer link)



*Un comentario al pasar...*

Ahora que mencionaste esto, creo que habia un integrado, si mal no recuerdo era algo como MPPC 1 , de la gente que desarrola BasicStamp, este integrado se habia pensado para el manejo de motores paso a paso, recuerdo que lo interesante de este semiconductor es que tenia la posibilidad de endosarle un encoder para determinar la posición del eje. Lamentablemente SCM internacional se fue de Argentina, pero era un producto interesante y a la vez muy económico, manejaba hasta 20A.


----------



## Rolando (Oct 14, 2005)

Gracias por los datos del Puente H. Ya que este era uno de mis problemas. Los motores calculados son de 1/4 HP y por eso la corriente es un problema para los Puentes integrados. Por lo que veo hacerlos es la unica salida.

GRAN NOTICIA::: La chica despues de tanta reabilitación PUEDE MOVER un Brazo y un poco la muñeca... por lo tanto el control se facilitaria con una espacie de joystick adaptado. Igualmente les agradesco todo el material que me mandaron, y lo voy a tener en cuenta (GRACIAS POR SU TIEMPO EN SERIO).

Les comento algunas noticias y avances... la silla pensabamos hacerla ultraliviana para que ella intente, con la rehabilitacion, moverla manualmente. Pero despues de ver los costos (del aluminio ultraliviano y el carbono), vamos hacerla de hierro estructural. El control mediante un pic a los puentes H y a diversos circuitos de control (baterias frenos sirena de emergencia etc).
Ni bien tenga fotos las mando

Yo pensaba manejar la velocidad de los motores por PWM.. Si lo hago por reles hay alguna manera para modificar la velocidad ? Esto es necesario para manejar la aceleración y desaceleración de la silla y que koki (la chica), no salga arando. Gracias


----------



## Marcelo (Oct 14, 2005)

Saludos Rolando,

Bueno, luego de escribir esto te mando los archivos.

Me alegro que la chica esté respondiendo a la terapia, ¡eso es maravilloso!, me alegro mucho.

Con respecto a los motores, investiga a ver si puedes conseguir unas cajas de conversión para así poder usar motores menos potentes (de 1/8), además necesitas más torque que velocidad.

A veces es mejor usar este tipo de "cajas de transmisión" porque es más fácil poder controlar mecánicamente el arranque y parado de los motores. También te proporcionan un poco más de "backslash" (inercia), haciendo que el movimiento sea mucho más suave es decir, no tan brusco como si el eje del motor estuviera diréctamente acoplado al eje de las ruedas.

Me parece que para empezar, una silla más pesada es mucho mejor que una liviana, por cuestiones de estabilidad. Luego de la adaptación que le llevará algún tiempo, se podría pensar en algo más liviano mejorando el diseño.

Con relés?, no. Eso sería como un switch, prendido o apagado. A no ser que te inventes algo para tener distintos voltajes aplicados al motor por medio de relés (aunque no es lo más eficiente porque pierdes torque).

Si los motores son DC lo indicado es PWM y si son AC, un variador de frecuencia (que es prácticamente PWM aplicado a cada fase y sincronizado). Como no se puede cambiar dinámicamente la mecánica de un motor, para variar su velocidad hay que variar el campo de armadura, lo que quiere decir que debe existir un mecanismo para realizar el cambio en el voltaje y/o la corriente en las bobinas.

Por cierto, si por casualidad quieres ver algo sobre el variador de frecuencia fíjate aquí en el foro, en "Documentación", que hay un trabajo muy bueno sobre eso.

Saludos,
Marcelo.


----------



## Betomelo (Mar 13, 2006)

No son necesarios chips complicados.

Como ya lo publique en un post de otro tema, alguien me pregunto por un tema similar, es posible hacer reconocimiento de voz (por lo menos para un conjunto restringido de palabras) mediante un microcontrolador sencillo que tenga un conversor analogo digital. Mira un ejemplo practico hecho con un microcontrolador de muy bajo costo:

http://www.circuitcellar.com/pastissues/articles/Stewart91/text.htm


----------



## eduardo.bonilla (Mar 13, 2006)

Hola a todos!!

Me da mucha felicidad leer estos mensajes y saber que por medio del foro hay gente que se ayuda mutuamente a desarrollar proyectos de bajo costo para personas que necesitan ayuda.  Realmenente me emociona ésto.

Rolando, si todavía sigues interesado en aplicar el reconocimiento de voz, me puedes decir lo siguiente.

Cuales comandos te gustaría impelentar por voz:  por ejemplo:

Claves:
<Activador> = Silla electrónica

1.  <Activador>  Avanzar
2.  <Activador>  Detener
3.  <Activador>  Derecha
4.  <Activador>  Izquierda

No se que otro comando te interesaría.   

Actualmente estoy haciendo mi tésis en reconocimiento de voz y puedo probar lo que estoy aprendiendo, para tratar de lograr alguna herramienta de bajo costo con las funciones que necesitas.

Estoy trabajando con un sistema de reconocimiento de voz que se llama Sphinx.   Éste tiene una vesión 2 que ha sido incorporado en sistemas embebidos, y creo que ha sido porteado al microcontrolador de Blackfin de Analog Devices.   El codigo de Open Source al igual que el diseño de la tarjeta Stamp en donde se utiliza éste microcontrolador, incluyendo el uCLinux y el compilador GCC, asi se pueden hacer programas en C y compilarlos a la tarjeta.  

Eso quiere decir que la herramienta ha de costar cerca de 200 dolares en Estados Unidos.   Esta herramienta la tengo en la casa y ya en el futuro pudiera hacer pruebas, si ésto es de interés.

Para el sistema de reconocimiento de voz necesitaríamos:

1.  Un decodificador de voz (preferiblemente adaptado a la voz de Koki)
          El decodificador puede contar con
                a. Reconocedor de fonemas y
                b. Reconocedor de palabras.

La forma más común utilizada en ambientes Robustos de reconocimiento del habla es utilizando sistemas probablilísticos implementando cadenas de Markov (que realmente todavía no entiendo a la perfección, pero en ésto andamos durante estos meses).     Necesitarías un ambiente Robusto, porque seguramente abrá mucho ruido donde ande la silla de ruedas.

Otra forma de aplicar el reconocimiento de voz es por medio de redes neuronales, que es mi principal área de interés.  

Bueno, si sigues interesado podemos diseñar un sistema y pudiera hacer pruebas para ver cómo resulta el comportamiento.  Seguramente sería muy buena motivación para mi también, el saber que puedo ayudar a alguien.


Muchos Saludos,

El P@n@


----------



## Betomelo (Abr 6, 2006)

Betomelo dijo:
			
		

> No son necesarios chips complicados.
> 
> Como ya lo publique en un post de otro tema, alguien me pregunto por un tema similar, es posible hacer reconocimiento de voz (por lo menos para un conjunto restringido de palabras) mediante un microcontrolador sencillo que tenga un conversor analogo digital. Mira un ejemplo practico hecho con un microcontrolador de muy bajo costo:
> 
> http://www.circuitcellar.com/pastissues/articles/Stewart91/text.htm



Como dice el autor en su pagina, el utiliza una teoria de hace mas o menos 50 años, en la que utiliza dos bandas de frecuencia F1 y F2. 

En resumidas cuentas lo que el autor hizo es un oscilador de ancho de pulso modulado por la frecuencia de la voz de entrada.

es como si se se tomara una "instantanea" de la frecuencia  cada determinado instante de tiempo.

El circuito mide los anchos de los pulsos y los guarda.

Te doy un ejemplo para que te guies, pero no es real. Digamos que pronuncias la palabra "hola", el circuito genera una señal cuadrada de cuyo ancho de pulso varia respecto a la frecuencia de la señal de entrada en un instante, digamos que al pronunicar la palabra hola y medir los anchos de los pulsos cada x segundos se obtiene una secuencia de numeros algo asi:

56 567 78 45 34 45 67  78   89 89  12

el internamente tiene secuencias que fueron producidas por las palabras que fueron "grabadas". mediante ciertos algoritmos el compara cual de las secuencias que hay almacenadas, se parece mas a la secuencia de numeros que ingreso.

No se exactamente que es lo que no entiendes de ese proyecto, pues esta muy bien documentado


----------



## juliwoodbcn (Abr 11, 2006)

te recomiendo que lleve un miniordenador en la silla con linux y el programa c-voice con este sencillo programa podrás hacer maravillas en cuanto a reconocimiento de voz, y ademas es gratuito y permite activar otros programas por linea de comandos (manejandolo todo por voz), lo que te permitiria hacer sencillos programas para decir la velocidad, direccion, etc,etc


----------



## Mario Alejandro (Abr 12, 2006)

Marcelo a los muchachos del foro yo esoy haciendo un sistemita direccionemiento con servomotores para orientar una antena de Video para que esta se oriente hacia la fuente de señal previo haber llegado posicion gps de la fuente de origen los datos exactos de su ubicacion esto esta casi listo el traslado de datos pero me falta la parte de decodificar esta información y pasarla a los servos para que esta antena que esta estatica en un pundo pueda autoorientarse a esa fuente y no tengo conocimiento del menejo de motores y salidas de pics para el manejo de estos pero veo que en el foro hay gente muy capaz asi que pido si alguien me puede ayudar desdev ya estoy agradecido y si de lo mio hay algo que les sea util no tiene mas que solicitarlo gracias


----------



## ramoncapo (Ago 18, 2009)

Hola. y me gustaria saber como puedo guardar la voz en el micro convirtiendo en hex?o como es la manera mas eficiente de hacerlo'? 

La idea sencillamente es hacer un sistema de reconocimiento de voz a traves de microcontroladores. Que reconozca una palabra y dispare una señal, nada mas!. No necesito ultraprecision ya que el microfono va a estar a menos de 1 metro de la persona. 

Desde ya muchisimas Gracias! 

Saludoss!


----------



## lmct (Ago 25, 2009)

Hola, disculpar la tardanza, estaba de vacacines.
Bueno, a decir verdad estoy en ello. Basicamente hay que digitalizar la señal a una frecuencia determinada para despues poder reproducirla o comparla. Yo estoy probando con el circuitcellar, pero de momento sin demasiados resultados. Ya ire informaciónrmando si logro algo.
Saludos.


----------



## gzaloprgm (Abr 21, 2010)

Podés empezar investigando el tema de reconocimiento de voz...

En http://www.imagesco.com/articles/speech/speech-recognition-tutorial01.html usan un integrado dedicado (HM2007) que soporta hasta 20 palabras de 2 segundos c/u.

Si no, podés intentar hacerlo directamente con el microcontrolador... 

Acá muestran un algoritmo relativamente simple para comparar varios "vectores" de voz

Acá muestran la implementación de eso en un microcontrolador de baja gama, impresionante, sin necesidad de ADC :| No dicen código pero leyendo el artículo es posible entender el algoritmo.

Saludos,
Gonzalo


----------



## jccoellar (Sep 8, 2011)

En una ocasion hice algo asi , era un proyecto para unos estudiantes que querian controlar una casa por medio de la voz .
En mi caso fui por lo mas sencillo , una vez hecho el programa de control , lo deje como una libreria para VisualBasic , y utilice el programa Dragon Speaker , para controlar mi aplicacion , por ejemplo , la orden de abrir la puerta era // abre la puerta // ,Dragon Speaker recibia la orden verbal y la comparaba con el texto del box de la aplicacion ejecutada en pantalla , y automaticamente le envia un pulso a un pin determinado por mi al puerto LPT (puerto paralelo) 5v aprox , que excitaba la base de un transistor y por su colector enviaba el voltaje al motor de la puerta 

Funciono de maravilla , pero en ocaciones le decia // apaga las luces // y ejecutaba otra cosa , como encender la licuadora ,etc ,, terrible realmente y nunca lo pude solucionar ,,,
el otro problema era que no solo respondia al propietario sino a los que tenian un timbre de voz semejante ,,


----------

