Usando dos atenuadores Arduino en dos lámparas usando una rejilla eléctrica

0

Sigo un tutorial para crear este dimmer módulo. Después de probarlo con una lámpara, todo funcionó bien. Luego intenté avanzar, haciendo dos módulos de atenuación para controlar dos lámparas.

Estoy haciendo todas las pruebas en mi casa, es decir, la misma rejilla eléctrica es compartida por todos los enchufes de pared y, por lo tanto, los atenuadores y las lámparas funcionan en ello.

Entonces, el problema: si conecto una lámpara a la vez con la alimentación, todo funciona bien. Pero entonces, si conecto ambas lámparas al mismo tiempo, las cosas empiezan a ponerse raras. Una lámpara se enciende y apaga a una frecuencia alta y la otra no funciona.

Estoy usando todo esto con un dispositivo móvil Android, a través de un módulo Bluetooh.

Y mis preguntas:

a) ¿Si existe algún problema para usar dos reguladores de luz en la misma red eléctrica (creo que el circuito pierde la sincronización con la red cuando ambas lámparas están enchufadas)?

b) ¿Puede un Arduino controlar dos dimmers a la vez (código abajo, que estoy usando)?

Gracias,

int result;

int AC_LOAD = 4;
int AC_LOAD2 = 5;

int dimming = 125;
int dimming2 = 125;

char incomingByte;

String numberReceivedInStringFormat = "";
int numberReceivedInIntFormat = 10;
int lastValidNumber = 10;
boolean notUsed = false;

void setup() {

  Serial.begin(9600);
  pinMode(AC_LOAD, OUTPUT);
  pinMode(AC_LOAD2, OUTPUT);

  attachInterrupt(0, zero_crosss_int, RISING);
  attachInterrupt(1, zero_crosss_int2, RISING);

}

void zero_crosss_int() {
  int dimtime = (65 * dimming);
  delayMicroseconds(dimtime);
  digitalWrite(AC_LOAD, HIGH);
  delayMicroseconds(8.33);
  digitalWrite(AC_LOAD, LOW);/
}

void zero_crosss_int2() {
  int dimtime = (65 * dimming2);
  delayMicroseconds(dimtime);
  digitalWrite(AC_LOAD2, HIGH);
  delayMicroseconds(8.33);
  digitalWrite(AC_LOAD2, LOW);
}

void loop() {
  while (Serial.available() > 0) {
    incomingByte = (char) Serial.read();
    numberReceivedInStringFormat += incomingByte;
    if (Serial.available() == 0) {
      numberReceivedInIntFormat = numberReceivedInStringFormat.toInt();
    }
  }

  numberReceivedInStringFormat = "";

  if (numberReceivedInIntFormat < 10 || numberReceivedInIntFormat > 99) {
    numberReceivedInIntFormat = lastValidNumber;
  } else {
    lastValidNumber = numberReceivedInIntFormat;
  }

  result =  (int) (((-115 * numberReceivedInIntFormat) + 12275) / 89);

  dimming = result;
  dimming2 = result;

  if (notUsed) {
    delay(30);
  }

}
    
pregunta Danilo Setton

1 respuesta

1

Esto puede complicarse inesperadamente.

La forma en que funciona su módulo de dimmer esperando que la señal de alimentación de CA cruce los voltios a cero y luego encienda la alimentación con cierta demora.

Dependiendo de dónde viva y cómo esté conectada su casa, las dos luces que está controlando pueden o no estar conectadas a la misma fase. Esto significa que pueden o no pueden cruzar cero al mismo tiempo.

Si está seguro de que los dos reguladores se encuentran en la misma fase (si, por ejemplo, ambos están enchufados en la misma toma de corriente), supongo que lo que está ocurriendo es algo como esto ...

  1. Ambos reguladores ven el mismo cruce por cero en el mismo momento.
  2. Los dos pines conectados de cruce por cero cambian en el mismo momento.
  3. El pin con la prioridad de interrupción más alta se dispara e interrumpe.
  4. Se ejecuta el primer controlador de interrupciones. Mientras se está ejecutando, el segundo controlador espera.
  5. El primer manejador de interrupciones enciende la luz en el momento correcto y luego la apaga, lo que lleva algún tiempo.
  6. El primer controlador de interrupciones finaliza y vuelve.
  7. El segundo controlador ahora se ejecuta, pero ahora las cosas han cambiado. Ya no estamos en el cruce por cero, estamos detrás del lugar en la ola donde se terminó el primer manejador.
  8. El segundo controlador se ejecuta y enciende la luz en cualquier lugar de la ola en la que se encuentre ahora. Esto lleva algún tiempo.
  9. Vuelve el segundo controlador.

Puedes ver que ahora pueden suceder cosas extrañas y dependientes de la sincronización.

Probablemente, la forma más robusta de solucionarlo para que funcione con cualquier salida en cualquier fase es hacer que los manejadores de interrupciones se ejecuten muy rápidamente para minimizar la cantidad de interferencia entre ellos. Una forma de hacerlo sería reemplazar los retrasos en la demora de la quema del ciclo. Los microsegundos () demoran los temporizadores y las interrupciones.

Si los temporizadores y las interrupciones son más difíciles de lo que está dispuesto a poner en este proyecto (son super útiles, pero pueden requerir mucho esfuerzo para comenzar a trabajar), entonces podrían hackear algo más fácil si supieran que ambos atenuadores Estaría en circuitos con la misma fase. Podría tener un solo controlador de interrupción para ambos reguladores. Este manejador podría determinar qué secuencia para encender y apagar ambos atenuadores y los retrasos entre los pasos y luego controlar ambos atenuadores en un solo flujo de ejecución. ¿Tiene sentido?

    
respondido por el bigjosh

Lea otras preguntas en las etiquetas