Standard Luer-lock plastic syringe (rubber seal, less leaks)
High-precision linear actuator to drive the syringe piston
Pressure sensor with digital low-pass filter applied
Highly adjustable target pressure waveform
(Min & Max Pressure, Attack, Sustain, Decay, Rest times)
Physical user interface for adjusting ASDR parameters
Custom Printed Circuit Board (PCB)
Wireless control through custom Wi-Fi network and web application
Live pressure data, waveform parameters adjustments, and data recording features available through web application and provided Python script
Device calibration status and error codes visible through status LED's and web-app
Live graph of pressure data updating in real time
Indicator of device status
Adjustable waveform parameters (Min & Max Pressure, Attack, Sustain, Decay, Rest)
Values adjustable through text box and/or increment/decrement buttons
Buttons to start calibration and pause device activity (standby mode)
Button to start recording data and export to .csv file (requires running python script)
12V input from wall outlet
DC-DC converters to send 5V and 3V to ESP32 and hardware
GPIO pins for LCD, Rotary encoder, Servo Motor, Pressure sensor, Status LED
Serial communication between ESP's
Constantly running eight multithreaded tasks across two cores of an ESP using Free-RTOS:
Talk2Web: Serial communication between the GPIO and Web ESP for user input and exporting device status and data
Prioritizes waveform parameters sent from Web-app
Physical UI: Update the waveform parameters and display feed based on following user actions from rotary encoder
Rotate: Change which waveform parameter to display
Rotate + Hold: Edit currently displayed parameter (release to save)
Wave generator: Periodically updates the generated target waveform based on user-defined parameters, calibration data, and pressure feedback
Rejects unsafe settings (e.g. ASDR values less than 100 ms)
Sensor Feed: constantly read raw pressure and apply a first-order digital low-pass filter
Motor Control: Sends target position and speed to servo motor during automatic mode, which has inner control loop to achieve target.
Calibration: Runs through set protocol with user to map the pressure and corresponding displacements for current session's pressure range.
LCD Update: Reflect waveform parameters, pressure data, motor position on screen
Loop: A loop running for debugging on the fly through USB serial to:
Toggle debug statements for calibration, talk2web, wave generation tasks
Manually input calibration states, and target pressure range
The final design solution was verified using a 14 hour unsupervised test at under the following user parameters:
Min and max pressure: [20.0, 40.0] cm H2O
ASDR: [500, 1200, 500, 1200] milliseconds
The pressure output stayed within +/- 1 cm H2O (0.014 psi) at the peak pressure of the defined max pressure throughout the test duration, and excellent consistency in frequency.
The user is able to adjust the min and max pressure within the calibration range, and easily adjust the ASDR timings within the limitations of the servo's 50% duty cycle.