Arduino B.Tech/Diploma Beginner

Build a DC Energy Meter using Arduino – 32V/5A

Build a DC Energy Meter using Power Meter Module & Arduino to display voltage, current, power, energy on LCD via I2C or Modbus RTU C++ Code

  • Suitable forB.Tech/Diploma Arduino students
  • Build time1-2 weeks
  • LevelBeginner
  • Available atAjvika Labs, Kakinada

About this project

Overview
In this project, we will build a
DC Energy Meter using Arduino
that can measure
voltage, current, power, and energy consumption
I recently came across a neat custom-made DC energy meter module from
Mutex Embedded
. This small but powerful board can measure DC parameters such as voltage (
0–32 V range
), current (
up to 5 A
), power, and cumulative energy consumption. It communicates easily over the
I²C protocol
, making it ideal for direct use with Arduino.
For this guide, I’ll show you how to connect the module to an
Arduino
and display the live energy meter data on a
16×2 I²C LCD display
. The LCD cycles through values of voltage, current, power, and energy, so you can view the parameters in real time without needing a computer.
If you want to take it further, the same module also includes an
ESP32 chip
option for IoT applications, where the readings can be uploaded to a web server for remote monitoring. But in this guide, we’ll focus only on the
Arduino + LCD
setup. This project is a simple yet very practical way to track
DC energy usage
for your electronics, battery projects, or renewable energy experiments. You may use the same DC power module to make an
IoT DC Energy meter with ESP32
and view the live data on Webserver.
Bill of Materials
We need following components to build this Arduino DC Energy Meter project.
S.N.
Components Name
Quantity
Purchase Link

Arduino Nano Board

Amazon
AliExpress

DC Power Monitor Module

Mutex-Embedded

16x2 LCD Display

Amazon
AliExpress

Connecting Wires

Amazon
AliExpress

Breadboard

Amazon
AliExpress
DC Power Monitor Module
The
DC Power Monitoring Module
is a feature-rich solution for tracking voltage, current, power, and energy consumption across four independent channels. At its core is the
ESP32-S2 microcontroller
, ensuring high performance and IoT readiness. Current measurement is handled through precision
high-wattage shunt resistors
, while an onboard
SD card slot
enables real-time data logging. A
CR1220 coin cell holder
powers the real-time clock, allowing accurate time-stamping of measurements even when the main supply is off.
On the hardware side, the board includes a tiny rear connector that works with a dedicated
power extension board
, which provides a USB-to-serial interface, micro-USB port, and reset switch. With support for up to
32 V input voltage
and
5 A current per channel
, the module is well-suited for monitoring small to medium DC appliances or battery systems.
The module supports both
I²C
and
Modbus RTU (UART/RS485)
interfaces, making it compatible with a wide range of microcontrollers, including Arduino and ESP32. Data can also be logged to the SD card for up to a year, with weekly historical summaries available for long-term analysis. To simplify user experience, a
free PC application
is provided for configuration, live monitoring, and firmware updates.
Features & Specifications
Voltage range: 0 – 32V
Current range 0 – 5A
4 – Channels with common GND
Serial Interface: I2C + UART Modbus
RS-485 Bus extension
Real-Time Clock
Micro SD Card Data Logging
PC Application
Built for Industrial use
Useful Links
DC Power Monitor Module
DC Power Monitor Extension
Datasheet/User Manual
PC Application Software
Interfacing the DC Energy Meter with Arduino
The
DC Power Monitor Module
supports both
I²C
and
Modbus RTU
communication protocols. In this project, we will be using the
I²C interface
to connect the module with an Arduino and build our own DC Energy Meter.
Hardware & Circuit
The wiring is very straightforward. Connect the
VCC
pin of the Power Monitor Module to the
3.3V
pin on the Arduino, and connect the
GND
pin to the Arduino
GND
. Then, link the communication lines by connecting the module’s
SDA
pin to the Arduino’s
A4
pin and the
SCL
pin to the Arduino’s
A5
pin.
Fig: Interfacing the DC Energy Meter with Arduino
With just these four simple connections, the Arduino will be able to read voltage, current, power, and energy data directly from the module over the I²C bus.
Power Supply & Load Connection
To begin, we need to connect a
DC supply
and a
load
to the Power Monitor Module. The board provides four input/output channels labeled
IN1–IN4
and
OUT1–OUT4
. In this example, we will be using
Channel 1
Connect the Supply
Take any DC supply, such as a battery or a regulated DC adapter. Connect the
positive terminal
of the supply to the
IN1
terminal. The
negative (ground)
terminal of the supply should be connected to the
GND line
provided on the module.
Connect the Load
For the load connection, wire the
positive terminal
of your load (e.g., a DC motor, lamp, or electronic circuit) to the
OUT1
terminal. The
negative terminal
of the load should also be connected to the
common GND
of the module.
That’s all that is needed—the module will now measure the supply voltage, the current flowing through the load, and automatically calculate power and energy consumption for
Channel 1
I2C Library (MbI2C_ArduinoPort.h)
The developer of this product has already created a library for the DC Power Monitor Module. Although it was originally written for another microcontroller, I have adapted the same library and used it in this Arduino project to read data via the I²C interface.
Create a folder anywhere in your computer and name it as “
mb_energy_meter
“. Inside the folder create a text file and save it as “
MbI2C_ArduinoPort.h
“. Copy the following library code and paste it in the .h file and save it.

#include <Arduino.h>
#include <Wire.h>
#include <stdint.h>
#include <string.h>
// -------- Original mb_i2c.h content (with include-guard adapted) --------
typedef
bool
(
*
I2cWriteCallback_t
)
(
uint8_t
slaveAddrs
uint8_t*
pDataWr
uint8_t
size
)
;
typedef
bool
(
*
I2cReadCallback_t
)
(
uint8_t
slaveAddrs
uint8_t*
pDataRd
uint8_t
size
)
;
typedef
uint32_t
(
*
GetMillisCallback_t
)
(
void
)
;
typedef
void
(
*
DelayCallback_t
)
(
uint32_t
msDelay
)
;
typedef
struct
{
uint8_t
i2cAddress
;
I2cWriteCallback_t
cbWrite
;
I2cReadCallback_t
cbRead
;
GetMillisCallback_t
cbGetMillis
;
DelayCallback_t
cbDelay
;
}
MbI2c_Init_t
;
typedef
struct
{
MbI2c_Init_t
init
;
bool
isInitialized
;
}
MbI2c_Handle_t
;
typedef
enum
{
MbI2c_RegType_Holding
MbI2c_RegType_In

Technologies used

ESP32ArduinoBLELCDI2CUARTADC

Hardware components

  • ESP32
  • Arduino
  • SD Card

Software & tools

  • Arduino IDE

What you get

  • Working project / hardware kit, tested before delivery
  • Complete source code with explanation
  • Project demo and guidance for your viva
  • Project report, PPT and IEEE paper support (on request)
Delivery & Payment
Delivery takes a minimum of two weeks from the date your inquiry is confirmed. Payment is in two parts: • 50% advance to start the project • Remaining 50% before delivery Note: • Documentation and PPT are not included by default • If you need documentation/PPT, it can be arranged for extra time and cost We'll confirm the exact timeline and cost with you after reviewing your requirements.