Example for Lib Pulses. Measurement of power and energy with a energy meter which has a S0 interface

Dependencies:   Pulses mbed

Measurement of low frequencys based on timing between pulses. Example for using a energy meter with S0 interface.

Files at this revision

API Documentation at this revision

Comitter:
jocis
Date:
Thu Nov 08 07:25:51 2012 +0000
Parent:
0:010c6e517e18
Child:
2:4805e84fa084
Commit message:
first commit

Changed in this revision

Pulses.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Pulses.lib	Wed Nov 07 18:48:55 2012 +0000
+++ b/Pulses.lib	Thu Nov 08 07:25:51 2012 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/jocis/code/Pulses/#ef402fb370c5
+http://mbed.org/users/jocis/code/Pulses/#6eb686d7d16a
--- a/main.cpp	Wed Nov 07 18:48:55 2012 +0000
+++ b/main.cpp	Thu Nov 08 07:25:51 2012 +0000
@@ -1,22 +1,33 @@
 #include "mbed.h"
 #include "Pulses.h"
 
-//DigitalOut myled(LED1);
+Serial pc(USBTX, USBRX); // tx, rx
+
+// Example for energy meter with SO interface
+// SO output of energy meter is connected (over opto-coppler) to pin 8
+
+#define SO_PULSES 2000 // SO interface of energy meter with 2000 pulses per kWh
 Pulses pulses(p8, Pulses::FALL);
-Serial pc(USBTX, USBRX); // tx, rx
 
 int main() {
-    // choose on of the following unit scales
-    pulses.setFactor(1.0f);   // Hz
-    pulses.setFactor(60.0f);   // rpm
-    pulses.setFactor(3600.0f/2000.0f);   // kWh; energy meter with SO interface - 2000 pulses per kWh
+    pulses.setFactor(3600.0f/SO_PULSES);   // Scale to kW; kWh
+
+    float averagePower = 0;    // Average energy since last call of get()
+    float minPower = 0;        // Min. energy since last call of get()
+    float maxPower = 0;        // Max. energy since last call of get()
+    float sumEnergy = 0;       // Sum of energy over all since start of mbed
     
     while(1) {
-        pc.printf ( "Pulses: counter=%d act=%.3f average=%.3f\r\n", 
-            pulses.getCounter(), 
-            pulses.getAct(), 
-            pulses.getAverage() );
+        
+        pulses.get ( &averagePower, &minPower, &maxPower, &sumEnergy );
         
-        wait(3.14);
+        pc.printf ( "Power: %d (%.3f...%.3f) [kW]   Energy: %.3f [kWh]   SO-pulses=%d\r\n", 
+            averagePower, 
+            minPower, 
+            maxPower, 
+            sumEnergy,
+            pulses.getCounter() );
+        
+        wait(6);   // Example 6 seconds; typical 1 minute (60 sec)
     }
 }