An open-source, low-cost, modular platform for high-resolution energy monitoring of manufacturing equipment. AEMS acquires three-phase voltage and current through a front end and a 24-bit, simultaneously sampling ADC, managed by a dual-core architecture that separates deterministic acquisition and on-board logging from host communication and control. A host, edge-gateway, and optional cloud software stack enable autonomous, long-duration acquisition independent of a continuously connected host, combining research-grade fidelity with industrial deployability for Industry 4.0 environments.
This repository accompanies the paper (preprint):
An Open-Source, Autonomous Platform for High-Resolution Energy Monitoring in Manufacturing Vignesh Selvaraj, Aditya Nagaraj, Shengyuan Zhang, Sina Sadeghian, Sangkee Min
If you use this hardware, firmware, or software in your work, please see
Citation and CITATION.cff.
Long-term, robust monitoring of machine energy consumption is difficult: commercial power meters capable of capturing transient events are expensive, closed, and impractical to deploy across an entire facility. AEMS was designed to make high-fidelity energy monitoring affordable, customizable, and reproducible, so that small and medium-sized manufacturers can instrument their equipment and improve data availability for Industry 4.0 analytics.
Design goals:
- High-rate, simultaneous multi-channel acquisition of voltage and current signals.
- Autonomous operation — capture and log on the board even when a host or network is unavailable, then stream or transfer data later.
- Modular and open — hardware, firmware, and host software are all open and independently reusable.
- Deployable at scale — many boards can share a network and be controlled from a single host or from an edge computer such as Raspberry Pi.
AEMS is organized into three layers, each of which lives in this repository:
| Layer | Location | Role |
|---|---|---|
| Hardware | hardware/ |
Custom AEMS v2 DAQ board — KiCad design, ADS131M08 analog front end, surge protection, impedance-controlled PCB. |
| Firmware | firmware/ |
STM32H745 dual-core firmware. CM4 owns deterministic acquisition + eMMC storage; CM7 owns Ethernet/TCP + host command/control over OpenAMP. |
| Host software | firmware/BoardInterfaceLibrary/ |
Python board_interface library, examples, Raspberry Pi daemon (aemsctl), and an optional AWS IoT cloud agent. |
Machine mains ──▶ AEMS board (ADS131M08 front end)
│
STM32H745
┌─────────┴─────────┐
CM4 (DAQ + eMMC) CM7 (Ethernet/TCP)
│
Host (PC / Raspberry Pi)
board_interface · aemsctl daemon
Data flows from the analog front end through the ADS131M08 acquisition path on CM4, is logged to on-board eMMC and/or streamed over TCP to a host, and can optionally be forwarded to the cloud for remote monitoring and transfer.
aems/
├── hardware/ KiCad project for the AEMS v2 board
│ ├── *.kicad_sch / *.kicad_pcb Schematics and PCB layout
│ ├── CustomLibs/ Project symbol/footprint libraries
│ ├── LTSpiceSimulation/ Analog front-end simulations (CT op-amp, etc.)
│ ├── DesignSummary/ Stackup, impedance control, interactive BOM (ibom.html)
│ ├── Manufacturing/ PCBWay fabrication outputs
│ └── FutureUpdates/ Planned revisions (e.g. front-end isolation)
│
└── firmware/ STM32H745 dual-core firmware + host tooling
├── CM4/ Cortex-M4: DAQ, ADS131M08, eMMC/FatFs, OpenAMP
├── CM7/ Cortex-M7: Ethernet/TCP, FreeRTOS, OpenAMP master
├── Common/ Shared cross-core headers/data structures
├── BoardInterfaceLibrary/ Python host library, CLI, Raspberry Pi daemon, cloud agent
├── docs/Software/ Firmware architecture documentation
└── UnitTests/ Bench connectivity/test scripts
Detailed documentation already lives with each subtree:
- Firmware architecture —
firmware/README.mdandfirmware/docs/Software/README.md - Host Python library —
firmware/BoardInterfaceLibrary/README.md - Raspberry Pi server & cloud —
firmware/BoardInterfaceLibrary/docs/raspberry_pi_server.md,firmware/BoardInterfaceLibrary/docs/cloud_autonomy.md - Hardware —
hardware/README.md
The AEMS v2 board is built around:
- ADS131M08 8-channel, 24-bit simultaneous-sampling delta-sigma ADC as the analog front end.
- STM32H745 dual-core (Cortex-M7 + Cortex-M4) microcontroller.
- Isolated power rails and impedance-controlled routing for Ethernet and USB.
- MOV-based surge protection on the measurement inputs.
- On-board eMMC storage for logging, plus Ethernet connectivity.
The current firmware and host workflows target a 6-channel acquisition mask (0x3F) — three voltage and three current channels. See hardware/README.md for the board description, bill of materials, and manufacturing notes.
Note on voltage range: the present hardware is validated for direct measurement at the board's rated input topology. Higher line-to-line service voltages (e.g. 480 V L-L) require updating the MOV-based surge protector or an external potential transformer, consistent with the modular design; see
hardware/FutureUpdates/.
The fastest path depends on what you want to do.
Bring up a board and capture data
- Read the system split in
firmware/docs/Software/README.md. - Build and flash the CM4/CM7 firmware from STM32CubeIDE (
firmware/). - Confirm connectivity with
firmware/UnitTests/tcptest.pyor the Python examples. - Use the
board_interfacelibrary for repeatable host-side control, logging, and streaming.
Reproduce or modify the hardware
- Open the KiCad project in
hardware/. - Review the interactive BOM at
hardware/DesignSummary/ibom.htmland the stackup/impedance summaries. - Use the
hardware/Manufacturing/outputs for fabrication.
Deploy a permanent Raspberry Pi server
See firmware/BoardInterfaceLibrary/docs/raspberry_pi_server.md
for the aems-boardd systemd daemon and aemsctl control command, and
cloud_autonomy.md for optional AWS
IoT integration.
hardware/ and firmware/ are maintained as independent projects and integrated here via
git subtree. Each retains its own commit history and can be developed in isolation.
If you use AEMS in academic work, please cite the paper and (optionally) the archived software
release. Machine-readable metadata is in CITATION.cff.
@misc{selvaraj_aems_2026,
title = {An Open-Source, Autonomous Platform for High-Resolution Energy
Monitoring in Manufacturing},
author = {Selvaraj, Vignesh and Nagaraj, Aditya and Zhang, Shengyuan and
Sadeghian, Sina and Min, Sangkee},
year = {2026},
note = {Preprint. Department of Mechanical Engineering,
University of Wisconsin-Madison}
% arXiv id / journal / doi to be added
}The software itself is archived on Zenodo. Please cite the concept DOI (resolves to the latest release):
@software{selvaraj_aems_software,
author = {Selvaraj, Vignesh and Nagaraj, Aditya and Zhang, Shengyuan and
Sadeghian, Sina and Min, Sangkee},
title = {AEMS: Autonomous Energy Monitoring System},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.21383443},
url = {https://github.com/vigneshuw/aems}
}The version validated in the paper is v1.0.2 (DOI: 10.5281/zenodo.21383444).
AEMS is released as open hardware and open-source software under a per-material split (full
texts in LICENSES/, following the REUSE convention):
| Material | License | Applies to |
|---|---|---|
| Hardware design files | CERN-OHL-P-2.0 |
hardware/ — schematics, PCB, libraries, BOM, fabrication outputs |
| Firmware & host software | MIT |
original code in firmware/ and the Python BoardInterfaceLibrary |
| Documentation & figures | CC-BY-4.0 |
READMEs, docs/, design summaries |
SPDX expression for the repository: CERN-OHL-P-2.0 AND MIT AND CC-BY-4.0. Vendor and
third-party components (ST HAL/CMSIS, FreeRTOS, OpenAMP, FatFs, BlueNRG-2, downloaded KiCad
libraries) retain their own licenses. See LICENSE for the full overview.
Vignesh Selvaraj — vselvaraj@wisc.edu, vignesh-selvaraj@outlook.com