Informática y tecnología

Categoría: Arduino

Cómo diseñé mi propia radio FM

Hace años que me rondaba por la cabeza la idea de construir mi propia radio FM. Había llegado a comprar algunos de los componentes necesarios, y construí un prototipo pero me faltaba concretarlo en algo que pudiese usar todos los días. Sin cables a la vista.

Por fin me decidí. Y me puse manos a la obra.

Radio con carcasa imprimida en 3D.
Radio FM

Para la parte electrónica usé los siguientes componentes: Un módulo de radio para Arduino con el chip TEA5767, para sintonizar todos los canales; una pantalla OLED monócroma de 0.97 pulgadas, para mostrar la frecuencia sintonizada; amplificador de audio stereo; y un módulo ESP 32 WROOM, para controlarlo todo. El módulo de radio que utilicé no tiene control de volumen, de ahí que necesitara un amplificador para controlar el volumen.

El módulo de radio trabajaba a 5V y el ESP 32 a 3V, por tanto, usé un conversor de nivel para el bus I2C que conectaba ambos dispositivos. Como el ESP32 tiene dos comunicaciones serie I2C use uno para la pantalla y el otro para el módulo TEA5767. La alimentación de 5V y 3V la saqué de las correspondientes patillas de mi ESP 32. Falta por añadir que para sintonizar los canales use 2 patillas del ESP 32 que tienen «Touch sensor», o sea, que es sensible al tacto. Una patilla para subir la frecuencia y otra para bajarla que estaban conectadas a dos chapas de aluminio que hacían de botón.

Al amplificador van conectados dos altavoces para portátil.

La alimentación de toda la radio viene a través del puerto micro-USB del módulo ESP 32.

Faltaba la carcasa. La diseñé partiendo de cero tomando medidas a los componentes que quería fijar en ella. Creé todo el diseño con el programa OpenSCAD con el que generé los archivos de extensión STL. Luego usé el programa Ultimaker CURA, para que a partir de dicho archivo STL generase el código que entendiese mi impresora 3D. Finalmente, imprimí la carcasa en plástico PLA.

Fijé todos los componentes con tornillos y tuercas M2 y M3.

Os dejo unas imágenes de cómo quedó la radio FM.

Radio FM vista lateralmente.
Vista lateral de la radio.

Como hacer un visor de fractales

Hace algo menos de un mes me encontré con un artículo en la revista ‘The Magpi’. En él se hablaba de la construcción de un visor de fractales con un marco, una pantalla de tinta electrónica (e-ink display) y una Raspberry Pi. Aquí tenéis el artículo : https://magpi.raspberrypi.com/articles/piartframe.

A mi me encantó la idea desde el principio. Así que recordando que tenía una pantalla de tinta electrónica a la que no daba mucho uso (por no decir que estaba guardando polvo en una caja), decidí ponerme manos a la obra.

La pantalla venía con una placa de desarrollo para un microcontrolador ESP32. Se trata de una LilyGo ttgo T5 de 2.7 pulgadas con la particularidad de que es capaz de mostrar 3 colores, blanco, negro y rojo. Necesitaba también un marco. Elegí un porta-fotos de 10 x 15 cm con el marco negro que encontré en Amazon. Me encargué también un passepartout de 10 x 15 cm con una ventana del tamaño de mi display. ¿Qué es un passepartout? no es más que un cartón con una ventana biselada en medio para realzar el motivo central de una foto o cuadro. Lo pedí online en el «Taller del cuadro». También usé una tarjeta micro sd para almacenar temporalmente las imágenes mientras se van creado.

Como ya venía con un micro controlador, decidí no usar ninguna Raspberry Pi y programé todo el código en el entorno de programación Arduino.

Para hacer el software, partí de un ejemplo que muestra una serie de imágenes almacenadas en la micro SD. Tuve que hacer nueva la parte de generar la imagen en un bmp y el código de generación de la fractal. Por cierto, elegí el conjunto de Mandelbrot como fractal.

Ahora os voy a contar un truco que utilizé al programar el visor. La idea al principio era parametrizar la generación de las fractales y pasarle unos valores aleatorios para que siempre muestre imágenes distintas. El problema de este planteamiento es que no siempre genera imágenes bonitas. En muchas ocasiones dejaba la pantalla completamente en negro. Para solucionar esto lo que hice es que al arrancar se genera una imagen con el conjunto de Mandelbrot centrado y completo. Y me guardo en un fichero pares de valores x e y de los puntos en los que esa imagen cambia de color. Luego, genero un número aleatorio n y leo en la posición n del fichero la posición del centro de la imagen que voy a mostrar. Para aleatorizar más, calculo un segundo número aleatorio que me indica la cantidad de zoom que quiero realizar. Esto me asegura que muestro un fractal de una zona interesante y que siempre son imágenes distintas.

Porta-retratos con fractal de Mandelbrot

Como construir un reloj sincronizado por el protocolo NTP, con un microcontrolador ESP8266 y una pantalla OLED.

Las pasadas navidades construí un reloj para ponerlo en el salón. La idea era tener un reloj que no fuese necesario ponerlo en hora. Os detallo someramente como lo hice.

Hardware

Para realizarlo use los siguientes componentes: un microcontrolador ESP8266, una pantalla OLED de menos de dos pulgadas, 3 tornillos M2,5 y una carcasa de plástico PLA que construí con una impresora 3D a partir de un diseño que encontré en la web de Thingiverse.

El microcontrolador ESP8266 se caracteriza por tener wifi, así que aproveche esta característica para obtener la hora de internet. De esta forma no necesitaba disponer de un reloj en tiempo real, ni diseñar un sistema más o menos complicado de puesta en hora. Como desventaja decir que al usar la wifi de mi casa el reloj no funcionará si me lo llevo a otro lugar (salvo que lo reprograme con el SSID y password de la nueva wifi, que no es nada complicado).

Para montar todo el hardware imprimí en 3D un monitor para la pantalla OLED y la placa ESP8266. En realidad esta carcasa estaba diseñada para realizar un monitor de control de un servidor de Octoprint, pero se ajustaba perfectamente a lo que yo necesitaba.

Software

Para que todos estos componentes funcionasen faltaba el software para lo cual fusione dos ejemplos que vienen con el entorno Arduino a los que les hice modificaciones para que se mostrase en la pantalla la información que yo quería.

Tras instalar la placa esp8266 en el entorno Arduino tome como ejemplo un script para obtener la hora por NTP que usaba la librería «ntpclient». Pero unos meses más tarde, con el cambio al horario de verano, dejé de tener la hora sincronizada. Por tanto, tuve que buscar otro ejemplo que tuviese en cuenta el «day saving time» el script elegido se llama NTP-TZ-DST y viene dentro del apartado de ejemplos para la placa ESP8266 en el entorno de desarrollo para Arduino.

El otro ejemplo que combiné con el anterior fue un reloj que mostraba la hora en digital y en analógico por turnos sobre un pantalla OLED de 1,3 pulgadas. Lo modifiqué para que cuando se mostrase la hora en digital mostrase también la fecha. Además, le añadí una tercera vista en la que se mostraba la hora en digital simulando un visor de 4 dígitos de 7 segmentos. El propósito era aprovechar mejor todo el área de la pantalla para poder ver de lejos la hora.

Para finalizar, os dejo un vídeo con el reloj en funcionamiento.