Skip to content

Home

PYDAQ

PYDAQ is a Python package for data acquisition, signal generation, system identification, digital filtering, and real-time control using Arduino and NI-DAQ devices.

It provides a unified graphical interface, command-line tools, and Jupyter notebook examples for laboratory experiments, rapid prototyping, teaching, and research workflows.


Capabilities

PYDAQ supports the following experimental workflows:

Capability Description
Data acquisition Acquire, plot, and save experimental data from Arduino or NI-DAQ boards
Signal generation Send user-defined input signals, including nonlinear excitation signals
Step-response experiments Run automatic step-response tests and save the resulting data
PRBS-based experiments Generate excitation signals for system identification workflows
System identification Estimate linear and nonlinear black-box models from experimental data using SysIdentPy
Digital filtering Apply FIR and IIR filters directly to acquired data in real time
PID control Run real-time or simulated P, PI, PD, and PID control with Ziegler-Nichols tuning
LQR control Simulate or implement Linear Quadratic Regulator control for state-space systems
Multi-channel workflows Work with multiple Arduino or NI-DAQ channels
Benchmarking Estimate the maximum reliable sampling frequency supported by the local system

Installation

Install PYDAQ with pip:

pip install pydaq

Hardware notes:

  • Arduino workflows do not require NI-DAQmx drivers.
  • NI-DAQ workflows require the NI-DAQmx drivers.

PYDAQ is tested up to Python 3.14. It may run on newer versions, but without guarantees.


Graphical user interface

All main workflows are available from a single graphical interface.

Launch the GUI with:

from pydaq.pydaq_global import PydaqGui

PydaqGui()

Documentation map

Data acquisition

Acquire, plot, and save experimental data using:

Signal generation

Generate and send user-defined excitation signals using:

Step-response experiments

Run automatic step-response experiments using:

System identification

Estimate mathematical models from experimental data using:

PID control

Run real-time or simulated PID control experiments using:

LQR control

Simulate or implement Linear Quadratic Regulator control for state-space systems using:

Digital filtering

Design and apply FIR and IIR digital filters in real time using:

Benchmarking

Estimate the maximum reliable sampling frequency supported by the local system:

Arduino firmware

PYDAQ uses a unified Arduino firmware based on a standardized CSV serial protocol for multi-channel acquisition, signal generation, system identification, filtering, and control workflows.

Error dictionary

The error dictionary helps diagnose common GUI messages, terminal outputs, communication issues, and configuration problems.

Jupyter notebook examples

Notebook examples are available for both Arduino and NI-DAQ workflows:


Screenshots

PYDAQ GUI preview


Citation

DOI

This is the seminal publication of the PYDAQ project and should be cited in any work that uses PYDAQ.

  • Martins, S. A. M. (2023). PYDAQ: Data Acquisition and Experimental Analysis with Python. Journal of Open Source Software, 8(92), 5662. https://doi.org/10.21105/joss.05662
@article{Martins_PYDAQ_Data_Acquisition_2023,
  author  = {Martins, Samir Angelo Milani},
  doi     = {10.21105/joss.05662},
  journal = {Journal of Open Source Software},
  month   = dec,
  number  = {92},
  pages   = {5662},
  title   = {{PYDAQ: Data Acquisition and Experimental Analysis with Python}},
  url     = {https://joss.theoj.org/papers/10.21105/joss.05662},
  volume  = {8},
  year    = {2023}
}

Additional related publications are available in the papers directory.