Project tutorial # 5vCircuitPowerMeter © GPL3+

Make a power meter for 5v circuits using material from the Arduino Starter Kit

• 1,793 views
• 2 comments
• 6 respects

## About this project

### Overview

Have you ever needed a power meter for your Arduino or your Raspberry Pi? Here is a tutorial on making a multi function power meter for 5v circuits--using material found in the Arduino Starter Kit!

### Making the Power Meter

Gather the materials listed in the Components and Supplies section and assemble them together as shown in the "Main Project" picture in the Schematics section. If the "Main Project" picture is not clear in showing how to connect a LCD, use the LCD Setup picture to help.

### What the Setup is Supposed To Do

The LCD is used to project the calculated data.  The potentiometer is used as a knob to change between the five modes: Off, 5v Volt Meter, Analog Read/Write values,  Resistor calculator, and Conductivity. The three wires at the bottom are used as input, output, and GND wires.

### The Code Explained

Mode two is a 5v Volt Meter; using analog input you can calculate the voltage of the input.

``````float vv = analogRead(in) * (5.0 / 1023.0);
``````

Mode three is the Analog Read/Write values; by read the analog pin, you can calculate the power output in analog(Read) value (0-1023) or analogWrite value (0-255).

``````int aR = analogRead(in);// 0-1023
int aW = map(aR, 0, 1023, 0, 255);// 0-255
``````

Mode four is a resistor calculator that outputs in ohms; you can calculate the resistor using Ohms Law, Resistor = Volts / Current: Volts is the inputted voltage, and current is 20mA (because the Arduino's output current is about 20mA).

``````float vv = analogRead(in) * (5.0 / 1023.0);
float rr = vv / 20.0; // volt / current = resistor
``````

Mode five is a simple conductivity checker; anything bellow 5v would be counted as disconnect.

``````if(digitalRead(in) == HIGH)
lcd.print("Connect");
else
lcd.print("Disconnect");
``````

### Last Notes

This project can only be used on equipment that handles 5v. If not, the equipment could be burned and may not be usable after.

If the input/output wires aren't connected to anything, the wires would be calculating whatever is in the air so don't be surprised if random numbers are flashing on the LCD when the wires are not connected to anything.

Please leave comments and feedback about this tutorial,

Thank you!!

## Code

##### PowerMeterArduino
Main code
```#include <LiquidCrystal.h>

//Include^
//Init
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//Global Var
int pot = 0;
int index = 0;

const int out = A1;
const int in = A2;
const int mm = A0;
const int li = 6;
void setup() {//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lcd.begin(16, 2);
// put your setup code here, to run once:
pinMode(li, OUTPUT);
pinMode(out, OUTPUT);
pinMode(in, INPUT);
pinMode(mm, INPUT);
pinMode(8, OUTPUT);
off(8);
on(li);
lcd.print("   PowerMeter");
delay(1000);
lcd.clear();

}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

void loop() {//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// put your main code here, to run repeatedly:
pot = analogRead(mm);
index = map(pot, 0, 1023, 1, 5);

if (index == 1) {
off(li);
on(8);
}
if (index == 2) {
lcd.clear();
on(li);
off(8);
lcd.print(" DC Volt Meter");
while (true) {
float vv = analogRead(in) * (5.0 / 1023.0);
lcd.setCursor(0, 1);
lcd.print(vv);

pot = analogRead(mm);
index = map(pot, 0, 1023, 1, 5);
if (index != 2)
break;
}
}
if (index == 3) {
lcd.clear();
on(li);
off(8);
lcd.print(" Analog R/W Val");
while (true) {
int aR = analogRead(in);
int aW = map(aR, 0, 1023, 0, 255);
lcd.setCursor(0, 1);
lcd.print("R:" + String(aR) + "     W:" + String(aW)+"    ");

pot = analogRead(mm);
index = map(pot, 0, 1023, 1, 5);
if (index != 3)
break;
}
}
if (index == 4) {
lcd.clear();
on(li);
off(8);
lcd.print("      Ohms");
while (true) {
float vv = analogRead(in) * (5.0 / 1023.0);
float rr = vv / 20.0;
lcd.setCursor(0, 1);
lcd.print(rr);

pot = analogRead(mm);
index = map(pot, 0, 1023, 1, 5);
if (index != 4)
break;
}
}
if (index == 5) {
lcd.clear();
on(li);
off(8);
lcd.print("  Conductivity");
while (true) {
on(out);
lcd.setCursor(0, 1);
if (digitalRead(in) == HIGH)
lcd.print("Connect         ");
else
lcd.print("Disconnect      ");

pot = analogRead(mm);
index = map(pot, 0, 1023, 1, 5);
if (index != 5)
break;
}
}
}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//Functions
//New~~~~~~~~~~~~~~~~

//Back~~~~~~~~~~~~~~~~~~
void on(int pin) {
digitalWrite(pin, HIGH);
}
void off(int pin) {
digitalWrite(pin, LOW);
}
```

## Schematics Breadboard View How to setup a 16x2 LCD ## Comments

January 10, 2016

#### Members who respect this project

See similar projects
you might like

#### The Magnetic Field and RGB Tester

Project tutorial by Kutluhan Aktar

• 3,530 views
• 0 comments
• 14 respects

by MicroBob

• 30,818 views
• 41 comments
• 101 respects

#### GPS Datalogger, Spatial Analysis, and Azure IoT Hub.

Project tutorial by Shawn Cruise

• 16,947 views
• 4 comments
• 61 respects

#### Temperature sensor

Project tutorial by Grant

• 12,305 views
• 6 comments
• 30 respects

#### Display Current Weather with Arduino and Python!

Project tutorial by Arduino “having11” Guy

• 6,710 views
• 3 comments
• 19 respects

#### Arduino Kitchen Timer

Project tutorial by Team I and myself

• 54,471 views
• 37 comments
• 77 respects