Reloj sonoro para halloween basado en Rpi Pico

7 minute read

Reloj con sonidos de halloween que son reproducidos cada hora en punto. Requiere pocos componentes externos, los cuales son faciles de conseguir y de soldar. La tarjeta de circuito impreso es de una sola cara y puede hacerse de forma casera. Proyecto bastante personalizable y que involucra multiples areas (STEAM):Montaje electronico, programacion, carpinteria, arte, manualidades, etc.

Reloj personalizado instalado en la pared

Componente clave: Maquinaria para reloj de pared con contacto externo

El concepto:

La gran mayoria de los relojes de pared musicales que se encuentran en el mercado vienen con sonidos que no pueden ser cambiados ni modificados. Esto podria solucionarse con infinidad de microcontroladores y/o sistemas embebidos que hay actualmente en el mercado. Como la idea del proyecto es hacer que sea lo mas facil posible modificar los sonidos, el proyecto se decanto por el Raspberry Pi Pico por 3 razones principalmente:

  • No se requiere instalar ninguna aplicacion ni driver para descargar el firmware.
  • La tarjeta cuenta con 2 MegaBytes de memoria flash, por lo tanto se podrian grabar algunos sonidos en dicha memoria sin necesitar hardware adicional como memorias SPI o Micro SD.
  • La alimentacion se puede hacer mediante dos baterias AA directamente sin requerir componentes adicionales!

La tarjeta Raspberry Pi Pico, tiene un consumo aproximado de 1.6 mA en su rango mas bajo (en modo sueño profundo). Aunque parece poco, es demasiado alto para un circuito alimentado con baterias AA, pues estas se descargarian aproximadamente en 2 meses. Por esta razon fue necesario agregar un circuito externo que apagara totalmente la tarjeta, cayendo el consumo a 70 uA aproximadamente, lo cual le otorgaria una autonomia de un año mas o menos.

La funcionalidad principal del Raspberry Pi Pico es almacenar archivos de sonido y reproducirlos. Para mostrar las horas y generar una señal cada hora en punto, se usa una maquinaria de reloj de pared que tiene una salida de contacto. Combinando estos 2 elementos se obtiene el reloj que reproduce sonidos cada hora en punto!

Principales Caracteristicas:

  • Se han desarrollado 2 versiones que hacen practicamente lo mismo: una en CircuitPython y la otra en el SDK de C/C++.
  • Compatible con los sistemas operativos mas conocidos.
  • No se requiere instalar ninguna aplicacion para descargar el Firmware inicial.
  • La modificacion de los sonidos (en la version CircuitPython) no requiere recompilar codigo.
  • Hasta 3 años de duracion de las baterias AA en modo espera.
  • Componentes muy faciles de conseguir y ensamblar.
Diagrama simplificado del sistema encendido/apagado
El programa:

Al encenderse el Rpi Pico lo primero que este hace es poner en nivel bajo el GPIO que esta conectado al circuito de encendido para mantenerlo enganchado, luego determina cual debe ser el archivo a reproducir y al final de la reproducion pone el GPIO del circuito de encendido en nivel alto con lo que hace que el sistema se apague totalmente. Adicionalmente se cuenta con un sensor de luz conectado a una entrada analoga para determinar si es de noche y no reproducir sonidos.

Los archivos se reproducen en forma secuencial, uno a uno con cada encendido de la tarjeta, y para poder guardar la informacion del proximo archivo a reproducir se usa la memoria no volatil, asi que se debera ser cuidadoso al modificar el programa para evitar desgastes acelerados!

PARTICULARIDADES DE LA VERSION EN SDK C/C++:

Los sonidos a reproducir deberan ser convertidos a formato .WAV 16 bit monofonicos a 44100 Hz. Una vez hecho esto, se deberan procesar para generar archivos .h que contendran arrays[] de C e incluirlos en el codigo antes de compilar. El programa usa una salida digital mediante PWM e interrupciones para la reproduccion de los sonidos.

La principal virtud es que la ejecucion es inmediata al encender la tarjeta. La principal desventaja es que por ahora solo reproduce archivos .WAV que consumen bastante memoria, y para cambiarlos se requiere recompilar el programa.

PARTICULARIDADES DE LA VERSION EN CIRCUITPYTHON:

Los sonidos a reproducir deberan ser convertidos a formato .MP3 monofonicos. El programa usa los modulos audiopwmio y audiomp3 para la reproduccion de los archivos, que son leidos desde el sistema de archivos que viene incorporado. simplemente descargarlos al Rpi Pico y listo!

La principal virtud es la facilidad para cambiar los archivos de sonido: solo hay que arrastrar los nuevos archivos y reemplazar los actuales, ademas por ser en formato MP3 se puede almacenar unas 10 veces mas tiempo de sonido que en formato WAV. La principal desventaja es que la tarjeta toma algo mas de un segundo en ejecutar el codigo despues de encenderse, esto podria ser inadmisible en algunas aplicaciones.

El circuito:

Los componentes externos adicionales al Rpi Pico componen tres diferentes funcionalidades:

  • Encendido/Apagado: El circuito esta compuesto principalmente por un MOSFET, el Drain se conecta a la señal 3V3_EN y el source a GND. En la compuerta hay 2 elementos un capacitor conectado a tierra y una resistencia conectada a V+. Este circuito funciona en 3 pasos que se repiten ciclicamente:

    • Paso 1: El condensador esta totalmente cargado, haciendo que el MOSFET entre en conduccion, llevando la señal 3V3_EN a tierra y apagando completamente la tarjeta.

    • Paso 2: El condensador se descarga rapidamente mediante un pulsador o señal de contacto proveniente de la maquinaria del reloj, haciendo que momentaneamente el MOSFET entre en estado de no conduccion y se encienda la tarjeta. Al encenderse la tarjeta, lo primero que hace el programa es mantener dicho condensador descargado mediante un GPIO que pone en nivel bajo

    • paso 3: La tarjeta mantendra el nivel bajo del GPIO durante la ejecucion del sonido. Al finalizar pondra dicho GPIO en nivel alto, haciendo que el condensador se cargue rapidamente y que el MOSFET entre en conducion y se apague la tarjeta. La tarjeta quedara apagada totalmente hasta una nueva pulsacion.

  • Amplificador de audio: Consta de una sola etapa, mediante un unico transistor NPN conectado a una bocina de 8 Ohm. Posee una etapa previa de filtrado mediante condensador y resistencia, para evitar posible ruido de la salida digital PWM

  • Deteccion dia/noche: Sensor de luz para determinar si los sonidos deben reproducirse ( en el dia ) o no se deben reproducir ( noche ), esto para evitar ruidos molestor a la madrugada!

Ensamblaje:

El Rpi Pico puede ser soldado directamente a la tarjeta de circuito impreso, con lo cual se obtendra un conjunto de poca altura, o se podran soldar pines tipo header al Rpi Pico y conector hembra en la PCB para lograr un sistema flexible donde se puede extraer el Pico a voluntad. Todos los demas componentes no representan mucho problema, pues son de montaje Thru-hole. Finalmente la bocina, el sensor de luz y el interruptor de reloj podrian montarse mediante conectores para poder removerlos a voluntad, o directamente los cables al PCB para mayor ahorro de espacio.

El diseño de la tarjeta es de una sola capa y puede hacerse de forma casera en caso de ser necesario. Se han dejado pads libres para conexion a la mayoria de los GPIO del Rpi Pico, con lo cual se puede expandir sin mucho esfuerzo.

La tarjeta cuenta con 4 orificios para montaje, donde puede ser sujetada a la parte trasera del reloj de pared

Tarjeta casera, ejemplo de montaje directo y finalizada con conectores.

Para la construccion del reloj se debe escoger un disco, o plato, que puede ser de madera o plastico lo suficientemente grande para que pueda ubicarse la maquinaria del reloj y la tarjeta reproductora de los sonidos. Se debera realizar la fijacion de los elementos electronicos, seguido a esto se pueden agregar algunos accesorios como luces led y finalmente se realiza el trabajo artistico.

Mecanismo con salida externa, elementos decorativos, finalizado por atras y finalizado de frente

Para ajustar la hora, se deben retirar las baterias y todas las manecillas (horario, minutero y segundero). Girar muy lentamente la perilla de ajuste del mecanismo de reloj hasta escuchar un “click”. En ese momento poner todas las manecillas apuntando a las 12. Poner las baterias. Al presionar el interruptor pulsador de la tarjeta se puede “avanzar” sonidos una hora con cada pulsacion.

Listado de materiales

Componente Consigue el tuyo! Hoja de caracteristicas
Conector de hilera de pines hembra 2.54mm lo quiero comprar FHA3-S1XX.pdf
Conector de hilera de pines macho 2.54mm lo quiero comprar PHA1-S3XX.pdf
Resistencias TH 1/4W 1% lo quiero comprar MGR-SERIES.pdf
Interruptor momentaneo pulsador 6x6mm lo quiero comprar TS-1301.pdf
Raspberry Pi Pico lo quiero comprar pico-datasheet.pdf
Soporte para bateria AA para montaje en PCB lo quiero comprar Comfortable_Catalog.pdf
Bocina 8 Ohm 29 mm 0.25W lo quiero comprar DXP29W-A.pdf
MOSFET 2N7000 lo quiero comprar NDS7002A-D.pdf
Transistor bipolar NPN 2N2222A lo quiero comprar P2N2222A-D.pdf
Capacitor TH electrolitico lo quiero comprar TS13DE-CD110X.pdf
Capacitor TH Ceramico de disco lo quiero comprar TS15.pdf
Maquinaria de reloj de pared con contacto externa lo quiero comprar 12888SE_TRIGGER_CLOCK_MOVEMENT.pdf
Gancho para colgar reloj en pared lo quiero comprar wall_clock_hook.pdf
Fotodiodo de luz visible TEPT5700 lo quiero comprar tept5700.pdf
Tira de alambre coblre con LED y caja de bateria lo quiero comprar LED_Copper_Wire_Battery_Box.pdf

Circuito impreso

PCB Archivos fuente
Tarjeta de reproduccion de sonido (carpeta hardware) SINSONTE

Software

Software Archivos fuente
Firmware en CircuitPython & SDK C/C++ (carpeta software) SINSONTE

Componentes opcionales:

Componente Consigue el tuyo! Hoja de caracteristicas
Juego de 3 brocas escalonadas 3-20 mm + centropunto compralo aqui 3_pc_set_3-20mm_drill_bit_incremental_center_punch.pdf