Design and Metrological Characterization of an Open-Source, Low-Cost sEMG Data Acquisition Instrument for Neuromuscular Signal Monitoring

Published: 4 June 2026| Version 1 | DOI: 10.17632/8dv5nm5dtz.1
Contributor:
Fernando Moutinho Deyán

Description

This dataset provides the complete open-source design files and firmware required to replicate the ultra-low-cost (<€50) surface electromyography (sEMG) data acquisition instrument described in the study "Design and Metrological Characterization of an Open-Source, Low-Cost sEMG Data Acquisition Instrument for Neuromuscular Signal Monitoring". The instrument is based on a modular hardware-software stack utilizing an ESP8266 microcontroller, a 12-bit ADS1015 ADC, and a SEN0240 induction sensor. The provided files ensure full research transparency and technical reproducibility. Content of the repository: Hardware Schematics: Detailed electrical wiring and circuit diagrams in PDF format. Gerber Files: Production files for the custom PCB (IoT-ready version). Firmware: The MicroPython binary and source code for the ESP8266, optimized for stable 1000 SPS data acquisition via I2C (400 kHz). DSP & Processing Tools: Documentation of the 4th-order Butterworth and Notch filter parameters used to achieve a Signal-to-Noise Ratio (SNR) of 29.72 dB and 0.80 Pearson correlation with clinical standards. This project aims to democratize access to high-fidelity neuromuscular sensing for applications in assistive robotics, prosthetics, and human-computer interaction (HCI). This repository provides the software stack for a high-fidelity surface electromyography (sEMG) acquisition system designed for benchmarking low-cost hardware against clinical-grade standards. The system utilizes an ESP8266 microcontroller and an ADS1015 12-bit ADC (connected to SEN0240 sEMG vía I2C) to achieve a deterministic sampling rate of 1000 SPS, ensuring strict temporal and spectral alignment with reference databases such as NinaPro DB1. This method ensures a stable 1000 Hz sampling frequency by bypassing the Flash memory write latency of the ESP8266. The accompanying offline Python engine performs the complete digital signal processing pipeline, including 4th-order Butterworth band-pass filtering (20–450 Hz), 50 Hz digital notch filtering, full-wave rectification, linear envelope extraction via a 3 Hz leaky integrator, and polyphase resampling to 100 Hz. Hardware integration requires an ESP8266 clocked at 160 MHz connected to an ADS1015 via I2C on GPIO 0 (SCL) and GPIO 2 (SDA). The ADC address must be set to 0x48 by grounding the ADDR pin. The DFRobot SEN0240 sensor is connected to channels A0 and A1 in differential mode. Repository Structure: -Firmware: MicroPython code for the ESP8266 (acquisition program): EMG_ADS1015_1000SPS_80s_v4.py -High-speed binary acquisition script via i2c with ADS1015 -Processing: Python scripts for PC-based data analysis (to obtain statistics peak, MAV, RMS, WL and visualization): plotter_data(10Rx8seg)_binary_mv_stats_2.py -Pearson Correlation Analysis: -Pearson Correlation Analysis: Pearson_correlation_validator_with_OFFSET_SAMPLES.py -Classification: Implements a Random Forest Classifier sEMG_Gesture_Recognition.py -SNR Analysis: sEMG_SNR_calculator.py

Files

Steps to reproduce

The system utilizes an ESP8266 microcontroller and an ADS1015 12-bit ADC (connected to SEN0240 sEMG vía I2C) to achieve a deterministic sampling rate of 1000 SPS, ensuring strict temporal and spectral alignment with reference databases such as NinaPro DB1. The firmware is implemented in MicroPython and utilizes an optimized binary data-streaming protocol. This method ensures a stable 1000 Hz sampling frequency by bypassing the Flash memory write latency of the ESP8266. The accompanying offline Python engine performs the complete digital signal processing pipeline, including 4th-order Butterworth band-pass filtering (20–450 Hz), 50 Hz digital notch filtering, full-wave rectification, linear envelope extraction via a 3 Hz leaky integrator, and polyphase resampling to 100 Hz. Hardware integration requires an ESP8266 clocked at 160 MHz connected to an ADS1015 via I2C on GPIO 0 (SCL) and GPIO 2 (SDA). The ADC address must be set to 0x48 by grounding the ADDR pin. The DFRobot SEN0240 sensor is connected to channels A0 and A1 in differential mode. Experimental validation across multiple subjects demonstrated an average Signal-to-Noise Ratio (SNR) over 29 dB and Pearson correlation of 0.80 morphological correlation with clinical-grade signals. This project proves that clinical-level sEMG acquisition requirements can be met using accessible off-the-shelf components. Repository Structure: -Firmware: MicroPython code for the ESP8266 (acquisition program): EMG_ADS1015_1000SPS_80s_v4.py -High-speed binary acquisition script via i2c with ADS1015 -Processing: Python scripts for PC-based data analysis (to obtain statistics peak, MAV, RMS, WL and visualization): plotter_data(10Rx8seg)_binary_mv_stats_2.py -Pearson Correlation Analysis: -Pearson Correlation Analysis: Pearson_correlation_validator_with_OFFSET_SAMPLES.py -Classification: Implements a Random Forest Classifier sEMG_Gesture_Recognition.py -SNR Analysis: sEMG_SNR_calculator.py

Institutions

Categories

Biomechanical Engineering, Electrode for Electromyography, Biomedical Sensor

Licence