Subscribe to Arduino Academy and start learning today for FREE!

Calculating Amp Hours and Watt Hours

In previous posts we have described how to make a volt/amp/watt meter to measure power consumption, or production (solar, wind, etc). I never fully explained the watt hour and amp hour calculation, so here is a sample sketch that assumes you are measuring voltage and current with the appropriate sensors.

I’m flushing the daily data every 24 hours, but keeping a running total. You could save this data to a sd card or publish it to a web server.

This is much easier to read on a LCD instead of the serial monitor.

Become the Maker you were born to be. Try Arduino Academy for FREE!


float volts = 120; // get value from voltage sensor
float amps = 100; // get value from current sensor
float watts = volts * amps;
float kwh;
unsigned long totalET;
float dailykwh;
float totalkwh;

void setup() {



void loop() {

uint32_t ts1 = millis();
delay(1000); //reports at 1 second intervals
uint32_t ts2 = millis();

// print the time interval in seconds
uint32_t ts3 = (ts2-ts1)/1000;
totalET = totalET + ts3;
Serial.print(“Seconds: “);

kwh = watts * ts3 / 3600000;
dailykwh = dailykwh + kwh;

Serial.print(“Volts: “);
Serial.println(volts, 4);
Serial.print(“Amps: “);
Serial.println(amps, 4);
Serial.print(“Watts: “);
Serial.println(watts, 4);

//Serial.print(“Current Ah: “);
// numbers so small it’s not relevant.
//Serial.println(kwh/volts, 4);
//Serial.print(“Current KWh: “);
// numbers so small it’s not relevant.
//Serial.println(kwh, 4);

Serial.print(“Daily Ah: “);
Serial.println(dailykwh/volts, 4);
Serial.print(“Daily KWh: “);
Serial.println(dailykwh, 4);
totalkwh = totalkwh + dailykwh;
Serial.print(“Total KWh: “); //from reboot
Serial.println(totalkwh, 4);

if (totalET >= 86400){ //restart every 24 hours
ts1 = 0;
ts2 = 0;
totalET = 0;
dailykwh = 0;

Become the Maker you were born to be. Try Arduino Academy for FREE!

Notify of
1 Comment
Inline Feedbacks
View all comments
Colin Anderson
Colin Anderson
2 years ago

Rather than using two fixed value resistors i opt for using a potentiometer and using its center as the reference. The advantage is i can tweak the levels


Would love your thoughts, please comment.x