jueves, 20 de junio de 2024

Arduino - Reproductor de voz desde memoria - Flash Memory EN25F80

Arduino
Reproductor de voz
desde memoria
Flash Memory EN25F80
 


Hace bastantes años hice los montajes voz2.html, arduvoz.html y arvoc.html .
Reproducían ficheros wav almacenados en tarjeta SD.
Revolviendo en los cajones, encontré algunas memorias Flash, frutos de mis reciclajes de componentes.
Se me ocurrió utilizar estas memorias como almacenamiento de ficheros wav.
Lo primero era almacenar el fichero wav en este tipo de memorias que  utilizar el bus SPI.
Para grabar esta memoria (EN25F80) he utilizado el programa IMSProg junto con un grabador CH341.


Antes de todo esto he tenido que grabar una serie de palabras en un fichero wav.
Este fichero wav tiene el formato de 8bits y a 11KHz.


Con el programa Audacity  edito el fichero de sonido y calculo la posición de memoria de cada palabra.
Ejemplo:
        {1,"beep", 0,25960},
        {2,"proxima",28017,15983},
        {3,"cuatro", 44869,13409},
El sonido beep empieza en la posición de memoria 0, y con un tamaño de 25960.
Se calcula multiplicando 11000 * por los segundos.

Para entender el funcionamiento del programa, ver la explicación en ../arduvoz.html .
No he querido retocar la forma en que recarga los 2 buffer, lo hace leyendo byte a byte, cuando sería mucho mas eficiente leyendo de 100 en 100.

Para reproducir varios sonidos continuados, he creado una cola de sonidos(FIFO), primero en entrar, primero en salir, que reproduce uno tras otro los sonidos.
La lectura de la memoria 25F80 se hace mediante unas rutinas sacadas de https://hackaday.io/page/6060-spi-flash-test . He estado probando varias librerías pero el resultado no era el esperado, y eran difíciles de manejar y entender.
La adaptación de niveles entre el arduino que funciona a 5V y la memoria que funciona a 3.3V la he realizado mediante resistencias.

He realizado 2 montajes, el primero solo utiliza la consola para enviar el código de sonido, que reproduce cuando se manda la orden.
Como ejemplo he creado un anunciador de estaciones de metro, simple pero de los mas curioso, no he querido añadir enlaces. ;)



He colocado un pequeño altavoz piezoeléctrico, aunque si se quiere oír alto deberás conectarlo a un amplificador.
Programa1


En el  segundo he añadido un display OLED y un mando rotatorio para elegir el sonido a reproducir.

 


Programa2

Pensando como hacer algo más rápido la lectura desde la memoria Flash, lo que he hecho es leer 100 bytes a la vez, en vez de 1 byte cada vez, y se nota.
Programa3


Video demostrativo.

El que le quiera dar imaginación, lo puede utilizar para ascensores, puertas, etc.
Si no te gusta la calidad de sonido, puedes utilizar un módulo que reproduce MP3 desde SD, ver montaje armpg.html .

Saludos.
Juan Galaz




Bibliografía:

https://hackaday.io/page/6060-spi-flash-test
voz2.html
arduvoz.html
arvoc.html .



No hay comentarios:

Publicar un comentario