Monitor de presión arterial digital

Monitor de presión arterial digital

1. Introducción

Una vez trabajé en una empresa que vende dispositivos para el cuidado de la salud y sé cómo funcionan los monitores de presión arterial. En este proyecto usaré un micro sensor de presión para detectar los sonidos de Korotkoff, lo que me ayudará a calcular la presión arterial sistólica (máxima) y diastólica (mínima). Hay otro método llamado oscilométrico y no lo usaré porque no tengo suficiente hardware y tiempo para terminarlo. Sin embargo, el método oscilométrico se basa en los sonidos de Korotkoff y cada fabricante desarrolla su propio algoritmo matemático para encontrar las presiones sistólica y diastólica. Referencia: https://www.nature.com/articles/s41371-019-0196-9

Puedo decirles que el proyecto que se hizo con GNAT Programming Studio es mío y de mi creatividad (código fuente, diagrama esquemático y diagrama de flujo). Por lo demás, utilicé y modifiqué el código de demostración de arduino del fabricante del sensor de presión y el código para enviar los datos de prueba a Excel. Comencemos con la lista de hardware necesario.

2. Sonidos de Korotkoff

Los sonidos de Korotkoff son los sonidos que escucha el personal médico cuando están tomando la presión arterial mediante un procedimiento no invasivo. Llevan el nombre del Dr. Nikolai Korotkoff, un médico ruso que los descubrió en 1905, cuando trabajaba en la Academia Médica Imperial en San Petersburgo, Rusia.

Monitor de presión arterial digital
Sonidos de Korotkoff

Si el manguito de un esfigmomanómetro se coloca alrededor de la parte superior del brazo de un paciente y se infla a una presión superior a la presión arterial sistólica del paciente , no se escuchará ningún sonido. Esto se debe a que la presión en el manguito es lo suficientemente alta como para ocluir completamente el flujo de sangre.

Si la presión desciende a un nivel igual al de la presión arterial sistólica del paciente , se escuchará el primer sonido de Korotkoff. Como la presión en el manguito es la misma que la presión producida por el corazón, algo de sangre podrá pasar a través de la parte superior del brazo cuando la presión en la arteria aumente durante la sístole. Esta sangre fluye a borbotones a medida que la presión en la arteria aumenta por encima de la presión en el manguito y luego desciende más allá de la región del manguito, lo que genera turbulencias que producen un sonido audible.

Eventualmente, a medida que la presión en el manguito cae aún más, los sonidos cambian de calidad, luego se silencian y finalmente desaparecen por completo. Esto ocurre porque, a medida que la presión en el manguito cae por debajo de la presión arterial diastólica .

Hay cinco sonidos de Korotkoff:

Fase I : la primera aparición de sonidos de golpeteo débiles, repetitivos y claros que aumentan gradualmente en intensidad durante al menos dos latidos consecutivos es la presión arterial sistólica.

Fase II : puede seguir un breve período durante el cual los sonidos se suavizan y adquieren una calidad sibilante.

Fase III : el regreso de sonidos más nítidos, que se vuelven más nítidos para recuperar, o incluso superar, la intensidad de los sonidos de la fase I.

Fase IV : la amortiguación abrupta y distintiva de los sonidos, que se vuelven suaves y con calidad de soplido.

Fase V : el punto en el que todos los sonidos finalmente desaparecen por completo es la presión diastólica.

3. Presión arterial sistólica y diastólica

Tradicionalmente, la presión arterial sistólica se toma como la presión a la que se escucha por primera vez el primer sonido de Korotkoff y la presión arterial diastólica es la presión a la que el cuarto sonido de Korotkoff es apenas audible. Sin embargo, recientemente ha habido un movimiento hacia el uso del quinto sonido de Korotkoff.

Referencia: https://en.wikipedia.org/wiki/Korotkoff_sounds

Monitor de presión arterial digital
Presión Arterial, Corazón

4. Sensor de micropresión

Monitor de presión arterial digitalEl sensor de micropresión SparkFun Qwiic es una ruptura en miniatura equipada con un sensor de presión de silicio piezorresistivo de 25 psi de Honeywell. Este sensor MicroPressure ofrece un rango de detección de presión calibrado y compensado de 60 mbar a 2,5 bar, salida I2C digital de 24 bits fácil de leer.

Cada sensor Qwiic MicroPressure tiene un rango de detección de presión calibrado de 1 a 25 psi (52 a 1293 mmHg) y una tasa de consumo de energía tan baja como 0,01 mW típ. potencia promedio, frecuencia de medición de 1 Hz para máxima portabilidad. Se utiliza en múltiples usos médicos (monitorización de la presión arterial, terapia de heridas con presión negativa), industriales (sistemas de frenos de aire, medidores de gas y agua) y de consumo (cafeteras, humidificadores, camas de aire, lavadoras, lavavajillas).

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

Compré este sensor hace dos meses, las bibliotecas están hechas para funcionar en el IDE de Arduino. Así que usé el ejemplo de demostración y lo modifiqué para convertir los datos de presión en mmHg, eliminar el componente de presión atmosférica y enviar los datos a la salida del DAC_1 (convertidor analógico digital), en el pin D25 de la placa ESP32-WROOM-32 cada 200 ms.

Hay DAC de 8 bits de 2 canales en el ESP32 para convertir las señales digitales en salidas de señal de voltaje analógico. Entonces el valor 1 corresponde a 11,76 mV, el valor 2 corresponde a 23,53 mV… y el valor 255 corresponde a 3000 mV. Puede descargar el código en la sección de descargas como 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);
}

5. Proyecto GPS

La placa STM32F429I se programó con GNAT Programming Studio 19.1 Desarrollado por AdaCore. En esta parte se desarrolla la función de control más importante del sistema y que detallaré a continuación. El diagrama esquemático y el diagrama de flujo que puede obtener al final de este tutorial. Como referencia para este proyecto, he usado las siguientes herramientas de Ada:

1) ejemplos como demo_adc_polling y demo_gpio_direct_leds;

2) bibliotecas de controladores Ada como STM32.User_Button, STM32.ADC, STM32.GPIO y LCD_Std_Out; y

3) Teoría como matrices y bucles for y while.

El análisis del código del tensiómetro digital lo he dividido en tres apartados:

Inflado del manguito,

Desinflado del manguito y

Cálculo de los sonidos de Korotkoff.

Nuestro diagrama esquemático se muestra a continuación:

Monitor de presión arterial digital

6. Inflado del brazalete

  • El puerto analógico PA5 de la placa STM32F429I está conectado al puerto DAC_1 de la placa ESP32-WROOM-32, por lo que monitorearemos cada mmHg del sensor de presión en tiempo real.
  • Cuando presionamos el botón de usuario (azul) que corresponde al puerto PA0, entonces la bomba de aire y la válvula solenoide neumática se encienden.
  • En este solenoide la válvula se cierra y no permite ninguna fuga de aire, por lo que la bomba de aire comienza a inflar el manguito, y el sensor de presión nos indica cómo aumenta la presión dentro del manguito.
  • Cada aumento de presión dentro del manguito se imprime en la pantalla LCD de la placa STM32F429I.
  • Hay que tener en cuenta que antes de imprimir la presión total hago una resta de ocho unidades, esto se debe a que encontré un pequeño error de +8 mmHg aprox en todas mis lecturas. Hice esta verificación con un manómetro aneroide.

Monitor de presión arterial digital
Calibre aneroide

  • Cuando la presión dentro del manguito alcanza los 170 mmHg, la bomba de aire se detiene (OFF) y la válvula solenoide continúa cerrada.

if STM32.User_Button.Has_Been_Pressed then — Btn pressed then go to 170 mmHg
Start_Conversion (Converter);
Poll_For_Status (Converter, Regular_Channel_Conversion_Complete, Successful);
Solenoid_valve.Set;   — solenoid valve is ON
Motor.Set;   — air pump is ON
Enable_a.Set;
Enable_b.Set;
Raw := UInt32 (Conversion_Value (Converter));
Volts := UInt32  ((Float (Raw) / 4096.0) * 3000.0);   — 4096 ADC = 3000 mV
Pressure := UInt32 ((Float (Volts) / 3000.0) * 255.0);   — 3000 mV = 255 mmHg
Pressure_total := UInt32 (float (Pressure) – 8.0);   — 3000 mV = 255 mmHg
Print (0, 0, Pressure_total, » mmHg»); — print blood pressure

while Pressure_total <= 170 loop
Start_Conversion (Converter);
Poll_For_Status (Converter, Regular_Channel_Conversion_Complete, Successful);
Raw := UInt32 (Conversion_Value (Converter));
Volts := UInt32  ((Float (Raw) / 4096.0) * 3000.0);   — 4096 ADC = 3000 mV
Pressure := UInt32 ((Float (Volts) / 3000.0) * 255.0);   — 3000 mV = 255 mmHg
Pressure_total := UInt32 (float (Pressure) – 8.0);   — 3000 mV = 255 mmHg
Print (0, 0, Pressure_total, » mmHg»); — print blood pressure
delay until Clock + Milliseconds (75);
end loop;

Solenoid_valve.Set;   — solenoid valve is ON
Motor.Clear;   — air pump is OFF
Enable_a.Set;
Enable_b.Clear;

7. Desinflado del manguito

Continuando con la narración del apartado anterior. El manguito comienza a desinflarse a partir de 170 mmHg .

Recuerde que la válvula solenoide está cerrada, por lo que ahora la fuga de aire está en la válvula de liberación de aire. Aquí, la recomendación es que el proceso de desinflado del manguito sea entre 17 y 21 segundos. Entonces, debemos calibrar esta válvula de liberación de aire con un destornillador plano, de modo que si la giramos en el sentido de las agujas del reloj, la válvula se cierra y en el sentido contrario a las agujas del reloj, la válvula se abre.

Monitor de presión arterial digital
Calibración de la válvula de escape de aire

  • El siguiente paso es medir valores de presión arterial entre 70 mmHg y 170 mmHg y guardarlos en la matriz «PressureArray» cada 200 ms aproximadamente.
  • He programado un valor máximo de 210 mmHgen la función while por si durante el inflado del manguito se supera el límite de 170 mmHg, por ejemplo 180 mmHg.
  • Los valores almacenados en la matriz «PressureArray» y por prueba están entre 120 y 130 .

Monitor de presión arterial digital
Diagrama de flujo

while Pressure_total > 70 and Pressure_total <= 210 loop
Start_Conversion (Converter);
Poll_For_Status (Converter, Regular_Channel_Conversion_Complete, Successful);
Raw := UInt32 (Conversion_Value (Converter));
Volts := UInt32  ((Float (Raw) / 4096.0) * 3000.0);   — 4096 ADC = 3000 mV
Pressure := UInt32 ((Float (Volts) / 3000.0) * 255.0);   — 3000 mV = 255 mmHg
Pressure_total := UInt32 (float (Pressure) – 8.0);   — 3000 mV = 255 mmHg
Print (0, 0, Pressure_total, » mmHg»); — print blood pressure

PressureArray(X_Pos) := Integer (Pressure_total);
X_Pos := X_Pos + 1;
delay until Clock + Milliseconds (190);
end loop;

8. Cálculo de los Sonidos de Korotkoff

  • Ya tenemos todos los datos almacenados en la matriz «PressureArray». Ahora nuestro objetivo es encontrar estos puntos donde se producen los sonidos de Korotkoff.
  • Hice una prueba, envío y gráfico para sobresalir todos los puntos de la curva de mi presión arterial para ver los puntos donde se producen los sonidos de Korotkoff, y esto fue lo que vi.

Monitor de presión arterial digital
Detección de 10 sonidos de Korotkoff

Aquí puede obtener un tutorial para enviar los datos a Excel: https://github.com/gsampallo/serialToExcel

Y puedes descargar mi archivo de Excel en este enlace: Korotkoff_sounds_excel

  • En el gráfico de arriba encontré diez sonidos de Korotkoff. Hice un análisis y en todos los puntos de Korotkoff encontré las siguientes dos constantes: 1) el punto b es mayor que el punto a, y 2) el punto c es mayor que el punto a.

Monitor de presión arterial digital
1 / 10 • 130 mmHg > 129 mmHg y 130 mmHg > 129 mmHg

  • A través de un bucle for voy a pasar por 130 registros de la matriz «PressureArray». A continuación, asigno el primer registro a la variable «var_a», el segundo registro a la variable «var_b» y el tercer registro a la variable «var_c».
  • Si las variables «var_b» > «var_a» y «var_c» > «var_a», imprimo la variable «var_b» como sonido Korotkoff.
  • Cualquier otra combinación solo demoro 1 ms. y no imprimo nada.
  • De acuerdo con la teoría leída al comienzo de este tutorial (secciones 2 y 3) , la presión sistólica es el primer sonido de Korotkoff y la presión diastólica es el último sonido de Korotkoff.

Monitor de presión arterial digital
Diagrama de flujo

for I in 1 .. 130 loop
var_a := UInt32(PressureArray(I));
var_b := UInt32(PressureArray(I+1));
var_c := UInt32(PressureArray(I+2));

if var_b > var_a and var_c > var_a then

Print (0, Integer (inc), var_b, » mmHg-korot»);
inc := inc + 25;
delay until Clock + Milliseconds (1);

else

delay until Clock + Milliseconds (1);

end if;

end loop;

9. Montaje del dispositivo

El hardware se encuentra ensamblado en una caja para el mejor manejo del dispositivo, en la siguiente figura podemos ver la caja realizada con una impresora 3D, y cuyo archivo STL puedes obtener en la sección de descargas.

A continuación, unimos la electroválvula con el conector por el que se puede conectar el manguito.

Monitor de presión arterial digital
Electroválvula neumática + conector

Ahora pegamos estas piezas con silicona sobre la ranura de la caja que se muestra en la siguiente figura.

Monitor de presión arterial digital
Pega las piezas indicadas en la caja

He usado una bomba de aire más pequeña para encajar mejor en la caja. Entonces, unimos esta bomba de aire al conector del manguito con una manguera de aire como se muestra en la figura a continuación. También unimos la válvula de liberación de aire al conector del manguito con una manguera de aire.

Monitor de presión arterial digital
Bomba de aire + válvula de liberación de aire

Conectamos el  micro sensor de presión con la bomba de aire con una manguera de aire. Luego fijamos el microsensor de presión como se muestra en la siguiente figura.

Monitor de presión arterial digital

El siguiente paso es arreglar la placa ESP32-WROOM-32 como se muestra en la figura a continuación.

Monitor de presión arterial digital
Fijación placa ESP32-WROOM-32

Finalmente, coloque la placa STM32F429I y el controlador L298N como se muestra en la figura a continuación. Todas las conexiones eléctricas se siguen como en el diagrama esquemático.

Monitor de presión arterial digital
Placa STM32F429I + controlador L298N

10. Prueba

En el video a continuación les muestro mis primeras pruebas con este dispositivo de salud. En la primera parte, vemos una prueba donde obtengo seis sonidos de Korotkoff. En la segunda parte hice un primer plano, para que puedas ver los datos en la pantalla LCD.

Para aumentar la cantidad de sonidos de Korotkoff detectados, hice dos cosas:

La válvula de liberación de aire debe ser recalibrada, por lo que le di más tiempo para que el dispositivo tuviera tiempo de detectar más sonidos de Korotkoff (Referencia: segundo punto de la sección 7) ; y

Monitor de presión arterial digital
Recalibración

Se debe agregar gomaespuma a la bomba de aire para reducir las vibraciones del dispositivo, ya que estas vibraciones inducen ruido en otros dispositivos.

Obtuve diez sonidos de Korotkoff en esta prueba, y podemos verlos en la siguiente figura:

Monitor de presión arterial digital
Diez sonidos de Korotkoff

Sonidos de Korotkoff:

  • 139 mmHg
  • 130 mmHg
  • 127 mmHg
  • 126 mmHg
  • 116 mmHg
  • 111 mmHg
  • 109 mm Hg
  • 106 mmHg
  • 99 mmHg
  • 81 mmHg

Finalmente, revisé mi presión arterial y la comparé con la segunda prueba.

Notas:

  • En ese momento sufría de una leve gripe, por lo que los valores pueden considerarse justificados.
  • El manómetro digital de OMRON detecta los sonidos de Korotkoff mientras el manguito está inflado. Mi diseño detecta los sonidos de Korotkoff mientras se desinfla el manguito.

COMPARACIONES DE DATOS:

  • Mi dispositivo: según la teoría vista en las secciones 2 y 3 , mi presión sistólica es de 139 mmHg y mi presión diastólica es de 99 mmHg (o 81 mmHg).
  • El dispositivo OMRON: me dice que mi presión sistólica es de 137 mmHg , y mi presión diastólica es de 95 mmHg .

11. Conclusión

Para desarrollar este proyecto aprendí que es necesario verificar y analizar cada paso a seguir, por ejemplo:

  • Las mediciones de presión de este dispositivo se compararon con un manómetro aneroide.
  • Tuve que calibrar la válvula de escape de aire varias veces.
  • Este modelo puede ser útil para un médico o enfermera que sufre de problemas de audición, ya que le sería imposible detectar los sonidos de Korotkoff.
  • En las pruebas finales me siento satisfecho con los valores medidos por mi dispositivo cuando lo comparo con el dispositivo OMRON.

12. Desafíos

Este proyecto es complejo, por lo que sugiero los siguientes retos para mejorarlo:

  • Haga las bibliotecas de sensores de presión para conectarlo directamente con la placa STM32F429I;
  • Otra opción al punto anterior sería comunicar las placas ESP32-WROOM-32 y STM32F429I a través del puerto serie;
  • Calcule la frecuencia cardíaca a partir de los sonidos de Korotkoff; y mostrar la frecuencia cardiaca con la presión sistólica y diastólica en la pantalla;
  • Desarrollar el prototipo con el método oscilométrico. Para lograr esto, es necesario probar con filtros de paso de banda analógicos y/o digitales. Al final tienes que hacer un algoritmo para combinar el método oscilométrico y los sonidos de Korotkoff.

Así se fabrica un tensiómetro digital.

Aquí podés baja toda la información:

https://github.com/guillengap/digital-blood-pressure-monitor

 

Acerca de Guillermo Perez Guillen 3 Artículos
Ingeniero en Electrónica y Comunicaciones (ECE), involucrado en la investigación, diseño, desarrollo y prueba de equipos electrónicos utilizados en varios sistemas.

Sé el primero en comentar

Dejá un Comentario

Tu dirección de correo no será publicada.


*