Welcome to PYDAQ documentation
Introduction
PYDAQ (Python Data Acquisition and Experimental Analysis) is a framework designed to support experimental data acquisition, real-time analysis, system identification, and control using Python. It provides an integrated environment for working with Arduino and National Instruments NIDAQ boards, supporting both graphical and command-line workflows.
Initially focused on basic data acquisition and signal generation for experiments such as step-response tests, PYDAQ has evolved into a broader experimental platform. Its development milestones are:
- Version v0.0.5 introduced real-time system identification, enabling the estimation of linear and nonlinear black-box models directly from experimental data.
- Version v0.0.6 expanded PYDAQ with real-time digital filtering (FIR and IIR) and classical control techniques, including PID control with Ziegler–Nichols tuning, supporting both simulation and live experiments.
PYDAQ can be used through a Graphical User Interface (GUI) for rapid experimentation or via a command-line interface for scripting, automation, and advanced workflows. These features make the framework suitable for research, teaching laboratories, and rapid prototyping involving empirical data.
Installation and Requirements
The fastest way to install PYDAQ is using pip:
PYDAQ requires:
- Driver of the board used (Arduino or National Instruments NIDAQ)
nidaqmx (>=0.6.5)for data acquisition from National Instruments boardsmatplotlib (>=3.5.3)for data visualizationnumpy (>=1.22.3)for numerical processingPySide6 (>=6.7.1),PySide6_Addons,PySide6_Essentials, andshiboken6for the graphical user interfacepyserial (>=3.5)for communication with Arduino boardssysidentpy (==0.3.4)andbitarray (>=3.0.0)for system identification and signal generationpackaging (>=24.1)scipy (>=1.16.1)for digital filters and PID control
Note: In version v0.0.6, NI-DAQmx drivers must be installed even if only Arduino boards are used. This limitation will be addressed in future releases.
Documentation Map
Data Acquisition
Examples showing how to acquire data using either the GUI or the command line with:
Sending Data
How to generate and send excitation or custom signals using:
Both GUI-based and command-line approaches are covered.
Step Response
Configuration and execution of step-response experiments with:
Get Model (System Identification)
Documentation on estimating mathematical models from experimental data using:
This includes real-time identification workflows introduced in v0.0.5.
PID Control
Guidelines for performing real-time or simulated PID control, including Ziegler–Nichols tuning, using:
Controller configuration and closed-loop experiments are supported through the GUI.
Digital Filters
Design and real-time application of FIR and IIR digital filters using:
Filter parameters such as cutoff frequency and order can be configured via the graphical interface, with support for simulation and live data processing. These features were introduced in v0.0.6.
Benchmarking
This section provides a benchmarking tool to estimate the maximum reliable sampling frequency supported by the user’s system. It helps identify practical limits for real-time or high-speed data acquisition without data loss.
Instructions on how to run and interpret the benchmark are available at: Benchmarking tool documentation
Examples
This section provides Jupyter Notebook examples demonstrating PYDAQ functionalities for both:
Screenshots
CITATION
This is the seminal publication of the PYDAQ project and must 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}
}
papers directory.