Contando el número de cruces por cero usando arduino uno

-2

¿funcionará este código para mostrar la frecuencia de la señal de entrada del detector de cruce por cero?

#define SECONDS 2.0

int count = 0;

void setup()
{
  Serial.begin(9600);
  Serial.println("Zero Cross Test");
  attachInterrupt(0, cross, RISING);
}

void loop()
{
  delay(SECONDS * 1000);
  noInterrupts();
  float hz = count / SECONDS / 2;
  count = 0;
  interrupts();
  Serial.print(hz);
  Serial.println("Hz");
}

void cross() {
  count++;
}
    
pregunta Ryadiff

1 respuesta

0

Puede utilizar el optoacoplador H11AA1 para ejecutar un concepto de detección de cruce por cero. Encenderá el fototransistor por cada semiciclo de la señal de CA principal. Al detectar esta señal utilizando un MCU como Arduino, podemos encontrar la frecuencia de la señal. Aquí hay un entrenamiento simple del código Arduino para la detección de cruce por cero.

#define ZCD 2
#define LED_PIN 13

volatile byte counter=0;

void setup()
{
  pinMode(ZCD,INPUT_PULLUP);
  pinMode(LED_PIN,OUTPUT);
  digitalWrite(LED_PIN,LOW);
  attachInterrupt(digitalPinToInterrupt(ZCD),zerocrossing,RISING);
}

void loop()
{
}

void zerocrossing()
{
  ++counter;
  Serial.println(counter);
  if( counter == 60)
  {
    counter=0;
    digitalWrite(LED_PIN,!digitalRead(LED_PIN));
  }
}

El programa está desarrollado para hacer parpadear un LED una vez por cada medio segundo. Puede desarrollar este programa aún más de acuerdo con sus requisitos.

Según la sugerencia de Chris, he tratado de ampliar mi respuesta para detallar. Aquí está el circuito de Arduino y H11AA1 para la detección de cruce de cero. Lo que he hecho aquí es simplemente conectar una salida de optoacoplador al pin de interrupción de Arduino que detectará una salida de optoacoplador para cada detección de cruce de cero de la fuente de entrada. Luego, se solicita una interrupción al controlador y el controlador detendrá otra actividad y llamará a la función 'zerocrossing' en el programa. Luego, la función incrementa el valor del contador y parpadea un LED si el valor alcanza 60. Ya que, para un solo ciclo de CA, ocurren dos eventos de cruce por cero, el LED parpadeará por cada medio segundo. Puede imprimir el valor del contador en un monitor en serie para ver el valor de la frecuencia. He desarrollado el programa asumiendo que el valor de frecuencia es 60Hz.

    
respondido por el Dhans

Lea otras preguntas en las etiquetas