// =========================================================
// Soft Starter para Compresor AC 110V/60Hz - ATtiny85
// =========================================================
/*
F ----------///L///---------(Relay)------(Compresor)------- N
Ajuste Fino en Campo
El valor de min_delay = 1500 (1.5ms) es crítico. Si el compresor "zumba" o no arranca al final de la rampa, aumenta este valor a 2000µs. Si el TRIAC se dispara erráticamente, redúcelo a 1000µs.
El valor de delay_step controla la suavidad. Si el arranque es muy brusco, reduce este valor a 20 (el arranque tardará el doble, aprox. 2.7 segundos).
*/
// Definición de Pines (Numeración ATtiny85)
const int PIN_TRIAC_GATE = 0; // PB0 -> Pin 5 (Salida hacia MOC3021)
const int PIN_BYPASS_RELAY = 1; // PB1 -> Pin 6 (Salida hacia Base 2N2222)
const int PIN_ZERO_CROSS = 2; // PB2 -> Pin 7 (Entrada INT0 desde H11AA1)
// Variables de control de fase
volatile bool zc_detected = false;
int firing_delay = 8000; // Retardo inicial (µs). 8.33ms es el semiciclo completo a 60Hz.
const int min_delay = 1500; // Retardo mínimo (µs). ~1.5ms asegura el latch del TRIAC con carga inductiva.
const int delay_step = 40; // Reducción del retardo por cada semiciclo.
bool soft_start_complete = false;
void setup() {
pinMode(PIN_TRIAC_GATE, OUTPUT);
pinMode(PIN_BYPASS_RELAY, OUTPUT);
pinMode(PIN_ZERO_CROSS, INPUT);
digitalWrite(PIN_TRIAC_GATE, LOW);
digitalWrite(PIN_BYPASS_RELAY, LOW);
// Configurar interrupción en flanco de bajada (FALLING)
// Ajustar a RISING si el circuito H11AA1 invierte la lógica.
attachInterrupt(0, zc_isr, FALLING);
}
// Rutina de Interrupción de Servicio (ISR) - Debe ser lo más corta posible
void zc_isr() {
zc_detected = true;
}
void loop() {
if (zc_detected) {
zc_detected = false; // Limpiar bandera inmediatamente
if (!soft_start_complete) {
// FASE 1: Arranque Suave (Rampa de voltaje)
if (firing_delay > min_delay) {
delayMicroseconds(firing_delay); // Esperar el ángulo de disparo
pulse_triac(); // Disparar el TRIAC
firing_delay -= delay_step; // Reducir retardo para el siguiente semiciclo
} else {
// FASE 2: Transición a Bypass
soft_start_complete = true;
digitalWrite(PIN_BYPASS_RELAY, HIGH); // Cerrar el relé electromecánico
delay(50); // Esperar ~50ms a que el relé cierre sus contactos físicamente
}
} else {
// FASE 3: Régimen Permanente (Relé cerrado)
// El TRIAC se sigue disparando en min_delay como respaldo,
// pero la corriente fluye principalmente por el relé (casi 0V de caída).
delayMicroseconds(min_delay);
pulse_triac();
}
}
}
// Función auxiliar para generar un pulso de puerta robusto
void pulse_triac() {
digitalWrite(PIN_TRIAC_GATE, HIGH);
delayMicroseconds(100); // Pulso de 100µs (suficiente para cargar la capacitancia de puerta)
digitalWrite(PIN_TRIAC_GATE, LOW);
}
/*
Tierras Separadas: Usa un plano de tierra analógico/digital para el ATtiny85 y un plano de tierra de potencia para el TRIAC, uniéndolos en un solo punto (estrella) cerca de la fuente de 5V.
Componentes de Potencia y Control:
TRIAC Principal: BTA41-600B (40A, 600V). Nota: Se usa el BTA41 en lugar del BTA24 para tener un margen de seguridad del 100% sobre el LRA y evitar fallos por dv/dt.
Optoacoplador Driver (TRIAC): MOC3021 (o MOC3022). Debe ser de cruce no nulo (Random Phase) para permitir el control de ángulo de fase.
Optoacoplador Detección de Cruce por Cero: H11AA1. Tiene LEDs en anti-paralelo, ideal para detectar el cruce por cero en AC directamente.
Relé de Bypass: Relé electromecánico de 30A, 5V DC (ej. Songle SRD-05VDC-SL-C).
Transistor de manejo de Relé: 2N2222 o BC337.
Diodo de protección (Flyback): 1N4007 (en paralelo con la bobina del relé).
Módulo de Fuente de Poder: HLK-PM01 (5V, 3W) o equivalente aislado. No uses fuentes capacitivas (droppers) por seguridad y estabilidad.
Componentes Pasivos y de Acondicionamiento:
Resistencias de entrada AC (Detección ZC): 2x 15kΩ, 1W. Conectadas en serie para soportar el pico de 155V de la red de 110V.
Resistencia de Puerta (Gate) del TRIAC: 180Ω, 1/2W.
Red Snubber (Obligatoria para cargas inductivas): 39Ω, 1W en serie con 0.01µF, 400V AC (Clase X2). Conectada en paralelo con los terminales MT1 y MT2 del TRIAC.
Resistencia base del transistor: 1kΩ.
Capacitor de desacople: 100nF (0.1µF) cerámico cerca del pin VCC del ATtiny85.
Agrega un filtro LC de entrada o, como mínimo, un inductor de modo común (Common Mode Choke) de 10mH en la entrada de 110V AC antes del circuito.
También, coloca capacitores cerámicos de 10nF/275VAC (Clase Y2) desde la línea y el neutro a tierra física.
*/