## Interrupt based Pulse Counter

Arduino sketch example for interrupt based pulse counting:

```//Number of pulses, used to measure energy.
long pulseCount = 0;   //Used to measure power.unsigned long pulseTime,lastTime;//power and energydouble power, elapsedkWh;//Number of pulses per wh - found or set on the meter.int ppwh = 1; //1000 pulses/kwh = 1 pulse per whvoid setup(){  Serial.begin(115200);// KWH interrupt attached to IRQ 1  = pin3  attachInterrupt(1, onPulse, FALLING);}void loop(){}// The interrupt routinevoid onPulse(){//used to measure time between pulses.  lastTime = pulseTime;  pulseTime = micros();//pulseCounter  pulseCount++;//Calculate power  power = (3600000000.0 / (pulseTime - lastTime))/ppwh;    //Find kwh elapsed  elapsedkWh = (1.0*pulseCount/(ppwh*1000)); //multiply by 1000 to pulses per wh to kwh convert wh to kwh//Print the values.  Serial.print(power,4);  Serial.print(" ");  Serial.println(elapsedkWh,3);}```

## Accuracy

Range of 0 to 25kW (typical range for solid state pulse output meters):

1000 pulses per kWh

 Pulse Gen (kW) Pulse Counter (kW) Error (W) % Error Std. Deviation 0.101 0.101 0.00 0.00% 0 2.56 2.5599 0.10 0.00% 0.00017 3.15 3.1496 0.40 0.00% 0.00049 6.89 6.888 2.00 0.00% 0.001 9.56 9.556 4.00 0.00% 0.0019 10.63 10.625 5.00 0.00% 0.0024 19.62 19.6 20.00 0.00% 0.008 22.56 22.535 25.00 0.00% 0.0111 24.98 24.95 30.00 0.00% 0.0126

## Notes

If the Serial monitor lists values really fast and at way too high power values try inserting a pull down to ground resistor of around 10k on the digital input

### Re: Interrupt based Pulse Counter

I think the column headings above need adjusting, I was more than a bit confused when I read it the first time... :)