Introduction: Blood Pressure Monitor
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!
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)
• Breadboard
• 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
Step 3: Add the Transudcer to the Breadboard
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
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
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.