Decoder 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:

  random(min,max);

El primer temporizador se encarga de encender y apagar el led en un intervaluo 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 minima del flash -> duracionFlashMin
  • Duración máxima del flash -> duracionFlashMax
  • Tiempo de reposo minimo -> tiempoReposoMin
  • Tiempo de reposo máximo -> tiempoReposoMax

  • ////////////////////////////////
    // Animacion 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 esta es la función 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) ;
      }
    }



    Efecto soldador Arduino DCC

    Conexión decoder Arduino efecto soldador



    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.



    Efecto soldador

    Efecto soldador en la maqueta