Crea tus aparatos e inventos a base de arduino, cables y PLA

Temporizador para soldador con Arduino

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.

Boceto de la idea
Control de soldador con temporizador y arduino.
Diseño final.

Materiales necesarios

  • Display de 4 dígitos TM1637
  • Buzzer
  • 1 transistor 2N2222
  • Resistencias
  • Módulo de 4 relés
  • 3 leds RGB
  • 1 interruptor general
  • 3 interruptores de pulsación
  • 1 pulsador con indicador led
  • Transformador 220-5V
  • 1 Arduino Nano
  • Tornillos y tuercas M3
  • Tornillos 10x2mm

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
TM1637 conexiones
Vista trasera
Vista frontal TM1637

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.

Pulsador con led interno

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.

Conexiones del pulsador y su led

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.

Esquema electrónico completo en protoboard

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.

Montaje de pruebas

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.

Materiales para la placa central de control

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

Vista inferior de la placa central de control. Aplicando estaño.
Parte superior de la placa central de control. Se detallan todas las correspondencias con el microcontrolador.

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.

Pulsador con led incorporado de 16 mm de diámetro.

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.

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.

« »
Plataforma de Gestión del Consentimiento de Real Cookie Banner