Decodificador DCC Efecto soldador


Una de las mejores cosas de hacer una maqueta es darle un poco de vida con animaciones y efectos. Entre los diferentes efectos que podemos representar de una manera sencilla con Arduino es el efecto soldador.



Este efecto consiste en un led blanco que se encenderá y apagará de una manera que simule el efecto de un equipo de soldadura.

Una vez que se activa utiliza 2 temporizadores y la función random para tomar un número pseudo aleatorio entre un mínimo y un máximo que especifiquemos.La sintaxis es la siguiente:

long data = random(min, max);


El primer temporizador se encarga de encender y apagar el led en un intervalo de entre 5ms y 50ms.

El segundo temporizador se encarga de dar una pausa ente 2000ms y 10000ms para que no este constantemente usando el efecto.

También podemos cambiar la intensidad del led, por defecto esta en 175. Pero si queremos más intensidad se puede subir hasta un máximo de 255.

Primero tenemos que declarar las variables. Estas variables van antes del apartado setup() y controlan:

  • Intensidad del led -> 0 - 255
  • Duración mínima del flash -> duracionFlashMin
  • Duración máxima del flash -> duracionFlashMax
  • Tiempo de reposo mínimo -> tiempoReposoMin
  • Tiempo de reposo máximo -> tiempoReposoMax


// Variables para animación soldador

int intesisdadSoldador = 175; // Intensidad para pin PWM soldador
const long duracionFlashMin = 5 ;
const long duracionFlashMax = 50 ;
const long tiempoReposoMin = 2000 ;
const long tiempoReposoMax = 10000 ;
long  S1Interval = 500;
long  S2Interval = 500;
unsigned long  S1previousMillis = 0;
unsigned long  S2previousMillis = 0;
boolean estadoSoldador0 = false;
boolean estadoSoldador1 = true;


y el siguiente código es la función principal del efecto que vamos a utilizar en nuestro sketch de Arduino:

void accesorioSoldador()
{

  unsigned long S1currentMillis = millis();
  if (estadoSoldador0) 
    {
    if ( S1currentMillis - S1previousMillis > S1Interval) 
    {
      S1previousMillis = S1currentMillis;

      if (!estadoSoldador1) digitalWrite(acc[ACC_SOLDADOR].outputPin0, LOW);
      else analogWrite(acc[ACC_SOLDADOR].outputPin0, intesisdadSoldador);
      
      // digitalWrite(acc[ACC_SOLDADOR].outputPin0, HIGH); // Intensidad máxima
      
      estadoSoldador1 = !estadoSoldador1;
      S1Interval = random (duracionFlashMin, duracionFlashMax) ;
    }
  }

  if ( S1currentMillis - S2previousMillis > S2Interval) 
  {
    S2previousMillis = S1currentMillis;
    if (!estadoSoldador0) estadoSoldador0 = true;
    else estadoSoldador0 = false;
    digitalWrite(acc[ACC_SOLDADOR].outputPin0, LOW);
    S2Interval = random (tiempoReposoMin, tiempoReposoMax) ;
  }
}


Conexiones del decodificador


Efecto soldador Arduino UNO en decoder DCC

Conexión decodificador Arduino efecto soldador


Conclusión

En resumen, la función accesorioSoldador() implementa un control cíclico del estado del soldador, con un ciclo de encendido/apagado rápido y un tiempo de reposo aleatorio.

Una animación ideal para situar en talleres, obras, o como en el caso de mi maqueta, una reparación.


Efecto soldador con Arduino UNO

Efecto soldador en la maqueta