Página principal
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 .