The goal of this project is to create a mean arterial blood pressure monitoring device than can automatically control cuff pressure and determine the blood pressure without requiring any additional user input. The method we decided to utilize in this setup is one where a motor inflates the cuff to a given threshold pressure (controlled by Arduino), and then the pressure is continually released rather than the more traditional method of releasing air in pulses. This method allows us to collect the data all in one shot, decreasing possibility for errors.
We then have MATLAB filter and display the data obtained, producing a mean arterial blood pressure in mmHg.
This technique is possible due to the ability of our pressure transducer to detect the changes in pressure in the cuff caused by the pulsing of blood in the artery of measurement. The particular mean arterial pressure is obtained at the point where the blood is able to flow again during the deflation of the cuff, which is recorded as the largest jump in data as observed by MATLAB.
Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.
Step 1: Materials and Specifications
- 1 Arduino Uno
- 1 Pressure Transducer (Honeywell 015PDAA5)
- 1 Motor-Koge Mini Pump (KPM14A)
- 1 Valve-Electrostem II Air Valve
- 1 H Bridge (SN754410NE)
- 1 Blood Pressure Cuff
- Plastic Tubing for sensors, motors, and cuff
- Tubing Splitter
All components used can be purchased from major electronic retailers, as well as Ebay and other sources.
The pressure transducer used is a differential pressure sensor, though we leave the second port untouched, meaning it is effectively used as a gauge pressure sensor where the given pressure is compared to atmospheric pressure.
The datasheets provided in the links will be useful for checking recommended voltages, currents, and pin connections.
Step 2: Implementation Summary
The general theory behind our setup, as stated prior, was to be as self-contained as possible, but still completely functional. Shown above is a simplified block diagram of our entire setup.
The red lines indicate transference of power. Green represents valve control and orange represents motor control. Finally, the black lines indicate the flow of data in the direction indicated.
The H Bridge, Arduino, and MATLAB implementations will be explained in detail in the following steps.
Step 3: H Bridge Implementation
The H Bridge used for this project was the SN754410NE, which allows for control of two separate devices individually. In our setup, both the valve and motor were controlled in this fashion. The H Bridge itself as well as the components connected to it were both powered by the 5 volts output from the Arduino. The H Bridge ground and negative motor control and valve control terminals were connected to the Arduino ground terminal as well. The positive motor control and valve control terminals were connected to separate Arduino digital out ports, so that the Arduino could control when the devices were activated or not. Finally, the motor and valve themselves were connected to their respective outputs on the H Bridge. We found through experimentation that the Enable ports on the H Bridge were not necessary for functional operation of the circuit.
Step 4: Arduino Implementation
The Arduino code used is attached below. In summary, it performs two actions: filling and deflating the cuff.
Filling is accomplished by ensuring the valve is closed, and then outputting a full signal to the H Bridge in order to activate the motor. The motor then fills the cuff, all while the Arduino is continuously receiving pressure data and printing it to the serial port.
Once a given pressure threshold is reached, the Arduino cuts power to the motor and begins deflation by activating the valve. Deflation occurs over the span of under a minute, during which the pressure data is still continually printed to the serial out port.
Step 5: MATLAB
Thus begins the role of MATLAB. The code used is attached.
Initially, MATLAB prompts the user for port information so that it can open the serial port to the Arduino and begin receiving pressure data. It then waits until the threshold pressure where the motor is deactivated.
Once that pressure is reached, MATLAB begins recording the pressure data into an array. This continues until a minimum pressure is attained, at which point data collection stops and the serial port is closed. An example plot of the unfiltered data is shown above (top).
Next, MATLAB uses a bandpass Butterworth 5th order filter in order to eliminate the noise from the circuit. An example filtered data plot is included above (bottom). This filtered data is then analyzed for a maximum peak, which is then converted to pressure in mmHg by an equation that should be changed depending on the calibration of your particular setup.
And that should be your entirely automated mean arterial blood pressure monitoring device, adjustment will likely need to be made for calibrating both the butterworth filter and conversion equation, but that's the easy part.