Respiratory and Pulse Oximetry Waveforms from Healthy Adults During Simulated Apnoea Events 1.0.0

File: <base>/Code/DataCollection_InlineSensor.m (3,119 bytes)
%% Data Collection for A1 PrototypeA
% Ella Guy 
% Last Updated: 10NOV2024

% Data from arduino serial to MATLAB
% Scales data into pressure [Pa]
% Saves outfile as a .mat file 

clear
clc
close all

%% Initialisation

% Trial Information =======================================================
timeLength = 10; % recording length of the trial
SamplingFrequency = 500; %[Hz]

% Inputs-------------------------------------------------------------------
PEEP = 0;  % PEEP [cmH2O]
C = 0;   % Compliance [L/cmH2O]
R = 0;     % Parabolic Resistance 
V = 0;    % Tidal Volume [mL]
%------------------------------------------\-------------------------------

%==========================================================================
% delete(instrfindall);
% 
% Arduino Communication Information =======================================
comPort = '/dev/cu.usbserial-1130';  % Check COM port "serialportlist()"
baudRate = 115200; % Match with arduino baudrate
%==========================================================================

%Predefining variables to be read from arduino ----------------------------
dataLength = SamplingFrequency*timeLength;

GaugeP_raw = []; %zeros(dataLength, 1);             
InhaleP_raw = []; %zeros(dataLength, 1);          

t = []; %zeros(dataLength, 1);  % Time using computer clock
%--------------------------------------------------------------------------

% Serial open
arduino = serialport(comPort, baudRate);

%% Read data from arduino to MATLAB arrays

% Open comms to arduino and initialise clock and index
t0 = clock;
i = 1;
StartTime = datetime;

% Collecting data for the defined time 
while etime(clock, t0) < timeLength
    y = fscanf(arduino, '%s');
    out = sscanf(y, '%f,%f');

    if length(out) == 2 
    t(i) = etime(clock, t0);      
    InhaleP_raw(i) = out(1);   
    GaugeP_raw(i) = out(2);
    i = i+1;  
    end 
end

% Close the connection with Arduino
clear arduino;

%% Data Unit Conversions

% Initising time array
time = t - t(1);

P_max = 1; % [psi]
P_min = -1; % [psi]

% Venturi Differential Pressures ------------------------------------------
GaugeP = GaugeP_raw; % [cmH2O]
InhaleDeltaP = InhaleP_raw; %[cmH2O] 
%--------------------------------------------------------------------------

%% Plots of collected data (with converted units)

figure(1) %----------------------------------------------------------------
subplot(3, 1, 1)
plot(time, GaugeP, '.')
grid on
grid minor
title("Gauge Pressure [cmH_2O]", 'Fontsize', 12)

subplot(3, 1, 2)
plot(time, InhaleDeltaP, '.')
grid on
grid minor
title("Differential Venturi Pressure (Inhalatory Direction)[cmH_2O]", 'Fontsize', 12)

%% Generates Outfiles 

% Files with unit conversions ---------------------------------------------
outfile_format = 'AireA1_PrototypeA_MechanicalLung_P%.1f_C%.2f_R%d_V%dml.mat';
outfile = sprintf(outfile_format, PEEP, C, R, V);

save(outfile, 'time', 'GaugeP', 'InhaleDeltaP', 'StartTime');

%--------------------------------------------------------------------------