- Para bajar a nivel 1 una luz nocturna que siempre se enciende en el nivel 3 de brillo, creó una PCB basada en ATtiny85 que presiona el botón tres veces automáticamente al recibir energía
- Como la fuente con caída por capacitor solo puede entregar unos pocos mA, eligió un ATtiny85 en lugar de un ESP8266 o una Raspberry Pi Zero, porque consume menos de 1mA a 1MHz y baja a nivel de μA en reposo
- Armó el circuito alrededor de un HT7333 para bajar de 8.3V a 3.3V y un 2N3904 para cortocircuitar a tierra el botón, y lo diseñó/fabricó con EasyEDA y JLCPCB
- Programó el chip con los GPIO de una Raspberry Pi 3 y
avrdude, y cuando Home Assistant enciende la luz nocturna, espera un momento y luego presiona el botón tres veces para cambiar automáticamente al brillo mínimo - Publicó los archivos de diseño y el código en C bajo licencia MIT, pero solo puede aplicarse a dispositivos con un voltaje interno de 4~12V y cuya entrada de botón se cortocircuite a tierra; los equipos conectados directamente a la red eléctrica sin transformador requieren extrema precaución
Las tres pulsaciones de botón que repetía todos los días
- Home Assistant está configurado para encender la luz nocturna mediante un enchufe de pared Zigbee cuando el teléfono entra en modo de concentración para dormir
- La luz nocturna barata tiene un interruptor para definir si se enciende automáticamente y un botón para cambiar el nivel de brillo, pero cada vez que se enciende empieza en nivel 3 de brillo
- Si se presiona una vez el botón pasa al nivel 4, otra vez al 5, y a la tercera vuelve al nivel 1
- Para obtener el brillo mínimo deseado, había que presionar el botón tres veces cada noche
- Abrió el dispositivo, pero no se veía el nombre del chip ni había un potenciómetro de ajuste
- Tampoco funcionó en este producto un método encontrado en internet que decía que mantener presionado el botón unos 10 segundos cambiaba el brillo predeterminado guardado en EEPROM
Un microcontrolador ajustado a una potencia limitada
- La mejor solución era un microcontrolador que generara automáticamente la entrada del botón
- La luz nocturna reduce la tensión de la red con un capacitor en lugar de un transformador, así que la fuente interna solo puede entregar unos pocos mA
- El ESP8266 de un Wemos D1 Mini necesita cientos de mA al arrancar y activar la conectividad inalámbrica
- Una Raspberry Pi Zero es una computadora Linux completa que tiene que arrancar el sistema operativo
- Ambos dispositivos habrían necesitado una fuente aparte o un gran capacitor de almacenamiento y circuitería adicional para soportar el arranque
- La opción elegida finalmente fue el ATtiny85, de la familia AVR como los Arduino clásicos, y cuyo código puede escribirse desde el Arduino IDE
- Consume menos de 1mA funcionando a 1MHz
- En modo de ahorro baja a un nivel de μA, parecido al de un reloj de cuarzo
- Los LED de la luz nocturna consumen miles de veces más energía que el ATtiny85
Un circuito que reproduce la pulsación real del botón
- El riel de alimentación interno de la luz nocturna es de 8.3V, y como el ATtiny85 necesita 3.3V, usó un regulador de voltaje HT7333
- Un transistor 2N3904 cortocircuita a tierra la línea de señal del botón para reproducir la acción de presionarlo de verdad
- Los componentes alrededor se encargan de limitar corriente, evitar entradas erróneas y estabilizar la alimentación
- La resistencia de 1kΩ entre el ATtiny85 y el transistor limita la corriente de excitación que entra al transistor
- La resistencia de 10kΩ mantiene el transistor apagado mientras se energiza el sistema, evitando pulsaciones involuntarias
- Tres capacitores pequeños suavizan la alimentación suministrada al regulador y al chip
- Un header de 3 pines se conecta a alimentación, tierra y señal del botón
- Lo diseñó como una placa independiente para usarlo como dispositivo genérico que presiona un botón un número determinado de veces y también para aprender el proceso de fabricación de PCB
Diseño del circuito y la placa en EasyEDA
- En EasyEDA primero dibujó el esquemático con los componentes y sus conexiones
- Los puntos con el mismo nombre, como
GNDy3V3, son conectados entre sí por el ruteador - Si se especifican los componentes reales a usar, eso sirve luego para la colocación en PCB y para generar la lista de materiales
- Los puntos con el mismo nombre, como
- En la etapa de edición de la PCB se pueden definir directamente la posición de los componentes, el recorrido de las pistas, la forma de la placa y los elementos impresos
- En la placa imprimió el logo de hardware de código abierto y su nombre de usuario
- Como el circuito era simple, la hizo como placa de una sola cara, sin necesidad de ruteo complejo ni de ajustar longitudes o formas de pistas
Fabricación en JLCPCB y ensamblaje de componentes
- En JLCPCB pidió la placa eligiendo los componentes reales y si quería ensamblaje o no
- La cantidad mínima de pedido era de 5 unidades, pero solo necesitaba 1, así que soldó a mano la mayoría de los componentes
- Para las resistencias y capacitores muy pequeños sí usó el servicio de ensamblaje de JLCPCB, porque el costo adicional era bajo
- Recibió la placa en solo 4 días después del pedido
Programación del ATtiny85 y verificación previa
- Un ATtiny85 vacío no tiene bootloader, así que no puede conectarse directamente por USB como un Arduino y requiere un programador aparte
- Lo programó usando los GPIO de una Raspberry Pi 3 y avrdude
- Conectó el header de la Pi y el chip con 6 cables jumper y luego ejecutó un solo comando
- En vez de conectarlo de inmediato a la luz nocturna, primero verificó el funcionamiento colocando un LED en el pin de salida
- El comportamiento final era parpadear tres veces y luego quedarse detenido
- En el video de prueba parpadea cuatro veces porque cambió más tarde la cantidad necesaria
Proceso de instalación y seguridad con la red eléctrica
- Soldó la placa terminada dentro de la luz nocturna, y el trabajo fue difícil porque tanto los componentes como el espacio eran muy pequeños
- El capacitor grande de la placa original estaba instalado con la polaridad invertida, y eso lo confirmó con mediciones de multímetro
- Como la luz nocturna no tiene transformador, al instalar la PCB adicional todo el circuito queda conectado a la red eléctrica
- El ATtiny85 debe grabarse antes de colocarlo en el dispositivo
- Después de instalarlo, no debe volver a conectarse un cable USB ni una Raspberry Pi
Automatización al dormir y funcionamiento final
- Cuando el reloj transmite al teléfono el estado de irse a dormir, el teléfono avisa a Home Assistant, y Home Assistant enciende la luz nocturna mediante el enchufe Zigbee
- La PCB energizada espera un momento para evitar que la luz nocturna falle y luego presiona el botón tres veces para cambiar al nivel 1 de brillo
- Detrás del difusor se ve la sombra del cableado interno, pero no aparece sobre la pared de la habitación, así que no causó problemas en el uso real
Materiales open source y condiciones de aplicación
- Publicó en tymscar/button-presser los siguientes materiales bajo licencia MIT
- Archivos Gerber para fabricar la misma placa
- Lista de materiales y esquemático
- Un breve código en C que corre en el ATtiny85
- Antes de aplicarlo hay que realizar las dos comprobaciones con multímetro indicadas en el README
- Este circuito solo funciona en dispositivos que tengan un riel interno de 4~12V y donde al presionar el botón la señal se cortocircuite a tierra
- Varios dispositivos baratos cumplen esas condiciones, pero no aplica a todos los productos, y cualquier equipo que funcione con red eléctrica debe revisarse siguiendo las pautas de seguridad antes de intervenirlo
Aún no hay comentarios.