Descripción
A quién no le ha pasado que ha encendido su soldador para que vaya calentando y en ese momento ha surgido algo que te ha distraído para cuando te has dado cuenta, el soldador lleva hora y media encendido, gastando energía, deteriorando la punta y con el consiguiente peligro de incendio. Pues a mí me ha pasado durante días debido a mi naturaleza despreocupada.
Me propuse que no debía volver a suceder así que encontré la solución como siempre en Arduino. Haremos un aparato que sea capaz de avisarnos cuando lleve tiempo encendido y desatendido el soldador.
Esto lo haré básicamente forzándome a presionar un botón cada cierto tiempo (cada 45 min), así el sistema sabrá que estoy trabajando y que no me he ido. En caso de faltar a mi cita, éste apagará la alimentación del soldador.
El soldador que uso es realmente una estación de soldadura que cuenta con fuente de calor. Es conveniente que después de usar este calefactor, dejemos enfriarlo mientras se ventila él mismo, así que no debemos apagarlo antes de terminar este proceso que suele durar un par de minutos, por este motivo debo incorporar un avisador acústico para avisarme que dispongo de tiempo suficiente para esta operación (a falta de 5min del apagado emitirá un pequeño sonido de advertencia). Además quiero que 10 segundos antes de llegue a desconectar me avise con pitidos intermitentes.
Para saber el tiempo del que dispongo y trabajar con tranquilidad y sin agobios de ir pulsando el botón todo el rato, incorporaré una pantalla de 7 segmentos y de 4 dígitos que mostrará los minutos y segundos que quedan para la desconexión.
Puesto que disponía de un módulo de 4 relés quise aprovecharlos e incorporé la idea de que además de controlar la estación de alimentación, lo hiciera también con otros aparatos accesorios que uso cotidianamente en estas tareas, como des-soldador, fuentes de alimentación para pruebas, transformadores, o lo que surja. Esto supone un grado más de dificultad pues me obliga a poner indicadores luminosos para mostrar la actividad de los distintos canales e interruptores para su control.
Como se manejaran corrientes alternas de 220V, me pareció buena idea prescindir de transformadores externos y usar unos pequeños convertidores de 5V que incorporaré en el interior del artefacto, pues en realidad no requiere de demasiada corriente.


Materiales necesarios
Electrónica.
Display de 4 dígitos TM1637
Este componente lo hemos utilizado ya en algunos proyectos. Es fácil de usar y las conexiones son mínimas y se puede alimentar con 5V. Usa 4 pines, Vcc, Gnd, DIO, y CLK que irán conectados de la siguiente manera.
- Vcc a 5V
- Gnd a Gnd
- DIO al pin D4 del arduino
- CLK al pin D3 del arduino


En la programación incluiremos la librería TM1637.h para simplificar su manejo (hablaremos sobre ello más adelante).
#include <TM1637.h>
Botón pulsador
Este será el botón a pulsar para demostrar nuestra presencia. Cada vez que se pulse reiniciará el cronómetro descendente en 45 minutos. Y en caso de haber agotado el tiempo nos permitirá volver a encender todos los relés que se apagaron de forma automática solo con pulsarlo.

El pulsador que usaré posee un led interno que deberá ir conectado a Gnd y al pin D12 mediante su correspondiente resistencia que se encenderá para indicar en qué momentos debe actuar.
El propio pulsador debe estar conectado a Gnd y al Pin A0, que actuará como pin digital de entrada en pull_up como en el caso de los interruptores que veremos más adelante.
Sonido
Para avisar acústicamente usaremos un buzzer que se conectará a Vcc y al pin D5 de arduino usando un transistor PN2222 o similar como se indica en el esquema. Esta forma de conectarlos nos evitará problemas de ruidos e interferencias.
Módulo de 4 relés
El proyecto ce centra en este elemento. Se trata de un módulo para Arduino que contiene 4 relés activados mediante optocopladores para aislar el circuito de control y el de potencia. Asunto importante y que me preocupa bastante es el aislamiento del circuito de potencia pues cualquier contacto sería fatal. Por ello me tomo muchas molestias en el diseño de la caja contenedora y asegurar los espacios, altura y sujeción de este elemento en el sistema así como los cables de alta tensión (220V).
Usaré solo 3 de los cuatro relés que trae el módulo. Las conexiones serán las siguientes:
- Gnd a Gnd
- IN1 conectado a D6
- IN2 conectado a D7
- IN3 conectado a D8
- Vcc conectado a 5V.
- El jumper JD-Vcc debe estar puesto.
La lógica de este módulo está invertida, por lo que activará el relé en LOW y lo desactivará en HIGH. Aprovecharé esta particularidad para que se encienda un led rojo en caso de estar apagado sin usar lógica de arduino. Esto es, usaré un led RGB con el canal rojo conectado al pin del arduino correspondiente al relé. Al estar en HIGH encenderá el led rojo, pero desactivará el relé. Para calcular las resistencias de los led usé la calculadora online.
Para indicar la selección de los relés empleé el canal verde de los leds RGB con sus resistencias adecuadas conectadas a través de la lógica de arduino en los pines D9, D10 y D11 (Hablaremos de ello en la programación).
Para seleccionar cada relé emplearemos los tres interruptores que irán conectados a tierra y a A1, A2 y A3 que en este caso a pesar de ser pines analógicos se comportarán como digitales de entrada en Pull up con las resistencias dedicadas de Arduino para no usar otras adicionales.
El esquema electrónico completo será el siguiente
Placa central de control
Será la que albergará el microcontrolador Arduino Nano. La placa de soldadura será estandar de 5x7cm. Usaré conectores machos JST XH2.54 para las conexiones entre los distintos módulos.

Conviene tener cerca un esquema de las conexiones para realizar las soldaduras. Puede llegar a convertirse en un quebradero de cabeza.


Programación
La única librería que usaremos y ya hemos mencionado es la TM1637.h para el manejo del display.
Código
Aquí dejo el sketch con todas las conexiones especificadas por si lo quieres descargar.
/************************************************
Nombre del proyecto: TEMPORIZADOR PARA SOLDADOR Y UTILES
Programado por Juan Carlos Pedrajas del Molino
Https:\\www.geniero.es
pedrajas@geniero.es
Fecha de inicio: 13/03/21
Fecha de finalización:
ESQUEMA DE CONEXION
+-----+
+----[PWR]-------------------| USB |--+
| +-----+ |
| GND/RST2 [ ][ ] |
| MOSI2/SCK2 [ ][ ] A5/SCL[ ] |
| 5V/MISO2 [ ][ ] A4/SDA[ ] |
| AREF[ ] |
| GND[ ] |
| [ ]N/C SCK/13[ ] |
| [ ]IOREF MISO/12[ ] | Led pulsador
| [ ]RST MOSI/11[ ]~| Led Verde 3
| [ ]3V3 +---+ 10[ ]~| Led Verde 2
| [ ]5v -| A |- 9[ ]~| Led Verde 1
| [ ]GND -| R |- 8[ ] | INT3
| [ ]GND -| D |- |
| [ ]Vin -| U |- 7[ ] | INT2
| -| I |- 6[ ]~| INT1
Pulsador| [ ]A0 -| N |- 5[ ]~| BUZZ
Boton1 | [ ]A1 -| O |- 4[ ] | DIO display
Boton2 | [ ]A2 +---+ INT1/3[ ]~| CLK display
Boton3 | [ ]A3 INT0/2[ ] |
| [ ]A4/SDA RST SCK MISO TX>1[ ] |
| [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] |
| [ ] [ ] [ ] |
| UNO_R3 GND MOSI 5V ____________/
\_______________________/
*/
#include <TM1637.h>
TM1637 pantalla(3, 4);
int segundos = 3600;
int reinicio = 2700;
int buzz = 5;
boolean x = 0;
int int1 = 6;
int int2 = 7;
int int3 = 8;
int verde1 = 9;
int verde2 = 10;
int verde3 = 11;
int ledPulsador = 12;
boolean estado = 1;
int boton1 = A0;
int boton2 = A1;
int boton3 = A2;
int boton4 = A3;
boolean estado1, estado2, estado3;
boolean rele1 = 0;
boolean rele2 = 0;
boolean rele3 = 0;
boolean rele4 = 0;
boolean activo1 = 0;
boolean activo2 = 0;
boolean activo3 = 0;
boolean activo4 = 0;
unsigned long previousMillis = 0;
const long interval = 1000;
void setup() {
Serial.begin (9600);
pinMode (buzz, OUTPUT);
pinMode (int1, OUTPUT);
pinMode (int2, OUTPUT);
pinMode (int3, OUTPUT);
pinMode (verde1, OUTPUT);
pinMode (verde2, OUTPUT);
pinMode (verde3, OUTPUT);
pinMode (ledPulsador, OUTPUT);
pinMode (boton1, INPUT_PULLUP);
pinMode (boton2, INPUT_PULLUP);
pinMode (boton3, INPUT_PULLUP);
pinMode (boton4, INPUT_PULLUP);
digitalWrite (ledPulsador, estado);
digitalWrite (int1, !rele1);
digitalWrite (int2, !rele2);
digitalWrite (int3, !rele3);
pantalla.init();
pantalla.begin();
pantalla.setBrightness(5);
tone (buzz, 1450);
delay (30);
noTone (buzz);
pantalla.display("HOLA");
delay (1000);
pantalla.colonOn();
pantalla.display("6000");
}
void loop() {
unsigned long currentMillis = millis();
int pulsador = digitalRead(boton1);
estado1 = digitalRead (A1);
estado2 = digitalRead (A2);
estado3 = digitalRead (A3);
while (x == 0) {
currentMillis = millis();
estado1 = digitalRead (A1);
estado2 = digitalRead (A2);
estado3 = digitalRead (A3);
pulsador = digitalRead(boton1);
if (estado1 == 0) {
rele1 = 1;
activo1 = 1;
}
else {
rele1 = 0;
activo1 = 0;
}
if (estado2 == 0) {
rele2 = 1;
activo2 = 1;
}
else {
rele2 = 0;
activo2 = 0;
}
if (estado3 == 0) {
rele3 = 1;
activo3 = 1;
}
else {
rele3 = 0;
activo3 = 0;
}
if (pulsador == 0) {
x = 1;
tone (buzz, 1500);
delay (100);
noTone (buzz);
delay (1000);
currentMillis = millis();
estado = 1;
digitalWrite (ledPulsador, estado);
}
if (currentMillis - previousMillis >= 500) {
previousMillis = currentMillis;
digitalWrite (ledPulsador, estado);
estado = !estado;
}
digitalWrite (verde1, activo1);
digitalWrite (verde2, activo2);
digitalWrite (verde3, activo3);
}
pulsador = digitalRead(boton1);
if (estado1 == 0) {
rele1 = 1;
activo1 = 1;
}
else {
rele1 = 0;
activo1 = 0;
}
if (estado2 == 0) {
rele2 = 1;
activo2 = 1;
}
else {
rele2 = 0;
activo2 = 0;
}
if (estado3 == 0) {
rele3 = 1;
activo3 = 1;
}
else {
rele3 = 0;
activo3 = 0;
}
if (pulsador == 0) {
segundos = reinicio;
pantalla.setBrightness(5);
pantalla.display("4500");
tone (buzz, 1500);
delay (100);
noTone (buzz);
delay (300);
}
pantalla.colonOn();
int s = segundos % 60 + segundos / 60 * 100;
if (s >= 1000) {
pantalla.display(s, 0, 0, 0);
}
if (s < 1000 && s >= 60) {
pantalla.display(s, 0, 0, 1);
}
if (s < 60 && s >= 10) {
pantalla.display(s, 0, 0, 2);
}
if (s < 10 && s > 0) {
pantalla.display(s, 0, 0, 3);
}
if (s > 0) {
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (s <= 10 && s > 0) {
tone (buzz, 1500);
delay (100);
noTone (buzz);
delay (10);
}
if (s == 501) {
tone (buzz, 1450);
delay (100);
noTone (buzz);
delay (100);
tone (buzz, 1500);
delay (100);
noTone (buzz);
}
if (s == 101) {
tone (buzz, 1450);
delay (100);
noTone (buzz);
delay (100);
tone (buzz, 1500);
delay (100);
noTone (buzz);
}
--segundos;
}
}
else {
currentMillis = millis();
pantalla.colonOff();
auto d = DisplayDigit().setA().setE().setF().setD();
const uint8_t rawBuffer[4] = {d, 0x09, DisplayDigit().setA().setD(), 15};
pantalla.displayRawBytes(rawBuffer, 4)->blink(1000);
rele1 = 0;
rele2 = 0;
rele3 = 0;
rele4 = 0;
if (currentMillis - previousMillis >= 500) {
previousMillis = currentMillis;
digitalWrite (ledPulsador, estado);
estado = !estado;
}
}
digitalWrite (int1, !rele1);
digitalWrite (int2, !rele2);
digitalWrite (int3, !rele3);
digitalWrite (verde1, activo1);
digitalWrite (verde2, activo2);
digitalWrite (verde3, activo3);
}
Diseño de la caja
Interior
Distribución de los componentes en el interior. La tapa se remata con 7 tornillos de 10x2mm
Sujeción de cables de alta tensión.
El diseño de las sujeciones es importante debido al riesgo de accidente. Estas mordeduras aseguran gran agarre. Usaremos para ello, tornillos y tuercas M3.
Botones y sujeción para los interruptores
Usaremos tornillería M3 también para asegurar el anclaje de los interruptores que con el paso del tiempo pueden acabar cediendo de otra manera.
Leds RGB
Colocación de los leds RGB en su ubicación, podría agregarse un poco de pegamento o atornillar con tornillos 10x2mm en los dos huecos habilitados para ello.
Zumbador
El buzzer se atornillará con dos tornillos 10x2mm en los sobresalientes colocados encima de los leds.
Pulsador
La colocación del pulsador con led de 16mm de diámetro no acarrea dificultad pues se atornilla con su propia tuerca.

Interruptor de corriente
Será el interruptor de on-off que dará paso o no a la alimentación del artefacto. Debe soportar corriente alterna de 220V. Irá incrustado a presión en la parte trasera.
Acabados
Posibilidad de acabado en blanco o negro. Descarga el fichero .rar que contiene todos los STL por separado además del fichero completo en Fusion360
Actualización (1)
Nuevo diseño de la caja.
Nueva versión que contiene los enchufes de fuerza en la propia carcasa. Mayor tamaño a la hora de imprimir, pero ofrece un sistema más compacto.
El diseño es muy compacto y requiere de aprovechamiento del más mínimo espacio. Los enchufes que he usado eran externos. Diseñé la caja para poder incorporarlos pero tuve que cortar partes innecesarias para adaptarlos a la caja.
Alimentación 220V
La toma de corriente de la red de 220V está interrumpida por el interruptor de entrada. Continúa para alimentar el transformador de corriente a 5V y de ahí sale para alimentar los enchufes de fuerza en la parte trasera de la caja. Nótese los puentes entre los relés y los correspondientes en los enchufes.
Actualización (2)
Tras dar por finalizado el proyecto siempre surgen problemas que convienen reajustar. Y este es el caso en el que me hayo.
Problemas con los leds rojos y relés.
Provoca que se enciendan los relés antes de que arduino se inicie. Es debido a la masa de conexión de los leds RGB canal rojo que están vinculados al mismo pin del arduino. Uso A4, A5 y D12. (D12 cambiado por D13 para led de pulsador).
Problema de reseteo inducido por sobrecarga.
Subsanado con condensador en corriente 5V 470mF.
Problemas con ruido eléctrico en los pulsadores.
Algún tipo de chispa provoca la falta de alimentación momentánea y el reset del arduino. Usaré un debounce en los pulsadores por software añadiendo pequeños delays en el código.
Reprogramación
Los cambios de esta versión requieren una nueva programación del microcontrolador modificando los nuevos pines asignados y mejoras como debounce en los botones de activación.
Producto final
Proyecto finalizado el día 5 de abril de 2021 e iniciado el 13 de marzo del mismo año.
1 pingback