Close

4. Micropressure Sensor

A project log for Digital Blood Pressure Monitor

Application For Detecting Blood Pressure Using Korotkoff Sounds

guillermo-perez-guillenGuillermo Perez Guillen 05/29/2023 at 06:250 Comments

The SparkFun Qwiic MicroPressure Sensor is a miniature breakout equipped with Honeywell's 25 psi piezoresistive silicon pressure sensor. This MicroPressure Sensor offers a calibrated and compensated pressure sensing range of 60 mbar to 2.5 bar, easy to read 24 bit digital I2C output.

Micropressure sensor

Micropressure sensor

Each Qwiic MicroPressure Sensor has a calibrated pressure sensing range from 1 - 25 psi (52 - 1293 mmHg) and a power consumption rate as low as 0.01 mW typ. average power, 1 Hz measurement frequency for ultimate portability. Used in multiple medical (blood pressure monitoring, negative pressure wound therapy), industrial (air braking systems, gas and water meters), and consumer uses (coffee machines, humidifiers, air beds, washing machines, dishwashers).

Reference: https://www.sparkfun.com/products/16476

I bought this sensor two months ago, the libraries are made to work in the Arduino IDE. So I used the demo example and modified it to convert the pressure data into mmHg, remove the atmospheric pressure component, and send the data to the output of the DAC_1 (analog digital converter), on pin D25 of the ESP32-WROOM-32 board every 200 ms.

There're 2 channel 8 bit DACs in the ESP32 to convert the digital signals into analog voltage signal outputs. So value 1 corresponds to 11.76 mV, value 2 corresponds to 23.53 mV ... and value 255 corresponds to 3000 mV. You can download the code in the download section as pressure_sensor.ino.

#include<Wire.h>
#include <SparkFun_MicroPressure.h>
SparkFun_MicroPressure mpr; // Use default values with reset and EOC pins unused

#define DAC2 26

float min_pressure = 600;

void setup() {
  // Initalize UART, I2C bus, and connect to the micropressure sensor
  Serial.begin(9600);
  Wire.begin(); 
  if(!mpr.begin())
  {
    Serial.println("Cannot connect to MicroPressure sensor.");
    while(1);
  }
}

void loop() {
  float sensor_pressure = (mpr.readPressure(INHG)*25.4);
  
  if(sensor_pressure<min_pressure){
      Serial.println("new minimum pressure");
     min_pressure=sensor_pressure;
  }

  sensor_pressure = (mpr.readPressure(INHG)*25.4);
  int pressure_total = sensor_pressure - min_pressure;

  dacWrite(DAC2, pressure_total);
  Serial.print(pressure_total);
  Serial.println(";");
  delay(200);
}

Discussions