sábado, 8 de marzo de 2008

Sintetizador de voz SPE030

La empresa inglesa Tech Supplies distribuye el sintetizador de voz SPE030. Existen dos versiones, una con voz femenina y otra con voz masculina, las dos con pronunciación inglesa, por supuesto. Se trata de un módulo muy pequeño, con unas dimensiones de 40 x 40 mm, que es, a su vez, el diámetro del altavoz. Este sintetizador se vende a un precio de 52,88 libras esterlinas.

La información sobre el módulo se ha obtenido del manual de PICAXE. El módulo sintetizador de voz SPE030 permite transformar en voz cualquier texto escrito. Su corazón es el circuito integrado sintetizador de voz Winbond WTS701. El módulo incorpora un amplificador de 325 mW LM386 y un integrado que gestiona las comunicaciones por el puerto serie ST232C. La actividad del módulo está gestionada por un microcontrolador PIC 16F872.

El módulo se alimenta con un portapilas de 4,5 voltios, aunque admite hasta 5 V. Lo he probado con tres pilas alcalinas de 1,5 voltios que proporcionan entre las tres 4,62 voltios y va perfectamente. También lo he probado con tres pilas recargables (Ni-MH) de 1,2 voltios que proporcionan 4,09 voltios y también funciona por un pequeño tiempo (Cuando baja a 4,02 voltios deja de funcionar). Al conectar el módulo a la alimentación eléctrica la voz lee el primer mensaje grabado. A continuación se ha de introducir el conector del puerto serie (Es importante hacerlo en este orden).

Su consumo es de 35 mA en reposo y de 60 a 100 mA cuando produce voz. Puede almacenar, programándolas desde un ordenador mediante el puerto serie, 30 frases, con un total de 1.925 “bytes“ disponibles. También se le puede enviar un texto cualquiera desde un microcontrolador PICAXE por medio de un bus de datos I2C. Para cargar las 30 frases desde un ordenador, utilizando el cable del puerto serie RS232, se utiliza un programa que se puede descargar desde la página web de PICASE.

Una vez instalado el programa se ha de seleccionar el puerto serie (COM 1 ó COM 2), también se pueden graduar el volumen (Volume), tono (Pitch) y la velocidad (Speed). En el ordenador que he utilizado el puerto era el COM2 y de las dos opciones que permite el programa he seleccionado “38400“, con la opción “9600“ NO SE CONECTA.

Cuando escribimos sobre algunas de las cinco filas que aparecen en la pantalla, en el recuadro de información que hay debajo, el programa nos informa de la cantidad de memoria ocupada y de la cantidad de memoria disponible (“Total Size of Phrases is ... bytes of 1925 available“). Los botones “Test“ y “Set“ permiten ir comprobando como se oirán los mensajes antes de grabarlos en el módulo SP030. Cuando se han editado los cinco primeros mensajes, se accede a los siguientes mediante el botón “PageDw“. De la misma forma se puede pasar a los mensajes anteriores mediante el botón “PageUp“.

Una vez redactadas las diferentes frases se hace clic sobre el botón “Program“ para cargar el programa en el módulo SPE030. Al hacerlo se comprime la información y se almacena en la memoria Flash del módulo. En la ventana del programa “SP03 Driver Version 7, Speech Module - Loader/Configurator/Tester“, debajo de la fila de los textos de los mensajes grabados, en el recuadro de la información del programa, aparece primero “Programming Phrase No...“, y después, “Finished Programming“, que nos informa de que las 30 frases ya se han cargado en la memoria del SPE030.

Al acabar de cargar las frases se deselecciona el botón “Test“, pero se puede volver a activar haciendo clic sobre una de las filas de los textos de las frases.

Al pulsar el botón “Program” NO se cargan, directamente, los valores de “Volume“, “Pitch“ y “Speed“. Previamente se ha de hacer clic sobre el botón “Test“ al ir editando cada frase.

El módulo sintetizador SPE030 puede trabajar de tres formas distintas.

  • MODO 1: De forma aislada.

Mediante pulsadores se puede conseguir que el SPE030 reproduzca cinco frases precargadas. Estos pulsadores han de instalarse para que conecten cada una de las cinco entradas del conector PL2 (Sel 0, Sel 1, Sel 2, Sel 3 y Sel 4) con el terminal de masa (Gnd, 0 voltios). Las entradas que no se utilizan se mantienen en posición alta mediante unas resistencias (4k7) instaladas en el interior del módulo.

Mientras se presiona el pulsador correspondiente a “Sel 0“ se escuchará la frase número 30 (%11110), si se hace con “Sel 1“ se oirá el mensaje número 29 (%11101), con “Sel 2“ el mensaje 27 (%11011), con “Sel 3“ el mensaje 23 (%10111) y con “Sel 4“ el mensaje 15 (%01111).

Si se desea se puede colocar un LED (Con una resistencia en serie de 330 Ohmios) entre el “Status“ y la masa (Gnd). Este LED se encenderá mientras esté hablando el altavoz.

  • MODO 2: Operación mediante un microcontrolador PICAXE conectado con un puerto digital.

El puerto de entrada digital conecta el PICAXE con el conector PL2 del módulo sintetizador SPE030. De esta forma se pueden reproducir las 30 frases grabadas en el módulo.

Para reproducir cualquiera de las 30 (1-30) frases predefinidas, se ha de introducir, de forma digital, el número de la frase a la entrada de 5 bits (SEL 0 - SEL 4). Los números 0 y 31 ($00 y $1F) no son reconocidos por el equipo y no permiten la reproducción de ninguna frase. El SP030 dispone de resistencias conectadas a las entradas Sel0 - Sel4, de forma que cuando no están conectadas o están fuera de uso su valor sea uno.

En cuanto la CPU reconoce y confirma una nueva señal en una de las entradas, las lee todas y reproduce la frase correspondiente. En cuanto el módulo ha reconocido el número de la frase vuelve a poner todas las entradas a 0, antes de que haya terminado de reproducir la frase, ya que de otro modo esta frase se volvería a repetir. Cuando el SP030 ha terminado de reproducir la frase pone a cero todas las entradas, cosa que supervisa el microcontrolador PICAXE para prepararse para la frase siguiente.

No es necesario utilizar, y por tanto cablear, todos los cinco pines. Si sólo se han de reproducir 3 frases sería suficiente con usar dos pines (SEL0 Y SEL1). Los pines se activan mediante una señal de estado bajo (0), es decir, se produce una inversión de la selección (El valor 00001 es en realidad el valor 11110 = el mensaje 30). Gracias al uso de esta lógica invertida se puede cablear el módulo sintetizador directamente a las salidas “de transistor“ que hay en muchas de las placas de proyectos PICAXE.

Vista anterior y posterior del módulo sintetizador SPE030.

Ejemplo de programa para el PICAXE-18

main:

' *** reproduccion de la frase 30***

let pins=000001
‘ seleccion de la frase 11110 = 30
gosub wait4shutup
‘ espera a que acabe la frase para terminar

' *** reproduccion de la frase 21 ***

let pins=001001
‘ seleccion de la frase 10110 = 21
gosub wait4shutup
‘ espera a que acabe la frase para terminar
goto main

' *** subrutina que espera a que el
' modulo SPE030 acabe de reproducir la frase ***

wait4shutup:
pause 10 ‘ pequeña pausa
let pins = 000000
‘ puesta a cero de todos los pins
if pin2 = 1 then wait4shutup
‘ control del estado de los pins
return

Los pines de “+5V“ y de “Gnd“ de los dos conectores (PL1 y PL2) están unidos internamente (A través del circuito impreso de doble cara). Por este motivo se puede alimentar elèctricamente el módulo por medio de cualquiera de los dos conectores.

Conexiones eléctricas

El módulo SPE030 dispone de dos conectores. La alimentación eléctrica a 5V se puede conectar indistintamente sobre cualquiera de los dos conectores.

Conector PL1 (9 pines)

+5V - Alimentación eléctrica de 100 mA.
SDA - Conexión SDA del bus.
SCL - Conexión SCL del bus.
N/C - Se trata de un pin que no se ha de conectar.
GND - Toma de masa (0 voltios).
Spare - Se trata de un pin que no se ha de conectar.
GND - Toma de masa (0 voltios).
RS232 Rx - Conexión con el Tx del puerto serie de comunicación con el ordenador.
RS232 Tx - Conexión con el Rx del puerto serie de comunicación con el ordenador.

Conector PL2 (8 pines)

GND - Toma de masa (0 voltios).
Sel 0 - Los pines del Sel 0 hasta el Sel 4 permiten seleccionar de forma digital una de las 30 frases memorizadas en el módulo.
Sel 1 - digital binary select
Sel 2 - input port. They select
Sel 3 - one of the 30 predefined
Sel 4 - phrases.
Status - El valor alto (1) permite que el módulo hable y el valor bajo (0) le deja en silencio.
+5V - Alimentación eléctrica de 100 mA.


Patillaje del módulo sintetizador SPE030.

Esquema de conexión de una placa de proyectos PICAXE-18 CHI030. Los cables están soldados en los agujeros interiores de la placa.

Conexión del módulo sintetizador SPE030 a un circuito integrado amplificador ULN2003, para una conexión mediante puerto digital.

  • MODO 3: Operación mediante un microcontrolador PICAXE-18X/28X, utilizando el bus i2c.

Además de la alimentación eléctrica a 5 voltios, la conexión del bus I2C solamente requiere dos pines más, el correspondiente a SDA y a SCL. La opción de conexión mediante bus I2C permite al módulo SPE030 ejecutar cualquier texto propuesto directamente por el microcontrolador PICAXE.

Si se usa la interconexión mediante el bus I2C no se dispone de ninguna resistencia 4k7 incorporada en el módulo SPE030, por lo que se deberán conectar externamente entre las lineas SCL y SDA y la tensión de 5 voltios. El protocolo de comunicación i2c con el módulo sintetizador es el mismo que el utilizado en el EEPROM 24C04.

El código de la familia SPE030 es $C4, funciona a 400kHz (i2cfast) y utiliza un sólo octeto (i2cbyte) para guardar la dirección de memoria. Por lo tanto para configurar el bus i2c del PICAXE, antes de utilizar readi2c o writei2c, se ha de usar i2cslave $C4, i2cfast y i2cbyte. El SPE030 sólo tiene dos registros, el registro de comando (dirección 00) y el número de revisión de software (dirección 01). Para leer el número de revisión de software se ha de leer la dirección 01. Las lineas de programa para hacer esto serían:

readi2c 1, (b2)
debug b2

Conexión del bus i2c entre el microcontrolador PICAXE-18X/28X y el módulo sintetizador SPE030.

Todas las órdenes y el texto que se ha de reproducir se guardan en el registro de comando (en la dirección 00). Hay 32 órdenes válidas, de las que alguna se muestra a continuación.

Comando: LOAD BUFFER ($00) Acción: Guarda en la dirección de memoria el texto para ser reproducido.

Comando: SPKPRE 1 a 30 (Desde $01 hasta $1E) Acción: Reproduce una frase predefinida.

Comando: SPKBUF 64 ($40) Acción: Reproduce el texto guardado en la memoria.

El comando LOAD BUFFER va seguido del texto que se quiere reproducir. Puede ser más o menos largo (Con un máximo de 85 bytes). Se puede ejecutar LOAD BUFFER varias veces para aumentar el tamaño del texto a reproducir antes de que se ejecute el comando SPKBUF. El texto guardado en la memoria se borra cada vez que se ejecuta el comando SPKPRE o el comando SPKBUF.

El registro del texto a reproducir comienza por 3 bytes de control (el volumen, el tono y la velocidad), a continuación el texto en ASCII, y finalmente un cero ($00). Este texto así guardado puede ser reproducido ejecutando el comando SPKBUF. El módulo SPE030 permite un registro de 85 bytes, de modo que ese es el límite para una frase. El volumen, el tono, la velocidad y el registro de carácteres NULL necesitan de 4 bytes, por lo que quedan 81 para el texto. Por lo tanto para reproducir la palabra “PICAXE“ se ha enviar la secuencia siguiente hacia el bus I2C.

writei2c 0, (0,0,5,3,”pickacks”,0)
writei2c 0, (64)

Estos son los valores que acompañan al comando writei2c :

0 indica la dirección del comando LOAD BUFFER del módulo SPE030
0 Volumen (Max.) (entre 0 y 3, el valor 0 es el máximo)
5 Tono (entre 0 y 7)
3 Velocidad (entre 0 y 7)
Texto a reproducir “pickacks”
0 NULL

Se ha de tener en cuenta que cuando se trata de palabras raras (como ”PICAXE”) se obtienen mejores resultados experimentando con una ortografía fonética (Como por ejemplo ”pickacks”).

Para comprobar cuando el módulo SPE030 ha acabado la reproducción, se puede proceder a leer el registro de comando (dirección 0) - readi2c 0, b1.

Mientras dura la reproducción el registro de comando contiene la secuencia correspondiente al texto que se está reproduciendo, es decir 1-30 ($01-$1E) ó 64 ($40). El registro de comando tendrá un valor cero ($00 dólar) cuando la reproducción del texto haya finalizado y el módulo esté listo para la siguiente frase.

Patillaje de un microcontrolador PICAXE - 18X, indicando las dos patillas correspondientes al bus i2c.

Ejemplo de programa para el PICAXE

' Determina la dirección del i2c
' esclavo para el módulo sintetizador SPE030

i2cslave $C4, i2cfast, i2cbyte

' *** Firmware ***

' Guarda la versión del firmware
' en la variable b1 y la muestra en la pantalla

readi2c 1, (b2)
debug b2

main:

' *** Frase pregrabada ***

' Reproduce la primera frase
' pregrabada (mensaje 1)
' Mediante gosub se espera a que el
' mensaje se acabe de reproducir
writei2c 0, (1)
gosub wait4shutup

' *** Reproduccion de un texto
' al instante ***

' Se ha de introducir el texto
' a reproducir al instante
' Primero se guarda el texto en el
' registro (max 81 caracteres)
' Load buffer(0), volumen(0),
' tono(5), velocidad(1), "texto", null(0)
' Recuerde que se consiguen mejores
' resultados usando una ortografia fonetica!
writei2c 0,(0,0,5,1,"Hello pickacks user",0)
' El texto se esta reproduciendo
writei2c 0, (64)
gosub wait4shutup
' Se vuelve a iniciar el proceso
goto main

' *** Esta subrutina comprueba
' que el módulo SPE03o haya acabado
' la reproduccion ***

wait4shutup:

readi2c 0, (b1)
if b1 > 0 then wait4shutup
return

El módulo SPE030 se puede comprar en Tech supplies a un presio de 45 libras, que con los impuestos y los gastos de transporte se convierten en unos 86 €.

No hay comentarios: