Dimmer con control de paso por cero

Desde hace tiempo llevo intentando controlar la iluminación led de un acuario que está montada con paneles leds alimentados con 220AC.

panel led

He probado a regularlos de forma analógica mediante un triac y funciona bien, pero mi intención es hacerlo de forma automática mediante Arduino.
El circuito de prueba es este

regulador triac

En su día consulte sobre esto en otro hilo, pero no llegué a conseguir resultados positivos, y vuelvo ahora a intentarlo.
Leyendo información al respecto, tengo claro el concepto de que es necesario controlar el paso por cero de la onda senoidal de la red eléctrica, lo que no se es como decirle a Arduino que lo haga.

Para mi es fácil usar el comando analogWrite para generar un pulso PWM, como hago ya con alguna iluminación controlada con CC, por ejemplo:

analogWrite(out_rojo,ciclo_rojo);

Lo que no se como hacer, es que el pulso PWM arranque en el paso por cero.
He encontrado esto en el foro, pero está desarrollado para 60 Hz, no se si me podría servir.

foro arduino

Para los que teneis conocimiento en Arduino os podrá parecer algo muy simple, pero a mi se me hace un mundo.
¿Podriais echarme una mano por favor?

BUenas:
No se si acabo de entender tu cuestion, pero en principio entiendo que usando el principio de PWM y tomando como referencia el punto 0 de la red AC, quieres modificar la frecuencia para poder regular la intensidad de un foco led AC... Lo veo super ambicioso.
Pienso que seria mucho mas simple y coherente que ya que en principio todo se maneja en DC. Que eliminaras el modulo de alimentacion AC y trabajaras directamente sobre los leds, usando mofset para poder amplificar la señal PWM.
Por lo demas, en principio no hay demasiada diferencia en que uses un SKetch a 60hz, por lo general hay una tolerancia de +/- 10 hz,es decir, funcionara sin mas problema entre 40 y 60 Hz. Y en cualquier caso si tienes en cuenta que un Hz, equivale 1 ciclo por segundo, podras recalcular el SKetch.

Gracias Antykrysto.
El motivo de no hacerlo en DC es por no trabajar con tensiones tan altas en continua teniendo en cuenta que las luces está, en un entorno húmedo. El chip del led trabaja directamente a 220AC y lo único que parece que tiene, es un rectificador.
¿Tan complicado es regular un triac controlado por Arduino?

Hi,
El problema de usar AC para regular la intensidad del LED necesitas saber cuando tienes que disparar el triac. Una solucion seria usar un optocoupler conectado al AC que te de un pulso cada vez que el AC cruza el zero y dependiendo del angulo donde esta el AC es que tienes que dispararlo. Yo en uno de mis projecto uso un transfomador de 6 voltios y de ahi saco el cruze del zero que uso para disparar un "SSR AC NON ZERO CROSSING". Esto los venden en Ebay. Despues usando el Arduino leo el pulso y determino cuando tengo que disparar el triac. Es un poco complicado pues tienes que tener conocimientos de como trabaja el voltaje AC. Con relays de Ac tienes que tener cuidado pues vienen dezero crossing y non zero crossing. Para poder usar el control de voltajes que adjuntas tendrias que ver como cambiar el valor de la resistencia. Podrias usar un motor o un stepper motor que te pueda controlar el movimiento de la resistencia variable.
Adjunto un link de un tutoral de como hacerlo con un Arduino.

Gracias tauro0221, siguiendo tus consejos he retomado el proyecto asumiendo que es necesario controlar el disparo del triac cuando la tensión de red pasa por cero.
He localizado un dimmer que tiene en cuenta esto, al menos eso creo.

Dimmer PCB

Tras realizar un montaje de prueba para probar el dispositivo y compilar el código de ejemplo que ofrece la propia página, veo que el pin de salida en vez de generar un pulso PWM con un ciclo variable, genera un pulso fijo con una frecuencia de 100Hz.

Pensaba que la regulación se realizaba con un pulso PWM, y se me desmonta toda mi teoría.
¿Podriais explicarme por qué ocurre esto?
Me surgen tres dudas que no consigo aclarar.

¿Si el pulso es fijo, como regula el dimmer?

En el código aparece la instrucción "zerocross 5" que no comprendo para que sirve.

En las instrucciones del código, indica que la entrada del pulso Zero Cross tiene que ir en Arduino Uno al pin D2 sin poderse cambiar, ¿Tiene algo que ver con los Timmer?

Os dejo el código por si me podéis ayudar a comprender como funciona.
Gracias por vuestra ayuda

/**************
 *  RobotDyn
 *  Dimmer Library
 *  **************
 * 
 *  The following sketch is meant to to define dimming value through potentiometer,
 *  The potentiometer values are changing in range from 0 to 1023
 *  potentiometer values are converted through the map function to values from 0 to 100% and saved in dimmer.setPower(outVal);
 *  Serial.begin is used to display dimming values 
 *    
 * 
 *  ---------------------- OUTPUT & INPUT Pin table ---------------------
 *  +---------------+-------------------------+-------------------------+
 *  |   Board       | INPUT Pin               | OUTPUT Pin              |
 *  |               | Zero-Cross              |                         |
 *  +---------------+-------------------------+-------------------------+
 *  | Lenardo       | D7 (NOT CHANGABLE)      | D0-D6, D8-D13           |
 *  +---------------+-------------------------+-------------------------+
 *  | Mega          | D2 (NOT CHANGABLE)      | D0-D1, D3-D70           |
 *  +---------------+-------------------------+-------------------------+
 *  | Uno           | D2 (NOT CHANGABLE)      | D0-D1, D3-D20           |
 *  +---------------+-------------------------+-------------------------+
 *  | ESP8266       | D1(IO5),    D2(IO4),    | D0(IO16),   D1(IO5),    |
 *  |               | D5(IO14),   D6(IO12),   | D2(IO4),    D5(IO14),   |
 *  |               | D7(IO13),   D8(IO15),   | D6(IO12),   D7(IO13),   |
 *  |               |                         | D8(IO15)                |
 *  +---------------+-------------------------+-------------------------+
 *  | ESP32         | 4(GPI36),   6(GPI34),   | 8(GPO32),   9(GP033),   |
 *  |               | 5(GPI39),   7(GPI35),   | 10(GPIO25), 11(GPIO26), |
 *  |               | 8(GPO32),   9(GP033),   | 12(GPIO27), 13(GPIO14), |
 *  |               | 10(GPI025), 11(GPIO26), | 14(GPIO12), 16(GPIO13), |
 *  |               | 12(GPIO27), 13(GPIO14), | 23(GPIO15), 24(GPIO2),  |
 *  |               | 14(GPIO12), 16(GPIO13), | 25(GPIO0),  26(GPIO4),  |
 *  |               | 21(GPIO7),  23(GPIO15), | 27(GPIO16), 28(GPIO17), |
 *  |               | 24(GPIO2),  25(GPIO0),  | 29(GPIO5),  30(GPIO18), |
 *  |               | 26(GPIO4),  27(GPIO16), | 31(GPIO19), 33(GPIO21), |
 *  |               | 28(GPIO17), 29(GPIO5),  | 34(GPIO3),  35(GPIO1),  |
 *  |               | 30(GPIO18), 31(GPIO19), | 36(GPIO22), 37(GPIO23), |
 *  |               | 33(GPIO21), 35(GPIO1),  |                         |
 *  |               | 36(GPIO22), 37(GPIO23), |                         |
 *  +---------------+-------------------------+-------------------------+
 *  | Arduino M0    | D7 (NOT CHANGABLE)      | D0-D6, D8-D13           |
 *  | Arduino Zero  |                         |                         |
 *  +---------------+-------------------------+-------------------------+
 *  | Arduino Due   | D0-D53                  | D0-D53                  |
 *  +---------------+-------------------------+-------------------------+
 *  | STM32         | PA0-PA15,PB0-PB15       | PA0-PA15,PB0-PB15       |
 *  | Black Pill    | PC13-PC15               | PC13-PC15               |
 *  | BluePill      |                         |                         |
 *  | Etc...        |                         |                         |
 *  +---------------+-------------------------+-------------------------+
 */

#include <RBDdimmer.h>//

//#define USE_SERIAL  SerialUSB //Serial for boards whith USB serial port
#define USE_SERIAL  Serial
#define outputPin  13 
#define zerocross  5 // for boards with CHANGEBLE input pins


//dimmerLamp dimmer(outputPin, zerocross); //initialase port for dimmer for ESP8266, ESP32, Arduino due boards
dimmerLamp dimmer(outputPin); //initialase port for dimmer for MEGA, Leonardo, UNO, Arduino M0, Arduino Zero

int outVal = 0;

void setup() {
  USE_SERIAL.begin(9600);
  dimmer.begin(NORMAL_MODE, ON); //dimmer initialisation: name.begin(MODE, STATE) 
}

void loop() 
{
  outVal = map(analogRead(0), 1, 1024, 100, 0); // analogRead(analog_pin), min_analog, max_analog, 100%, 0%);
  USE_SERIAL.println(outVal); 
  dimmer.setPower(outVal); // name.setPower(0%-100%)
}

Hi,
No puedes usar el dimmer con pwm porque el dimmer usa un condesador y una resistencia para variar el angulo de disparar el gate en relacion con la face del voltaje AC de entrada. Creo que la sugerencia de Antykrysto es la mejor pues puedes usar un mosfet como driver para prender/apagar los LEDs y usar el pwm. Para mi no hay ninguna diferencia en usar 220 AC o 220 DC. Ahora creo que deberias hacer un dibujo de como esta alambrando tu systema y que clase de componentes usas para poder darte una mejor sugerencia. Cuando dice que usas 220 AC es la entrada del PS que suple el voltaje de tus LEDS. Seria mejor que hagas el esquematico para saber como esta alambrado el systema.