Arduino-based Data Acquisition Device for Computer-controlled systems practices
Updated 21 Mar 2022

View License

Use the Arduino board as a single-shot data aqcuisition (DAQ) device for computer-controlled systems practices (Digital Control Theory). This package comes with four main m-file functions: daqduino_start, daqduino_end, daqduino_write, daqduino_read. As an example, consider the fragment of a code to implement a digital PID control loop:
for k=1:2, % Initial conditions
y(k)=0; u(k)=0; e(k)=0; % output, control, error
for k=3:nit, % nit=number of iterations
e(k)=yr(k)-y(k); %yr(k) is a reference sequence
daqduino_write(u(k),Ts); % Ts is the sampling time
A Simulink block is also available. However, it has not been tested very much. You may face some bugs.
An m-file example is given doing three practices: (1) Open-loop datalog; (2) Least-squares offline identification; (3) IMC Model-based Digital PID control tuned by the selection of the closed-loop time constant.
This package has been tested only with Arduino Uno R3 and Arduino Nano R3. The I/O pins in use are the Analog Input A0 and Pin 6 PWM. However, the Arduino code is very simple and you can modify it to your own needs. If you do so, please remember to reference/cite the author and research groups involved.
Laboratory of Control and Systems - LACOS, Federal University of Para, Brazil (ufpa.br)
Group of Control and Systems - GCS, State University of Santa Catarina, Brazil (udesc.br)
Author: Professor Antonio S. Silveira (lattes.cnpq.br/1828468407562753)

Cite As

Antonio Silveira (2024). DaqDuino (https://www.mathworks.com/matlabcentral/fileexchange/50784-daqduino), MATLAB Central File Exchange. Retrieved .

MATLAB Release Compatibility
Created with R2009b
Compatible with any release
Platform Compatibility
Windows macOS Linux
Find more on Data Acquisition Toolbox Supported Hardware in Help Center and MATLAB Answers

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!


Version Published Release Notes

The Arduino side program, DaqDuino_Arduino.ino, was causing an error when the daqduino_read.m function was called from MATLAB. The problem was solved in the Arduino side after changing the line Serial.print(y[0]) to Serial.println(y[0]).


Corrected daqduino_read function.


Added support for Python. The standard baud rate is now set to 115200 bits per second. Analog-to-Digital 5V saturation was removed from Matlab/Scilab/Python-side read functions.


Small corrections to make DaqDuino compatible with MATLAB R2018 and with SCILAB 6.0.2.

Updated help and functions for installation procedures in Linux systems.

- Added some lines into the Arduino side program in order to limit the I/O range between 0V to 5V, and a new program to set the PWM frequency to 2kHz;
- Added a comment within the install notes regarding reset avoidance during the serial connection.
Sampling time Ts within the daqduino_block.mdl is now working fine at 0.04 seconds.