comprobar si hay corriente en la red con optoacoplador

buenas tardes.
tengo un problema (que raro) he montado el "equipo" de la imagen

, para comprobar si la red tiene o no tensión, pero, conectado el equipo siempre me da 4.9 V en el output, tenga o no tensión la red.
alguien podría echarme una mano? (al cuello no, leche, que ya estoy yo bastante agobiado!!!!)
mil gracias
Xosé

El valor de las resistencias de 47K en base a que cálculos???
Por casualidad te has pasado por el apartado documentación???
Has leído el datasheet???

Hi,
Aqui lo que esta pasando es que el opto te va a dar un pulso cada vez que pasa por "zero crossing". El va estar todo el tiempo a 5 voltios aunque no tengas voltaje de entrada.Debes de buscar un opto couple que no sea "zero crossing" a menos que no uses interrupts. Si usas interrupt si te va trabaja.El opto te va un pulso corto que lo mas posible que lo puedas leer usando digitalRead.

hola, SERENO.
el esquema es de la documentación
y las resistencias son de 27 k

hola tauro.
lo que quiero es saber, precisamente, si hay corriente en la red
con analogRead me da siempre 5v o 0v. Con un tester me da 5v siempre.
no he probado con interrupciones,porque no se como hacerlo, aunque he leído algo sobre ello.
gracias.

Hi,
Ahora que mencionas que te lee 5 voltios o 0 zero voltios entonces el arduino esta reconociendo el zero crossing. No entiendo que estas buscando pues el opto cuando lee 5 voltios quire decir que perdiste el AC pero si lees 0 voltios entonces quire decir que tienes voltaje. Aqui lo que tienes que hacer es leer la entrada por un tiempo y cuentas cada vez que lees un zero voltios y por ejemplo lees mas de 3 veces zero quire decir que tienes AC. Si no lees zero pulsos por un tiempo no tienes AC. Acuerdate que el zero crossing acurre cada 1/60 cyclos = (0.01666/2) segundos. En otras palabras vaz a tener un pulso cada .00833 segundos o 8.33333 ms. Otra cosa es que puedes leer la senal analoga o digital. Yo la leeria usando la digital pues el opto te da una senal de salida digital. Es mas rapida pues no haces conversion de analoga a digital.

hola tauro
he utilizado este post:https://www.luisllamas.es/arduino-cruce-por-cero-h11aa1/
y la lectura con interrupciones es ininteligible. ¿puede ser que el opto esté quemado? si no es así no entiendo.

Hi,
Primero si lees el pulso de salida del opto coupler con un voltimetro te va a leer 5 voltios todo el tiempo. El voltimetro no puede leer el pulso del opto coupler. Segundo tu dices que te lee zero o 5 voltios. Si esto es correcto entoces el opto coupler esta trabajando. Vamos hacer una prueba adjunto un sketch que te lee la salida del opto por 1 segundo y dice mas o menos cuantas veces pasa por el zero crossing. Correla a ver que dice. Si dice zero quiere decir que no estas viendo el zero crossing. Tienes que cambiar el pin al tu estas usando.

byte zerox_pin = 2; //cambie el pin al que estas usand
unsigned long tiempo ;
byte contador;
//----------------------------------------------------------
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(zerox_pin, INPUT);
}
//----------------------------------------------------------
void loop() {
  // put your main code here, to run repeatedly:
  contador  = 0 ;
  tiempo  = millis();
  do {
    if (digitalRead(zerox_pin) == 0) {
      contador ++;
    }

  } while (millis() < tiempo  + 1000);//leer el zero por un segundo

  Serial.print( "contador = "); Serial.println(contador);
  contador = 0;
  delay(1000);
}
//----------------------------------------------------------}

hola tauro
he hecho lo que me dices
el resultado es, tenga o no tenga corriente en la red: contador = 0
me dirás, porque no se que hacer
un saludo
y gracias
Xosé

Hi,
Haz una cosa en el dibujo de como tienes alambrado el opto coupler si tienes el condesador conectado a los pines 2 y 3 remuevelo y corre el sketch otra vez para ver que resulta.

hecho.
el resultado es el mismo.
con la diferencia que ahora "contador = 0" aparece cada segundo, y antes era muy rápido

Hi,
Ahora yo creo que el opto coupler puede ser que este danado. Al anadirle el condesador lo que estabas sucediendo era que estabas filtrando el pulso. Segun las especificaciones del fabricante este cuando pasa por zero x te va a dar un pulso de 2.5ms. Que es suficiente para que el arduino lo pueda capturar. Ahora en la aplicacion del opto ellos usan una resistencia de 18K si usas un voltaje de 220 voltios.. No se tienes otro extra que puedes tratar de todas manera vamos a tratar de hacer la ultima prueba y es de bajar las dos resistencia a 18K o cerca de esta. La corriente mas del diodo ed 50ma. Ahora con las resistencias que usas es una corriente de 220/94k = .00234ma. Si quires podemos bajarla a una corriente de por lo menos 15ma que todavia esta dendro de las especificaciones de 50ma max. Usa dos de 20K para ver si trabaja. Acuerdate de que estas usando 220ac y tieness que tener muco cuidado.Por casualidad no tienes un osciloscopio. Estoo te haria el diagnostico mas facil.

hola, tauro
gracias por tu tiempo
no tengo osciloscopio y tendré que comprar resistencias.
donde vivo es imposible conseguirlas.
en cuanto las tenga hago la prueba y vuelvo a comentar.
un saludo
Xosé

Hi,
Haz una prueba y es de desconectar la senal al arduino y con un cable lo conectas a los 5 voltios y el otro lado al pin que usas para leer la senal. Luego lo conectas a ground y mira ver cuantos counts lees. Cuando lo conectas a ground debe de leer counts y cuando lo conectas a los 5 voltios debe de leer zero counts. Otra cosa es de cambiar la variable de "byte contador" a "int contador". Esto es para evitar un overflow pues debe de leer como 7xxx counts.

Otra prueba que puedes hacer es de desconectar el AC y usando una resistencia de 300 ohmios conectada a los 5 voltios del arduino y el otro lado de la resistencia al pin 2 del opto coupler. corre el sketch y te debe de leer 7xxx cuando conectas el voltaje y cuando lo desconectas debe de zero counts. Si esto no trabaja entonces el opto coupler paso a mejor vida. No olvides de conectar el ground pin 3 al ground del arduino.

hola tauro.
he conectado el pin de arduino a tierra y a cinco voltios. con tierra lee 71, 19, 194, 19, 19,... y con 5v lee 0.

entiendo que está mal el opto?
un saludo
Xosé

Hi,
Eso quire decir que el pin esta bien. Ahora haz la prueba de conectar 5 voltios con una resistencia de 300 ohmios al pin 2 del opto con el pin3 conectado al ground del arduino. Esto te va a decir con seguridad si el opto coupler esta bien o se dano. Con 5 voltios te debe de leer counts sino lee counts entonces el opto paso a mejor vida. Acuerdate de cambiar la variable del contador de byte a integer.

hecho. el opto se ha muerto.
ya he pedido otro y unas resistencias.
volveré a dar la lata.

muchas gracias, Tauro

Xosé

hola
he montado un nuevo opto y funciona perfectamente.
muchas gracias.