Problemas al medir señales analógicas en el arduino. Existen mas alternativas?

Hola a todos,
Escribo para pedir vuestra ayuda para este proyecto en el cual trabajo.

Resulta que estoy haciendo un medidor de Energia para un generador Electrico. La página de openenergymonitor.org me ayudó muchisimo, sin embargo todavia tengo algunos inconvenientes.

El problema es que, pése a que el Factor de Potencia esta bien, no puedo determinar la corriente y el voltaje por separado. En el esquematico verán que hay 2 puntas de prueba que se llaman "Corriente" y "Voltaje" respectivamente, que están conectadas a las entradas de lectura de PWM del arduino (Pin 2, 3).

He tratado de medir la señal en A0 y A1 del arduino, ademas he medido la cantidad de pulsos a la salida despues del OPAMP (cruce por cero), el codigo de smoothing proporcionado para hacer muchas mediciones, contador de PWM, pero en todoso los casos el contador se pone como loco y no encuentro un valor algo estable. :confused: :confused:
Sé que tengo que hacer una formula correspondiente mis valores que me permita calcular la corriente, sin embargo, si estos "valores" no se mantienen estables, como hago entonces para calcular corriente y voltaje?

Estas dos señales: Corriente es una señal de muy baja amplitud (<1V AC) y además con freq= 60Hz proveniente del sensor SCT-013-060 (así que está simulada con un alternador a 500mV, osea que básicamente mediría 30A).
Para el Voltaje utilizo el sensor ZMPT 101B y obtengo una salida de aprox 4.5 VAC para 170VAC de la Red Electrica.

Por otro lado, he probado tratar de estabilizar las señales antes de pasar por la compuerta XOR con capacitores (330uF), pero dañan la onda cuadrada que determina el F.Potecia al final de la compuerta lógica.

Por favor, necesito ayuda! :frowning: Gracias de antemano por sus aportes y comentarios.

PD: Adjunto Esquemático.

Este es mi código:

/*Power Factor calculator
 * Prog  mod by JCS Oct 25th, 2017 */

float x,y,z;
float current,voltage;
#define echoPin 7 // Digital Signal coming from XOR.
#define Corriente 2
#define Voltaje   3

#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

void setup()
{ 
  pinMode(echoPin, INPUT);
  pinMode(Corriente, INPUT);
  pinMode(Voltaje, INPUT);
  lcd.begin(16, 2);// set up the LCD's number of columns and rows:
  lcd.setCursor(0,0);
  lcd.print(" Welcome to the");
  lcd.setCursor(0,1);
  lcd.print("Energy Monitor");
  delay(800);
  lcd.clear();
  
}

void loop()
{
  
  x = pulseIn(echoPin,HIGH); //reads  duartion pulse in Microseconds
  y = (2 * PI * x/16667); //Angulo en radianes
  z = cos(y);

//Lectura pulsos para corriente y voltaje
 current= pulseIn(Corriente,HIGH);
 voltage= pulseIn(Voltaje, HIGH);
  
  if (x>500)
  {
 
  //Printing Values of Power Factor
  lcd.setCursor(0,1);
  lcd.print("PF=");
  lcd.print(z);
  delay(10);
  
  //Printing Current Values
  lcd.setCursor(0,0);
  lcd.print("I=");
  lcd.setCursor(3,0);
  lcd.print(current);

// Printing Voltage Values
  lcd.setCursor(9,0);
  lcd.print("V=");
  lcd.setCursor(11,0);
  lcd.print(voltage);
  delay(1000);

  }

}

Esperaba que siguieras mis instrucciones para editar el post pero tuve que hacerlo para poder responder.

Lo primero es que nos pongamos de acuerdo con los sensores y lo que estas simulando.

El sensor de corriente SCT-013-060 se corresponde a tu simulacion indicada como Voltage Sensor. Lo explicas bien pero en la simulación esta mal seÑalizado.

Ya que se trata de un transformador de corriente con una R para envitar tensionies elevadas en el secundario por estar justamente cargado con una Resisentecia.

Por otro lado el sensor de Tension o Voltage ZMPT 101B si entrega 2.5V en torno a su AC.

Yo no usaría PULSEIN para la tarea.
Usaría dos interrupciones. Una conectada a pin 2 y otra a pin 3.

Con eso leo las 3 cosas. Período de tension y corriente y además el desfasaje en tiempo que te dará el factor de potencia.
Cada Comparador o Schmitt Trigger iría a una interrupcion.