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:
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 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) ;
}
}

Conexión decodificador 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 en la maqueta