# Blood Pressure Monitor

61,441

87

93

For our Biomedical Instrumentation course, we created a blood pressure monitor. This blood pressure monitor measures the mean arterial pressure (MAP) and approximates the systolic and diastolic pressures. It requires the use of a pressure transducer, an Arduino Uno, and coding to control the valve and air pump. The circuit design is composed of three basic stages: a low pass filter, a high pass filter, and a noninverting amplifier. In this Instructable, we will explain the set up of the circuity and then explore the coding behind the monitor.

Blood pressure monitors are primarily used in clinical settings to analyze patient’s blood pressure and in order to prescribe the best treatment. This low cost monitor inflates and deflates the blood pressure cuff in order to determine the mean arterial pressure. It then roughly approximates the diastolic and systolic pressures based on the mathematically relationship between mean arterial pressure, diastolic, and systolic pressures. The results are then displayed on the LCD screen.

It should be noted that this device is not designed for clinical applications, however, it is a fun way to learn about pressure sensors and Arduino while creating a functional device applicable to the real world!

### Teacher Notes

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

• Arduino UNO board w/USB cable
• Arduino compatible LCD
• Pressure Transducer (We used the Honeywell Differential Transducer 015PDAA5)
• Voltage-controlled valve
• Air pump
• Wires
• Power Supply (±15V)
• Resistors (Four 100kΩ, One 1 kΩ)
• Capacitors (Two 1µF)
• Three-way splitter
• Plastic Tubing
• Blood Pressure Cuff
• TL072 Op Amp

Our design consists of a passive bandpass filter composed of a low pass filter in series with a high pass filter. The low pass filter eliminates any high frequency noise (cutoff = 10Hz) and the high pass filter (cutoff = 2Hz) allows us to determine the MAP based pressure fluctuations in the cuff.

## Step 2: Set Up the Cuff, Pump and Valve Configuation

Use the three-way splitter and plastic tubing to join the cuff, air pump, and valve. You will want tubing that fits snugly around the pump and valve so that no air leaks out, or else your measurements will be less accurate. Cut a fourth piece of tubing and connect it to the splitter. The pressure transducer will be connected to this tubing later.

Place the transducer on the breadboard and attach the ground and power supply according to the data sheet:

Pin1= supply

Pin2= output voltage

Pin3= ground

For this device, 5 V was applied to pin 1, the output voltage was connected to the circuitry (built in the next step), and lastly, pin 3 was connected to the ground from the Arduino Uno.

## Step 4: Build the Low Pass and High Filter and Amplifier

On a breadboard you will create the follow circuitry as illustrated in the diagram below. Corresponding to the diagram labels:

Vaa= voltage source

R1=100kΩ

R2=200kΩ ( Two 100kΩ in series)

R3=100kΩ

R4=1kΩ

C1=1µF

C2=1µF

Don't forget to orient the transducer and TL072 so that the 1 IN terminal receives the transducer output. Also, we used color-coded wires to distinguish between the negative (black) and positive(red) supply terminals of the op amp terminals.

## Step 5: Code

The first picture shows the code used to initialize the LCD library ("LiquidCrystal"), the LCD screen dimensions, and all necessary global variables. The screen dimensions are initialized in the setup and specify the number of columns and rows on the screen, 16 and 2 for our code. The valve doesn't release air when a voltage is applied across it, so Pin 3 (to which the valve is connected) is initialized in Output Mode and HIGH.

The second picture contains the code that actually calculates the pressures. We created an array of the output voltages using a for loop. The loop is set to run 50 times with a delay of .25s. This number of values corresponds to about 12.5s. Cuff inflation after this amount of time was too tight for our "patient." You can adjust these values as you see fit. Since Arduino is a 10bit system, the analogRead function returns an integer within the rang [0,1023]. volt is calculated by converting this integer value into its corresponding voltage. The for loop also stores the maximum voltage as data is collected by the Arduino. We subtracted 2.5V from this volt due to the 2.5V offset that the transducer has when both ports are exposed to atmospheric pressure.

The applied pressure (pressure) is calculated using the equation on the transducer data sheet. However, we used a differential transducer which mean the pressure we calculated is actually the difference between Ports 1 and 2. MAP is the pressure at Port 2 and is calculated by subtracting the pressure from atmospheric pressure which is 14.7 psi. This value is multiplied by 51.7 to give MAP in units of mmHg. There is an additional term in the equation for MAP. After taking several measurements, we noticed a pressure offset that decreased as the voltage increased. We compensated for this by subtracting " 3.16/maxvolt " from the pressure. We obtained this value by averaging the pressure offset and relating it to the measured voltage. Once the for loop is exited and MAP calculated, Pin 3 is written to LOW and the valve releases the air from the cuff.

The final piece of code is an empty while loop. This was added so that the Arduino didn't continuously calculate MAP.

## Step 6: Connect All Circuit Components

Connect the following components:

1. LCD to Arduino (the LCD pins should fit into the Arduino pins)
2. Power Supply Terminals to TL072
3. Arduino Ground and Power Supply Ground (All supply grounds must be connected)
4. The 2 OUT terminal of the TL072 should be connected to the A0 Pin.

The valve wires should be connected to Digital Pin 3 and ground. For our purposes, the orientation of the wires did not matter. One of the air pump wires will be connected to ground. When the program is run, the other air pump will need to be manually inserted into the 3.3V power supply on the Arduino. If you discover a way an automatic way to control the air pump, please respond in the comments.

## Step 7: Take Your Measurements!

Connect your air pump to the 3.3V Pin on the Arduino as soon as the code has been uploaded. Try to sit as still and quiet as possible while the code runs. Once the MAP is displayed you can disconnect the air pump and remove the cuff from your arm. The valve will release any air remaining in the pump. You should see something similar to the above picture.

## Recommendations

• ### Internet of Things Class

22,843 Enrolled

## 93 Discussions

Hi
thx
ratosh.2310@gmail.com

Hey. Can i also have a copy of the circuit diagram for the filter? And what is the orientation of the wirinv of the valve and pump. Thanks.

What's shown in figure 53 below works for me. I couldn't make this work using only a single ADC input. Accommodating the normal dynamic range of cuff inflation pressure found on manual sphygmomanometers (0 - 300 mgHg) leaves too little resolution to accurately measure pulse pressure fluctuations (1 - 4 mmHg) in a single signal. The circuit below uses two amps and two ADC inputs. The pulse pressure amp (band-pass) is AC coupled so you can use a much higher gain to get good resolution on the pulse pressure.

Even so, if you're operating at 3.3 volts you'll want a rail-to-rail op amp like an LMC6484. A general purpose op amp will only give you 0-2 volts on the output which wastes a lot of the range on the Ardiuno's AD converter.

https://www.robots.ox.ac.uk/~neil/teaching/lecture...