Hola. Estoy intentando encontrar una manera de contar pulsos. Para ello, tenía pensado utilizar en el código las interrupciones del arduino. Como esquema eléctrico tengo lo siguiente:
El problema es que no me está funcionando. La idea es que, ya que los pulsos tienen una tensión entre 17 y 28V (marcado por el fabricante) utilizar un divisor de tensión y medir entre 2,5 y 5V en una entrada digital del arduino. En el arduino sin embargo no estoy recibiendo nada.
Me gusta esa idea, así que voy a intentar piyar uno. De todas formas, yo este esquema ya lo he enchufado y probado pero no llegué a conseguir leer nada en el arduino y no sé por qué :S. ¿Estoy haciendo algo mal?
fijate te dejo un link con info facil de comprender de optoacopladores guia optoacopladores
estaria bueno poder ver el codigo para ayudarte mejor !
cual es la falla que se presenta ? despues del divisor que voltaje tenes ? trata de dar la mayor cantida de datos para que los compañeros puedan entender y poder ayudarte de una mejor forma
Con el divisor de tensión formado por una resistencia de 22k y una de 5k. Además tengo una linea para conectar la tierra del arduino con la del emisor de pulsos, que en realidad es un contador de energía de las del cuadro de la casa (la idea es ver cuanto me consumen los aparatos con un arduino a través de los pulsos que emite).
El esquema que yo creo que estoy siguiendo es el siguiente, aunque es posible que esté equivocado en algo:
Primero que nada las imagenes estan mal subidas fijate en las reglas del foro esta como se suben podes intentar con este host que funciona bien es.tinypic.com/
lo siguiente que que tendrias que contar los pulsos por medio de una interrupcion y volcarlos a una variable ya que no se que rango de frecuencias se trabaja asi lo que estas asiendo es que te diga si esta en alto o en bajo el pulso y no los cuenta y cabe destacar que los medidores cambian varias veces el estado en pocos segundos ! un link con info sobre las interrupciones
ahora te detecta menos pulsos ?o con el codigo anterior ? como sabes que detecta menos pulsos ? pudiste medir con un osciloscopio ? puedes mostrarnos una captura del monitor serial y otra de la referencia con la que comparas para ver la diferencia ?
Las variables usadas en una interrupcion se han de usar con el modificador volatile
volatile int pulGlobal;
Asegurate tambien que el voltaje que le llega a la entrada sea de 5v o algo no mucho menor,arriba pones de 2.5v a 5 v,pero 2.5v podria no interpretarlo como high...
Tambien veo que has puesto un delay(30000) ,eso quiere decir que los datos que muestras por serial se actualizaran cada 30 segundos,tenlo en cuenta.
Ahora me detecta menos pulsos, con el código anterior sencillamente no detectaba nada, me sacaba todo el rato el mensaje LOW.
Cada vez que el contador de energía emite un pulso, también hace parpadear un led. Lo que estaba haciendo era comparar el número de parpadeos con la cuenta que hacía arduino.
Mañana probaré lo de volatile, no sabía que debía ser así. ¿Cuál es la diferencia y por qué me está cometiendo un error?
Otra cosa que he detectado es que cuando enciendo o apago el calentador (que es el aparato cuyo consumo quiero medir) me suma una gran cantidad a la variable pulGlobal. Es decir, yo apago el dispositivo y directamente me suma 36 o algo por el estilo. ¿Sabéis por qué puede ser esto?
Checho360:
Ahora me detecta menos pulsos, con el código anterior sencillamente no detectaba nada, me sacaba todo el rato el mensaje LOW.
Cada vez que el contador de energía emite un pulso, también hace parpadear un led. Lo que estaba haciendo era comparar el número de parpadeos con la cuenta que hacía arduino.
Mañana probaré lo de volatile, no sabía que debía ser así. ¿Cuál es la diferencia y por qué me está cometiendo un error?
Otra cosa que he detectado es que cuando enciendo o apago el calentador (que es el aparato cuyo consumo quiero medir) me suma una gran cantidad a la variable pulGlobal. Es decir, yo apago el dispositivo y directamente me suma 36 o algo por el estilo. ¿Sabéis por qué puede ser esto?
Gracias por la ayuda.
Puede ser lo que te he puesto arriba,muestras datos y haces un delay(30000) por lo que el sketch no hace nada durante 30 segundos ,solo funciona la interrupcion.cuando pasan los 30 segundos vuelves a mostrar el valor que ha podido aumentar en esos 30 segundos.cambia el delay(30000) por delay(1000) para que actualize los valores cada segundo a ver..
Pues nada. Hoy me he puesto con ello, le he dedicado un rato y no he conseguido detectar nada. Lo único que he llegado a conseguir contar en el programa del arduino son una serie de pulsos que salen cuando enciendo o apago la estufa. He llegado a la conclusión de que debía ser por inducción, osea, al pasar la corriente por el cable de la estufa haga crear un voltaje en el cable de datos al arduino. Es rarísimo, porque incluso si desenchufo los dos cables (rojo y azul) del contador de energía, me sigue detectando una gran cantidad de pulsos al encender o apagar la estufa, aunque no tenga ningún componente de ella conectado al arduino.... La verdad que esto empieza a ser desesperante... dejo unas imágenes por si alguien finalmente se le ocurre que estoy haciendo mal y por que no me mide... Muchas gracias a todos.
El código seguido es:
volatile int co = 0;
void setup() {
// put your setup code here, to run once:
pinMode (18, INPUT);
attachInterrupt (5, coE, RISING);
Serial.begin (9600);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.print ("Pulsos contados: ");
Serial.println (co);
delay(3000);
}
void coE (){
co = co + 1;
}
A ver mi amigo. Todo lo que has contado hasta ahora es un perfecto caos.. si me permites.
Lo que entiendo es que quieres contar pulsos.
Que la señal esta entre 17 y 28V.
Carmelo te dijo que usaras un optoacoplador, sabes porque? Pues porque vas a eleminar el ruido que puede entrar por el Arduino.
Asi que no me queda claro si lo has hecho y como lo has hecho.
Algo asi podria funcionar
Supongamos que el opto es un 4n25 que es facilmente conseguible.
Debe usar una R en el diodo de entrada de (17-3)V/40mA= aprox 330 ohms
En el lado transistor intenta como dice el esquema. Debería funcionar bien.
En estas condiciones una entrada 17 a 24V dará un HIGH en el pin del Arduino.
A tu lectura del pin deberias ponerle un delay que confirme que esta en HIGH como cuando se hace un sketch de pulsador con debounce.
algo de 10 a 20 mseg será suficiente.