Después de muchas idas y venidas, pruebas, rediseños, quemaduras, cortes y alguna que otra pequeña explosión, por fin traigo un del reloj de mesa inteligente en el que llevo dos años trabajando. Hacer un tutorial completo y detallado sería todavía más largo y tedioso, pero espero que estas pinceladas sean de ayuda para hacer el tuyo propio. Aviso de que se requiere mucho tiempo y práctica y no se puede hacer a la ligera…
Contenido
Qué es Temps-i 7?
Desgranemos su nombre:
Temps es tiempo en valenciano,
i de internet, que es de donde obtiene la hora,
7 de la pantalla que utiliza, de 7 segmentos para cada dígito.
Estos tres conceptos definen a este compacto reloj de sobremesa, con conectividad WIFI, sensor de temperatura y buena autonomía.
Vamos a ver cómo se hace!
Componentes
Primero, veamos los ingredientes de la receta y qué hace cada uno:
Sparkfun Esp32 ThingPantalla de segmentosBMP-280ResistenciasPCB personalizadaLiPo 3.7v 1000mAh
Placa ESP32-Thing de SparkFun >>Microcontrolador de altas prestaciones con conectividad WIFI y Bluetooth gracias al chip ESP32 integrado, ideal para proyectos de IoT.
Pantalla de 4 dígitos de 7 segmentos de color rojo. >>Mostrará la hora y la temperatura.
Módulo BMP-280 >>Sensor digital de temperatura y presión barométrica muy compacto.
Resistencias de 100 Ohm. >>Necesarias para reducir la corriente en la pantalla, sin disminuir excesivamente su brillo (admite hasta 1k Ohm, pero así sería difícilmente visible con la luz del día).
Placa PCB con circuito impreso personalizado. >>Simplifica la conexión de la pantalla y las resistencias al microcontrolador.
Batería LiPo 3.7v 1000mAh >>Asegura una autonomía de más de 48 horas sin alimentación externa.
Cables puente. >>Para realizar conexiones adicionales con los módulos externos.
Pulsador >>Usado para alternar el programa mostrado en pantalla.
Diseño electrónico
Es muy importante estudiar los componentes electrónicos que vamos a utilizar, leer todas las especificaciones y prototipar con todas las precauciones antes de ponernos a soldar como locos.
Elección de los componentes
Los componentes arriba listados no son mera casualidad ni copia de ninguna otra parte. Simplemente son la prueba más exitosa de muchas otras y que cumplen todas las necesidades del proyecto:
La pantalla de 4 dígitos muestra exclusivamente lo que busco ver: la hora. Si además puedo aprovechar para mostrar la temperatura, pues mejor. Pero una pantalla de más calidad, de tipo LCD, generaría un mayor consumo realmente innecesario ya que otra de las características fundamentales es la autonomía.
El microcontrolador cuenta con conexión a internet, así como suficiente capacidad de cómputo. Además, tiene suficientes pines entrada/salida para manejar la pantalla sin necesidad de un expansor de pines. Otras opciones que he probado:
Microcontroladores más compactos: Teensy 4, Digispark, SparkFun Pro Micro. Necesitan expansor de entrada/salida (PCF8574) y/o módulo WIFI (ESP-01). Además, requiere demasiadas conexiones.
Microcontralor con conexión WIFI integraday suficientes E/S, como la NodeMCU con Esp8266. Faltaba potencia en el procesador y se retrasaba casi 4 segundos en cada minuto.
Prototipado del circuito eléctrico
Una vez estudiados y obtenidos los componentes, los conectamos en una placa de prototipos (o protoboard) para probar su funcionamiento.
En mi caso, tras varias combinaciones de pines, la forma más organizada me ha resultado ser la siguiente:
ESP32-Thing
Componente
VBAT
LiPo +
3V3
BMP-280 3V3
GND
LiPo - BMP GND BMP SD0 Pulsador -
GPIO21
BMP SDA
GPIO04
BMP SCL
GPIO32
Pulsador +
GPIO17
Pantalla Dígito 1
GPIO23
Pantalla Dígito 2
GPIO19
Pantalla Dígito 3
GPIO25
Pantalla Dígito 4
GPIO15
Pantalla Segmento A
GPIO22
Pantalla Segmento B
GPIO27
Pantalla Segmento C
GPIO12
Pantalla Segmento D
GPIO13
Pantalla Segmento E
GPIO18
Pantalla Segmento F
GPIO26
Pantalla Segmento G
GPIO14
Pantalla Segmento P (punto)
Esquema de patillaje
Una vez tengamos el prototipo montado, es bueno pasarlo a un esquema con un programa de EDA (automatización de diseño electrónico) como Kicad, donde también podremos generar un diseño de PCB para mandar a fabricar. Si no, siempre puedes hacer el esquema en papel, ya que dentro de dos meses no vas a recordar dónde iba cada cable...
Kicad tiene su truquillo y es bueno practicar antes con proyectos más sencillos. Aun así, es asequible para usuarios medios, ya que básicamente consiste en buscar y elegir símbolos de nuestros componentes y conectar sus pines correctamente según sus especificaciones.
Yo, para no liar la cosa de cables en el papel, he usado nombres en cada conexión, que también es válido en Kicad. Además, verás que la ESP32-Thing está compuesta por dos tiras de 20x pines, ya que no encontré ningún símbolo que me funcionara y no tenía tiempo de diseñarlo como toca. Lo importante es que nuestro diseño funcione y sea coherente con la realidad.
Esquema de Kicad
Lo siguiente es asignar huellas realistas (o footprints) a cada símbolo de componente, y entonces podremos diseñar una placa de circuito impreso (o PCB) que podemos enviar a fabricar (normalmente a China) por unos 15€ / 5 placas.
No hay que volverse muy locos con esto, especialmente si no somos expertos. Yo solo lo uso para facilitar las soldaduras cuando hay muchas conexiones, como es este caso donde se realizan unas 90 soldaduras pero se mantiene un formato bastante compacto.
Diseño de PCB en KicadVisor PCB en 3DPCBs encargadas
Programación del reloj
La mayoría de microcontroladores, como el ESP32-Thing, son compatibles con el IDE de Arduino, lo cual facilitará la conexión con la placa para enviarle un programa de reloj.
Antes de empezar, es importante hacer un pequeño listado de las tareas y funciones que queremos incluir en el programa e irlo modificando mientras las programamos. De esta forma podremos probar las distintas funciones por separado, y debuguear los distintos pasos para corregir errores más rápidamente. En mi caso, de nuevo tras muchas pruebas, quiero que el programa conste de lo siguiente:
Definición de librerías y variables.
Configuración de pines.
Conexión WiFi.
Obtener fecha por SNTP.
Desconexión y apagado de WiFi (ahorra batería).
Conversión de fecha a dígitos.
Muestra de dígitos en pantalla.
Iniciar temporizador.
Iniciar lectura de pin de cambio de programa.
Cambio de programa al activar el pulsador.
Lectura de sensores.
Muestra de temperatura en pantalla.
Actualizar hora al finalizar el temporizador (cada minuto).
Reiniciar temporizador.
No me quiero entretener mucho con el código, y encima no es el más ordenado que tengo, pero lo dejo aquí incrustado para quien lo quiera copiar, o también en github:
Ten en cuenta que se hace uso de las siguientes librerías adicionales que deberás instalar usando el IDE de Arduino:
Gestor de placas esp32 de Espressif
Librería WiFiMulti
Librería Adafruit_BMP280
(el resto de librerías se derivan de las anteriores)
Deberemos probar constantemente el funcionamiento del código durante la fase de prototipado para poder cambiar la asignación de pines en caso de algún mal funcionamiento. Si ya está todo soldado y nos falla algo, será bastante más complicado encontrar y resolver el error, de ser en alguna conexión.
Ensamblaje
Soldaduras
Una vez comprobado el código y diseñada la PCB, ya podemos empezar a soldar, teniendo claro donde va cada cosa y tomando mucha precaución, porque una mala soldadura puede arruinarte cualquier módulo o generar errores en el programa.
BMP-280 soldada a la placaEsp32-Thing soldada a la palcaPantalla soldada a la placaResistencias soldadas a la placa
Diseño de carcasa
Con todo soldado y montado ya tenemos una mejor idea del volumen real del dispositivo. Yo lo voy a medir todo milimétricamente con un pie de rey para hacer un modelo 3D de la placa ya montada.
Modelo 3D en Blender de los componentes conectados en su posición final
Así puedes diseñar una carcasa alrededor del modelo y fabricarla con una impresora 3D, pero puedes buscar otros tipos de ensamblajes con madera o metal laminados.
Yo suelo usar dos piezas (una de base y otra de tapa) para poder atornillar la una a la otra. También voy a incluir distintos huecos para permitir la conexión del cable USB, para añadir el pulsador de cambio de programa y para añadir un soporte rotatorio que encajará el reloj en una ranura del televisor.
Además usaré PLA blanco en una pieza y gris en otra para darle algo más de vida al diseño, quedando todo así:
Y eso es todo. Espero que te haya gustado y te sea útil. ¡Lánzate a montar tu propio reloj WIFI! Cualquier duda sobre este reloj, al Twitter! 🐦