Arduino y control de fase (Dimming) mediante TRIACS

Hola, abro este topic por que he visto que había alguien preguntando por lo mismo en otro tema y también veo en el foro gente que está haciendo controladores domóticos, y me parece que puede ser interesante, pues los TRIACS pueden aplicarse para controlar luces y motores de corriente alterna.

Aprovecho para presentarme: No tengo ninguna formación ni experiencia relativa a la electrónica ni a la programación, pero después de unos meses con Arduino estoy realmente sorprendido de las cosas que puedo llegar a hacer, y para uno de los proyectos que tengo en mente el control de unos ventiladores AC sería genial.

Sin tener ni idea del tema, me puse a investigar y en primer lugar es inevitable hacer mención a Inizul y su Paperdimmer LDR, sin duda el dimmer más fácil de construir y de controlar a nivel de código.

Buscando circuitos que permitiesen un control más preciso, encontré estos otros, que usan un pin con interrupt para detectar el paso por cero mediante un optoacoplador, y otro pin para disparar un optotriac.

Fuente: http://forum.bildr.org/viewtopic.php?f=30&t=361

Video: - AC light dimmer with Arduino - - YouTube

Código: (habría que usar la fórmula que nos da para ajustarlo a nuestra frecuencia (50hz)

int AC_OUT = 10;  // Output to Opto Triac 
int AC_VALUE = 0;    // AC OUT VALUE (0 - 100) *0 = ON BULB; 100 = OFF BULB
int delayTime = (83*AC_VALUE);  // * THESE VALUES ARE UNTESTED, YOU MUST PLAY AROUND WITH THEM) *

/* ##########################################
   ## THIS IS HOW THE VALUES ARE WORKED OUT##
   ##########################################
   
   F = 60Hz
   ((1/F)/2 *10^6) / 100 = 83.33 
   *ROUNDED OFF TO 83*
   
   ##########################################
*/
   
int sensorValue = 0;
int value = 0;


void setup()  // run once, when the sketch starts
{
  Serial.begin(9600);
   
  pinMode(AC_OUT, OUTPUT); // Set the light control pin as output
  
  attachInterrupt(0, setAC, RISING);  // Attach an Interupt to pin2 (interupt 0) for Zero Cross Detection
}

void setAC()  // function to be fired at the zero crossing to dim the light
{
  delayMicroseconds(delayTime);  // delay the dim time
  digitalWrite(AC_OUT, HIGH);  // fire the Triac
  delayMicroseconds(10); // pause briefly to ensure the triac turned on
  digitalWrite(AC_OUT, LOW);   // turn off the Triac gate (triac will not turn off until next zero cross)
}

void loop()
{

}

Y por ultimo, esto es una placa con 8 dimmers:

http://gromain.zapto.org/xplduino/doku.php?id=carte_8_sorties_triac
Video: demo_lighting_arduino_xpl - YouTube
Código: /*by Gromain59Translated By Mike Deuschlemike.dausch@gmail.comMaterial - Pastebin.com

Por ahora no he construido ninguno de los circuitos, pero espero hacerlo en breve, de momento estoy esperando a que me lleguen los optoacopladores, optotriacs y triacs, y hasta aquí puedo decir, por que me asaltan un montón de dudas. A los circuitos de TRIACs se les añade un snubber (condensador y resistencia en paralelo con el triac) para manejar cargas inductivas con seguridad. También he visto que existen unos TRIACs llamados "Snubberless" o de 3 cuadrantes que no necesitan nada más para manejar una carga inductiva. Intentaré conseguirlos y comentar mis experiencias.

Una de las principales dudas que me surgen son las especificaciones de las resistencias de la parte AC de estos circuitos. ¿Debería usar resistencias de 1W?

Saludos.

Saludos!