Respirador de emergencia Aircheap con Arduino, para ayudar a combatir el Covid19

Entre las cosas que sólo un mes atrás eran impensables está sin duda la explosión de generosidad que han demostrado los "makers", fabricando elementos de protección contra el coronavirus, y también diversos grupos que desarrollan respiradores muy necesarios para salvar vidas...

Los "fabricantes" de respiradores son de distintos perfiles, makers aficionados, grupos de expertos multidisciplinarios de universidades, hospitales o centros de investigación, y algunos profesionales y empresas de otros campos que han cambiado hacia este noble empeño. A la vez, de los 40 o 50 equipos conocidos, la mayoría trabajan con diseños basados en el "ambu", ese balón flexible que forma parte de los equipos de reanimación. Otros dependen de un sistema de presión externa de aire, y unos pocos utilizan una turbina o un pequeño compresor...

En la parte de control del respirador también hay de todo, desde artefactos muy básicos y mecánicos que van casi a piñón fijo y solo permiten regular la marcha del motor, a sistemas digitales con control de flujo y presión que pueden adaptarse mucho mejor a las circunstancias de los pacientes.

Tales dispositivos deberán ser además mucho más económicos que los hospitalarios, cuyo coste oscila entre los 10.000 y 25.000 €. Algunos desarrolladores están dando cifras de entre 1.000 y 2.500 €, que siendo 1/10 parte pienso que sigue lejos del alcance de países de economía precaria. Por todo ello es frecuente que en los medios hablen de estos dispositivos "de emergencia" como sistemas muy sofisticados que solo un equipo de ingenieros y expertos puede desarrollar y poner a punto, y cumplir luego las exigencias no demasiado sencillas (ni lógicas en esta crisis) de la Agencia del Gobierno...

¿Pero qué queréis que os diga? como la mayoría de la gente en estas complicadas fechas, yo estoy confinado en casa, no tengo un laboratorio equipado y mi único título es de Técnico Superior en Informática, pero pienso que no puede ser tan difícil construir un respirador funcional aún más económico que los anteriores y por encima de la sofisticación de la media de los proyectos que he visto, pero adelanto que es algo puramente amateur, que es sólo un ejercicio sin ningún ánimo de lucro ni de producción en serie, y que no pienso utilizar en personas ni por descontado iniciar ninguna farragosa senda de permisos administrativos.

Para empezar diré que el proyecto lo llamaré "Aircheap" (Aire "barato"), lo cual ya da una idea de por donde van las intenciones. Y además, al estar encerrado ni siquiera tengo acceso a materiales básicos que en otras condiciones podría encontrar en una ferretería ...aunque en el trastero hay algunas viejas cajas que nunca se sabe qué pueden contener...

Continuará...

Un saludo a todos

Veamos como se desarrolla :wink:

Vale, rebuscando en el trastero me he encontrado con dos palmos de tubo grueso, otro de silicona de apenas 1 mm de diámetro interno, y también algo que ni recordaba que estaba ahí. Se trata de un pequeño avión, un aeromododelo de un A-10 Warthog, o mejor dicho de sus restos, ya que siempre fue un aparato terrible, muy inestable que volaba fatal y cada dos por tres acababa en el suelo con alguna parte rota.

¿Y qué tienen de interesante estos restos para mi proyecto? ...pues dos turbinas eléctricas que tal vez podrían comprimir el aire a suficiente presión como para hinchar un pulmón...

Las turbinas son pequeñas, tan sólo de un diámetro interno de 5,5 cm, de 6 palas y propulsadas por un motor "brushless" (sin escobillas), trifásico de alta velocidad... Y en realidad recuerdo que hace años, nada más comprar el avión a China por correo, tuve que modificarlas porque a los pocos minutos de funcionar, simplemente por las vibraciones de un mal equilibrado de fábrica, una de ellas rompió si eje. Ahora ya no hay peligro de que ocurra por ser el nuevo de acero más duro y de más diámetro, pero fue otro de los disgustos que me brindó este A-10 y por los que al final lo dejé en el trastero...

Todo el avión es de poliestireno expandido, así que no me fue difícil cortar las góndolas de los motores y abrirlas con cuidado, pudiendo ver el cuerpo de la turbina y en su parte trasera el motor...

Tras media hora de trabajo ya tenía el conjunto turbina-motor "limpio". El motor propiamente dicho es el pequeño cilindro con la cabeza azul. Es del tipo síncrono, de 6 polos de alta velocidad, ya que estas turbinas han de girar al menos a 45.000 RPM para tener algo de rendimiento...

...Y ya que el respirador Aircheap debe ser ante todo "barato" iré apuntando cuánto pueden valer los elementos que utilice. Este avión costó 80€, con el fuselaje, alas, servos, ruedas, los dos variadores de control, los motores, etc... por tanto, tirando hacia arriba, cada una de estas turbinas deben valer 8 o 9 €... pero ¿me servirán para este proyecto? ...pues aún no lo sé, recuerdo que aire daban para levantarle la falda a Marilyn Monroe, pero el handicap puede estar en la presión... mañana lo comprobaré...

Continuará...

Saludos a todos

En la respiración las presiones de aire implicadas son muy bajas, del orden del 1,2 % de la atmosférica, así que el único manómetro que tengo en casa del compresor de aire para el aerógrafo no me sirve en absoluto. En cambio sí será fácil construir un manómetro de columna de agua...

La presión de 1 atmósfera equivale aproximadamente a la que ejerce una columna de agua de 10 metros de altura, y el 1,2% son 12 centímetros. He rebuscado en cajas y he encontrado un tubito de cristal de 5 mm de diámetro interno y 55 cm. de longitud que sin duda me servirá...

También necesito un pequeño recipiente con tapa hermética, y lo tengo en forma de esos pequeños botes de plástico que se utilizan para guardar muestras de orina para los análisis. Tengo un par en casa que compré hace tiempo... Así que materiales no me van a faltar para esto, pero antes de montarlo debo resolver otro problema, el de fijar la turbina de aire y hacerle una embocadura en la parte trasera donde conectar el resto de sistemas del respirador Aircheap...

...La improvisada solución ha sido cortar con unas tijeras una botella de plástico de Coca-Cola de 300 cm3 y con un soldador de aire caliente graduado a 200 Cº ir reduciendo el diámetro con cuidado hasta que se adapta perfectamente a la salida de la turbina...

...Después simplemente la he fijado con cinta americana y la he montado sobre un rectángulo de tablero aglomerado...

También debo pensar en un control básico de revoluciones. Estos motores "brushless" dan un alta potencia para su tamaño y ya he comentado que son trifásicos. El control se efectúa con unos módulos llamados variadores, que para esta potencia valen unos 2€, y que convierten la corriente continua de la batería en trifásica con la que funciona el motor. Su funcionamiento es algo complicado porque no solamente han de suministrar una frecuencia variable para que gire a ciertas revoluciones, si no además sincronizar perfectamente las fases para que en cada momento correspondan a la posición física del rotor de imanes respecto a las bobinas del estator, con ángulos de avance, autocorrecciones, etc, que son gestionadas por un pequeño microcontrolador presente en su circuito...

...Pero esto, siendo interesante, no nos debe importar ahora. Lo principal es ver cómo podemos controlarlo con un Arduino. Pues resulta que el variador tiene un cable de salida con un conector tipo servo, y responde exactamente igual a los impulsos de control de duración variable entre 1 y 2 milisegundos. Además, la mayoría de los variadores tienen otra función útil, que alimentado en este caso a 12 Vcc, proporcionan a través de cablecillo rojo del positivo del servo, los 5 Vcc necesarios para la alimentación del Arduino...

Vale, como placa de control elegí un Arduino Nano, más que suficiente para lo que necesito, y que inserté en conectores que previamente había soldado a un pequeño rectángulo de circuito impreso...

...A la vez, añadí un potenciómetro para el ajuste básico de marcha del motor y un par de condensadores de filtro, para esta función siempre por pares, un electrolítico de media capacidad, unos 220 uF, para absorber las alteraciones mayores y de frecuencia más baja, y uno de poliester de 22 nF que con su baja impedancia absorberá los transistorios de alta frecuencia...

A sí que una vez acabado el circuito básico lo probé con un simple servo al que le he añadido una aguja y un dial graduado en tiempos de microsegundos, un artilugio que construí hace un tiempo y que me ha resultado útil en muchas ocasiones para tener una referencia tanto del hardware como de los parámetros de software...

El programa también era muy básico, utilizo la librería "servo.h", leo la señal analógica del potenciómetro a través de A0 y la salida de control de servo va al pin3. También hay una instrucción Serial.print() para enviar al PC el valor de la variable de control...

// Programa Aircheap_01 de control de respirador turbina

#include <Servo.h>      //Importamos la librería para controlar servos
float mando = 0;

Servo motor;                      //Nombre del "servo"
void setup()
  {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  motor.attach(3);                //Control motor brushless al pin 3 del Arduino
  motor.write(0);                 //motor a 0 (0-180)
  for (int f=0; f<5; f++)         //Control inicialización
    {
    digitalWrite(13, HIGH);
    delay(100);
    digitalWrite(13, LOW);    
    delay(100);
    }
  }

void loop() 
  {
  mando = analogRead(A0) * 0.175; //Lee potenciómetro de control y convierte 0-1024 a 0-180
  motor.write(mando);             //Escribe valor en servo
  Serial.println(mando);          //Para control
  delay(50);
  }

Continuará...

Un saludo a todos

Llorens

Volvamos al manómetro. El recipiente será uno de muestras de orina de los que tenía un par en casa para guardar elementos que han de estar sellados, ya que es importante que no pierda ni pizca de aire, las conexiones las haré con tubito de silicona que tenía guardado para los sistemas de combustible de los viejos motores glow y los terminales los hice de trozos de tubo de latón de una vieja antena de radiocasette, que nos proporciona distintos diámetros concéntricos y retirando la fina capa de cromo se suelda muy bien...

Ya tengo el sistema fijado sobre un tablero. La columna vertical es un tubito de cristal de 55 cm. que tenía en casa de viejas experiencias de soplado y que he sujetado a la tapa del frasco con un pequeño triángulo de aglomerado. La turbina está sujeta con bridas y abajo a la izquierda está el variador...

Aquí se aprecia mejor el manómetro. La entrada de presión, el tubo vertical graduado cada centímetro con resaltes en los 5 y 10, con rotuladores de tinta permanente, y el agua que he teñido con azul de metileno para que la columna sea más evidente...

Bien, al darle corriente al sistema y girar el potenciómetro de regulación, la turbina ha arrancado normalmente, y la columna de agua ha subido al instante en el tubo. He medido un máximo de 14,5 cmH2O, lo cual siendo moderado considero que es suficiente para esta fase del proyecto.

Los valores que relaciona la variable de control de la turbina con la presión obtenida en cmH2O, son:

64 - 2
67 - 3
69 - 4
73 - 5
76 - 6
79 - 7
82 - 8
86 - 9
90 - 10
95 - 11
102 - 12
112 - 13
120 - 14

...Es decir, del margen de regulación teórico de 0-180, el motor arranca a 64 y acelera hasta 120, punto a partir del cual ya no aumentan las revoluciones... El motivo del bajo límite superior tiene que ver con que la turbina no trabaja de la forma que sin duda calculó el fabricante, con la salida de aire libre y con una velocidad de entrada media de 80-100 Km/h, que serían las condiciones normales de vuelo, si no que está estática y su parte trasera se encuentra cerrada por la embocadura. En estas condiciones dudo que alcance las 15.000 RPM, una cuarta parte de la velocidad de giro que sería normal.

Bien, ahora lo siguiente será construir el medidor de presión electrónico basado en un económico sensor BMP180, cuyo precio es de alrededor de 1€ y calibrarlo con el manómetro de columna para que luego sus señales puedan ser utilizadas por el programa.

La adaptación del sensor BMP180 para conectarle un tubito de presión ha ido bien, cuidando en que quedase sólido pero sin calentar excesivamente el propio sensor. Después lo he conectado al bus I2C del Arduino mediante un conector para poderlo separar o cambiar en caso necesario...

Una "T" también construida con tubito de antena de radiocasette soldada me permitirá dar presión de forma simultanea al manómetro de columna de agua y al sensor BMP180, para poder calibrar este último...

En este caso la presión variable la creo mediante una simple jeringa de plástico, ya que pienso obtener las equivalencias hasta los 55 cmH2O, cuando la turbina sólo llega hasta los 14 cmH2O...

Con el software de adquisición de datos de presión he tenido algunos problemas, puesto que las descripciones que he encontrado del BMP180 son bastante parciales, sobre todo en cuanto a la configuración interna del sensor respecto al oversampling para mejorar las lecturas...

A los datos obtenidos les he restado una parte del pedestal y los he reflejado en un gráfico de excel que me ha salido bastante lineal. Los valores de presión entre 0 y 15 cmH2O arrojan lecturas entre 467 y 824, un margen bastante bueno para ser utilizado por el Arduino...

Continuará...

Un saludo a todos

Llorens

Al tercer día del reto, rebuscando materiales para proseguir con el respirador Aircheap, tras una maceta de la terraza encontré un verdadero tesoro para mi escasez de elementos de fontanería, un tubo de ducha roto que debió quedarse ahí olvidado medio año atrás, cuando recuerdo que lo cambiamos porque perdía agua por un extremo. Así que retirando la envoltura de acero inoxidable y descartando el trozo roto, ya tengo algo de tubo flexible, también sus terminales y un aspersor con válvula que a buen seguro acabaré utilizando para algo...

Con los nuevos accesorios pude construir un nuevo terminal tipo tapón "Coca-Cola" para acoplar el tubo a la salida de la turbina, y también modifiqué otro tapón acoplándole una salida doble hecha con tubo de antena, una para el diámetro del nuevo tubo y otra del diámetro mucho menor para el tubito directo de los medidores de presión, que con el reducido diámetro del tubo de suministro principal siempre es mejor tomar junto a la boquilla del respirador, que a la salida de la turbina...

Este día también tenía pensado construir el "pulmón artificial" que necesito para valorar las primeras pruebas del respirador, pero como no tengo ningún "ambus" ni puedo conseguirlo, utilicé un elemento flexible más habitual en muchas casas, que colocaré como las hojas de un libro, entre dos rectángulos de aglomerado unidos por bisagras...

Y aquí se devela el misterio del elemento flexible de mi "pulmón artificial casero", que es nada más ni nada menos que una simple "bolsa de agua caliente" de toda la vida, a la que enrosqué el tapón de doble embocadura modificado antes.

...Pero pienso que no basta que un recipiente sea flexible para imitar el comportamiento mecánico pasivo de un pulmón, si no que debe ofrecer una cierta resistencia al hinchado que además se incremente de forma exponencial al aproximarse a su capacidad de llenado, que además deberemos poder variar. Para ello le añadí sobre la parte plana 300 gr. de chapas metálicas acumulables de 100 gr. cada una, de las que dispongo hasta de 7, y una varilla-guía con un tope ajustable con un muelle que aportará el incremento de la progresividad final...

En la siguiente imagen se ve mejor el mecanismo de ajuste del "pulmón", manteniendo el peso de tarado de 300 gr. y el ajuste de volumen más o menos a media capacidad...

Al acabar este montaje ya era de noche y no quise molestar a nadie con el silbido de la turbina, pero soplando ligeramente por el tubo de carga-descarga observé como el "pulmón" se hinchaba manteniendo una presión media de 4-5 cmH20 hasta llegar al tope de expansión, en que la presión subía de forma exponencial hasta que la columna de agua alcanzaba el valor previsto en el tope de expansión, en este caso de 12-13 cmH2O...

...Así pues, mañana, en un nuevo día de forzado confinamiento por el Covid-19 y cuarto del proyecto, aprovecharé para añadirle al "pulmón" una escala calibrada y comenzar la programación del Arduino para controlar los ciclos de respiración, inicialmente con posibilidad de regular la velocidad de ciclo, y en un segundo estadio que pueda además establecer las presiones máximas y mínimas durante el ciclo...

Continuará

Un saludo a todos

Llorens

El cuarto día comencé con el software que regulará los sistemas del Aircheap. En principio los parámetros configurables serán los ciclos por minuto de respiración y la forma de dichos ciclos, que divido en aspiración, meseta y espiración. En una segunda fase añadiré el control de las presiones de pico y PEEP, y en una tercera seguramente trigger por flujo... El sistema de regulación se basará en botones y un display LCD, o tal vez aproveche el potenciómetro para establecer los valores en el display y tres botones para memorizarlos... aún no lo sé...

También instalé y calibré un dial de volumen de aire en el "pulmón" que debería llamar "de prueba" mejor que "artificial", ya que sólo es un símil de la parte mecánica pasiva de la respiración. Para ello no podía utilizar agua, ya que se distribuye en el interior de la bolsa de manera distinta al aire, con lo cual su forma y por tanto la lectura sería distinta.

...Así que condicionado otra vez por los materiales que tengo en casa, creo haber conseguido cierta precisión mediante un sistema intermedio con una botella de Coca-Cola de 1,2 l, que he graduado cada 50 cm3, y que al ir llenándola de agua trasvasaba la misma cantidad de aire al pulmón...

En todos los sistemas físicos, incluso en los más sencillos, surgen siempre variables imprevistas. Una de ellas ha sido el distinto "aplastamiento" de la bolsa dependiendo del tarado de peso que se coloque. En principio no debería afectar demasiado, sólo a la presión, pero no a la altura (puesto que el volumen con presiones del 1,2% de la atmosférica, apenas disminuye) ...pero como el punto de apoyo principal de la tabla superior se va desplazando hacia las bisagras a medida que sube, el peso es más significativo porque cambia sensiblemente la forma y la superficie de contacto. Por ello, al final el dial tiene dos escalas, una para tarado de 0 gr. y la otra para 300 gr (y si fuera necesario podría añadir una tercera e incluso una cuarta). Las escalas miden el volumen de llenado de algo más de 1 litro (1,1 para 0 gr, y 1,2 para 300 gr.), volúmenes superiores a los que utilizaré puesto que estos respiradores normalmente funcionan entre 500 y 800 cm3.

En la siguiente imagen el "pulmón" está hinchado a 800 cm3 y comienza la fase de aumento exponencial de presión al hacer tope el muelle amortiguador. Para cambiar este punto de ajuste se puede subir o bajar el soporte sujeto al eje con dos tornillos. Luego, una vez vuelto a fijar, se ha de mover el dial para reajustar el cero de la escala... Naturalmente, si se desea una progresión exponencial diferente en el punto de máximo hinchado, basta con sustituir el muelle por otro de distinta longitud y rigidez...

Y por fin, en la tarde del cuarto día pude decir lo mismo que Kenneth Branagh en "Frankenstein de Mary Shelley" ...It's alive... La función básica del respirador está funcionando, aunque de momento sólo por control por tiempos. No obstante, aplicándole una mascarilla que cubra la boca y la nariz, ya podría mantener las respiración, con algo de "debreathing" al no tener válvulas unidireccionales, cierto, pero todo se andará...

Vídeo de la prueba

Continuará...

Saludos a todos

Llorens

Hoy, quinto día, he seguido trabajando con algunos accesorios. En otra de las cajas del trastero he encontrado una vieja mascarilla de pintar, un par de codos de plástico y un tubo de descarga de lavadora que sobró de cuando la cambiamos...

Sustituyendo el filtro de la mascarilla por un disco de plástico cortado de un cartel, la convertiré en un sistema de respiración no intubada.

La unión de las piezas la realizo con un soldador a 300 Cº, que puede fundir zonas del plástico sin quemarlo. El resultado es bastante bueno. Para el terminal de la turbina he utilizado otro tapón de Coca-Cola, ahora con un diámetro de salida mucho mayor...

Solo he añadido 60 cm de tubo, puesto que de momento no hay válvulas antirretorno, y por tanto el aire expirado sale por el mismo tubo de entrada, con lo cual una parte la vuelves a respirar. El sistema definitivo llevará dos válvulas, una de ellas de control eléctrico...

Otra imagen de la mascarilla, que ya está algo pegajosa por los 15 o 20 años que debe tener... Pero de momento es lo que hay en casa... Venga, sigo con el software que el sensor de presión BMP180 me está dando problemas de inercia ...Voy a tener que construir yo uno desde cero...

Una vez acabado, he estado probando mi improvisado "respirador de mascarilla", en este caso sin control de presión, debido a los repetidos problemas de precisión que me da el sensor BMP180. Pero no es un problema, ya que esta turbina da un máximo de 14,5 cmH2O, y si fuera necesario PEEP bastaría con modificar la marcha mínima del motor. Así que he relajado mis pulmones y he dejado que la máquina me los fuera llenando cíclicamente, y a los 20 minutos seguía vivo y sin síntomas de falta de aire. Por tanto, todo bien...

Continuará...

Saludos a todos

Llorens

Y yo pensando que tengo demasiada chatarra por casa, sigue asi!!!

Pues sí, tengo bastante trastos en casa, en mi "cuarto de máquinas" y en un trastero, y sobre todo en mi antiguo taller, donde confieso que cuesta encontrar espacio para poner los pies... Pero para este proyecto sólo puedo utilizar las cosas de casa... :slight_smile:

Ayer, después de decidir prescindir del BMP180, también probé un sensor de presión que tenía de hace algunos años en las cajas de materiales. Es el típico DIL de 6 patas con el tubito de entrada en la cara superior. En cuanto al tipo sólo indica las siglas MRL5G, pero no encuentro ninguna referencia a este modelo en la red. No obstante tiene la pinta de ser un puente de flexoresistencias como el más conocido MPS20N0040D...

Con un téster averigüé el conexionado interno y lo conecté a dos entradas analógicas del Arduino. Luego, corriendo un sencillo programa y dándole presión con la jeringa comprobé la respuesta en cifras en la pantalla del PC. Partiendo de valores medios de 513 sobre un máximo de 1023, y con presiones aproximadas ente -0,5 y +1 Atm, variaron +/- 40 unidades, es decir, muy poca resolución. Después lo probé en paralelo al manómetro de columna y en la variación entre -5 y +55 cmH20, las cifras no se movieron...

...Naturalmente le podría haber añadido un amplificador operacional, pero no quise complicarme la vida con otra fuente de inestabilidad y encima encontrarme con una respuesta semejante al BMP180...

En ebay naturalmente que encontré sensores a manta, incluso de los parámetros de baja presión que necesito, como el MPX10DP, de 10 KPa, más o menos 100 cmH2O, pero estamos en lo mismo, vale casi 30 €, tardaría un mes en llegar desde China y además el "reto de confinamiento" de este diseño es hacerlo con las cosas que tengo en casa...

Así que me acosté pensando en el problema, y algo debió procesar el subconsciente porque esta mañana me he despertado con la intención de construir yo mismo un sensor más adecuado a lo que necesito...

Continuará...

Saludos a todos

Llorens

...Una de las ideas es fabricar un sistema óptico de infrarrojos que detecte el movimiento de una membrana, bien por reflexión, por interrupción de haz o incluso por transmisión a través de la misma membrana si ésta es transparente ...pero otra idea, creo que más original, es utilizar uno de estos pequeños altavoces de membrana plástica de los que tengo unos cuantos de viejos teléfonos desguazados. He pensado que tapando el frontal como zona hermética, al desplazarse su membrana por el cambio de presión debería cambiar la inductancia de su bobina, ya que entraría más en el entrehierro del imán...

Así que de forma muy rápida he realizado una prueba de la última idea, convertir un mini-altavoz reciclado en un sensor sensible de presión para el margen entre 0 y 40 cmH2O...

Así que he tapado el frontal con un círculo de plástico y pegamento termofusible y le he fijado un tubito de entrada de presión, con lo cual queda un volumen hermético delimitado por el frontal de la membrana interna...

...Y bingo...!!! Conectado a un medidor de inductancias y variando la presión entre 0 y 40 cmH2O mediante la jeringa, su valor pasa de 59 a 40 uHenrios, lo cual es más de lo que esperaba y sin duda se puede aprovechar... Además no parece tener histéresis y la repetibilidad de los valores es perfecta...

El caso es que al aumentar la presión y por tanto la membrana deformarse hacia el interior, la bobina entra más en el entrehierro y la inductancia debería aumentar, pero en cambio disminuye. La explicación puede ser una falsa lectura debido al aumento de las pérdidas por corrientes de Foucault, ya que el tester utiliza corriente alterna para realizar la medida...

Vale, utilicemos otro sistema. le añado un condensador de 1,5 Kpf en paralelo para formar un circuito tanque, y buscando una resonancia la encuentro sobre los 330 Khz, en estas condiciones la variación de la amplitud con el cambio de presión es muy evidente. Las primeras pruebas me indican que para esta gama de bajas presiones este improvisado sensor puede comportarse 100 veces mejor que el BMP180...

Ahora se trataría de mejorar las respuesta y ver cómo el Arduino me puede generar la señal de alta frecuencia correspondiente sin interferir con el programa. Con los timers es posible, pero pueden interferir con las librería servo.h. Casi mejor utilizar un NE555 adicional...

Continuará...

Saludos a todos

Llorens

Regresando a mi sensor SPS (Speaker-Pressure-Sensor), en una prueba posterior he aumentado su dinámica cambiando la cámara de presión a la parte trasera de la membrana. En este caso al subir la presión la bobina sale del entrehierro, disminuyen las pérdidas, aumenta el factor de calidad Q y la respuesta es mayor, con un margen de tan sensible como de tan solo 10 cmH2O...

La señal de salida es de 0,25 Vpp a presión 0 y de 0,5 Vpp a 10 cmH2O, señal que puede doblarse con un rectificador de onda completa y entrarse directamente en una entrada analógica del Arduino, que con una Vref de 1,1 volt da una resolución más que excelente...

...Pero este sensor tiene ahora demasiada sensibilidad, y para disminuirla pruebo de cargar la membrana con un disco de plomo de 40 gr. El margen dinámico se extiende ahora de -5 a +20 cmH2O, entre 0,2 y 0,5 V. lo cual me parece una excelente respuesta...

Y no obstante, el sistema de la carga con un peso no me parece elegante, así que lo cambio nuevamente por un muelle. De esta manera no será sensible a la posición de montaje y además, variando la tensión del muelle permitirá ajustar la escala a lo que necesito, en este caso a 2 KPa (20 cmH2O)...

Continuará...

Saludos a todos

Llorens

Un poco a trompicones he seguido trabajando en el sensor de presión para el respirador Aircheap, y después de algunas variaciones ya lo tengo montado en su circuito impreso, excitado por su propio oscilador basado en un NE555...

El oscilador NE555 no es el ideal en cuanto a estabilidad a 400 Khz, pero fue imposible utilizar un Timer del Arduino, porque estaba muy cerca de los límites y además interfería en el comportamiento de algunas funciones del programa. En un modelo posterior lo que sí utilizaré sera un Atmega 328 preprogramado y montado en la placa del sensor con los componentes imprescindibles (cuarzo, condensadores, etc) sólo para generar de forma estable la señal de 400 Khz, y tal vez incluso le pueda incluir una tabla de correcciones señal>presión que me libere memoria en el Arduino o también incorporarle el código detector de señal "trigger" para la modalidad de "respiración asistida"...

Las tomas de señal para el ajuste son sencillas, una es el frecuencímetro y la otra es comprobar con el osciloscopio la forma de onda...

La frecuencia de resonancia es de 401 Khz a la presión de 0 cmH2O y de 456 Khz a 20 cmH2O. El punto de funcionamiento final lo establezco a 380 Khz, donde se obtiene una buena respuesta de subida, con valores leídos por un analogRead() de Arduino de 676 a 0 cmH2O y 972 a 20 cmH2O...

La forma de onda del circuito-tanque altavoz-condensador (1 nF) es bastante senoidal, a pesar de ser excitado mediante la onda cuadrada del NE555, y por la deformación adicional que crea el rectificador-doblador de onda completa..

Continuará...

Saludos a todos

Llorens

Otro dispositivo del Aircheap que he realizado son las válvulas antirretorno. También construidas, como no, con un coste 0 € a partir de una botella de plástico de Coca-Cola. De una parte cortando el cuello a la altura del resalte, y de la otra lijando el tapón con papel de grado creciente para conseguir una superficie lo más plana y fina posible.

Las partes de la improvisada válvula son el tapón que antes he lijado y al que he practicado un agujero central. Un disco de caucho que hará de membrana y que era uno de los apoyos antideslizantes de la caja de un viejo PC ...Y el cuello de la botella donde he insertado una cruz hecha con hilo de cobre de 1 mm, que delimitará la posición y el movimiento de la membrana...

Una vez insertada la membrana de caucho entre las dos piezas de plástico, las he soldado entre sí con calor, pero cuidando que no se deformasen, para lo cual he utilizado un soldador de temperatura regulada. Hay que ir con cuidado especialmente en el tapón rojo, que parece de PVC y funde a una temperatura bastante más baja que el plástico transparente del cuello de la botella...

Aquí se observa el disco de goma actuando como membrana de obturación, que sólo puede moverse entre el tapón y la cruz de cobre. La distancia libre debe ser como máximo de 2 mm, y puede ajustarse añadiendo con cuidado gotas de estaño a los brazos de la cruz...

La membrana de obturación ha demostrado ser muy sensible, abriendo el paso cuando el aire va del tapón rojo hacia el cuello de rosca, y cerrando al instante cuando va la revés...

Esta válvula va enroscada a la salida de la boquilla de la turbina, y a la vez, en el macho de salida es donde se enrosca su vez el acoplador del tubo flexible que va a la mascarilla. Este último acoplador tiene además la toma para el sensor de presión...

Una ampliación de la imagen anterior. El diámetro de esta válvula es suficiente para un buen paso de aire en sentido directo y a la vez causa una pequeña caída de presión al aspirar, caída que puede detectarse por software y utilizarla como trigger de la modalidad de respiración asistida...

Continuará...

Un saludo a todos

Llorens

He seguido trabajando en las válvulas antirretorno del Aircheap, en este caso en la de salida situada en la mascarilla. Básicamente he hecho lo mismo que con la anterior, un disco de caucho y una jaula de hilo de cobre que limita su movimiento junto al agujero principal de salida

La válvula instalada aunque no acabada, porque falta el control eléctrico. Observar que en este caso el disco de caucho lleva pegado un disco de plástico ABS del mismo diámetro, donde presionará el servo activado desde el programa de Arduino...

[A continuación he construido el soporte del mini-servo con chapa estañada y la he soldado a la jaula de cobre. Observar que en la válvula he fijado una varilla de acero que actúa como guía para un muelle, que será donde presionará el brazo del servo, con lo cual, según su posición, conseguiremos una fuerza proporcional que podrá cerrar la válvula graduando la presión de apertura...

Durante la aspiración esta válvula estará cerrada hasta una presión de seguridad superior a la normal, por si el paciente estornuda o falla el control de la turbina y ésta se disparase a una presión peligrosa para los pulmones del paciente. En la expiración deberá abrirse bien totalmente, o si se programa PEEP, junto a una marcha más reducida de la turbina, modulará la presión mínima a mantener...

La disposición de los elementos es sin duda mejorable, pero ahora lo importante es que funcione. Ya realizaré un segundo diseño más racionalizado en que la válvula no esté fijada a la mascarilla, si no enroscada con un racor "Coca-Cola", con una salida donde pueda fijarse un filtro antibacteriano o antiviral...

Continuará...

Saludos a todos

Llorens

En el tema Aircheap he mejorado un poco el soporte de la válvula unidireccional de control electrónico añadiendo fijaciones con cuatro minitornillos. También he cambiado el servo por otro más fiable...

Otro cambio ha sido el pequeño muelle por otro más progresivo, con lo cual la acción del servo sobre la válvula consigue un mayor margen dinámico...

El sistema de válvula unidireccional-proporcional a punto de ser usado, a falta de modificar el software para integrarlo. De todas formas, cuando pueda conseguir más tubo flexible, esta válvula irá montada sobre el soporte de la turbina y no en la mascarilla...

En la plaquita de circuito impreso he añadido dos interruptores más para manejar las distintas opciones, ya que ahora el Aircheap permitirá el control de presiones y la respiración asistida con trigger de depresión. Posteriormente añadiré el display y la botonera de configuración...

Vista interior de la mascarilla en que se observa el agujero de la válvula unidireccional de salida de espiración...

Continuará...

Saludos a todos

Llorens

Ayer construí un insonorizador básico para disminuir en lo que pueda el ruido de la turbina. Para ello utilicé, cómo no, una botella de Coca-Cola cortada en la forma adecuada y forrada interior y exteriormente con varias capas de fieltro...

La forma final permite colocar el insonorizador sin desmontar la turbina de su base, quedando fijo sólo con la flexibilidad del propio dispositivo.

En la entrada de aire he puesto además un tabique divisor, también insonorizado, para disminuir el ángulo libre de salida del ruido. Este sistema lo utilicé con éxito en el diseño, a un tamaño mucho mayor, de túneles insonorizadores que hice hace años para unas bombas de calor...

Aparte de lo anterior, también he comenzado a trabajar en el Aircheap con el sofware del modo de "respiración asistida", detectando la pequeña depresión que causa una aspiración débil y utilizándola como "trigger" para disparar un ciclo de respiración forzada. De momento utilizo "depresiones" de entre 3 y 5 cmH2O y el disparo es perfecto, pero podría mejorar la sensibilidad si pudiera aumentar la estabilidad del sensor de presión, que sufre el efecto de cierta inestabilidad de frecuencia del oscilador NE555...

Continuará...

Saludos a todos

Llorens

Ayer dediqué unas horas a solucionar el problema de inestabilidad de lecturas en el sensor de presión, causada por la excesiva deriva de frecuencia en el oscilador NE555, sustituyéndolo por un microcontrolador Atmega 328 programado sólo como generador de reloj a 380 Khz...

El 328 está insertado en un zócalo, así que una vez acabado el montaje, lo he extraído y lo que colocado en un Arduino UNO, donde le he insertado el programa y comprobado la frecuencia, para devolverlo después a la plaquita del sensor.

El programa básico de generación debe ser muy sencillo pero un tanto especial, porque en un controlador lento como el 328, como metamos órdenes de C, no vamos a conseguir generar frecuencias más allá de 50-60 Khz, y en este caso necesitamos subir hasta los 380 Khz...

...Para ello modificaremos directamente los "REGISTROS" del controlador mediante órdenes que son más de Assembler que de C, aunque se pueden utilizar directamente desde el IDE de Arduino...

// ============================================================
void setup()
  {
  noInterrupts();       // Detenemos las interrupciones
  DDRB = 0b00010000;    // Pin 12 configurado como OUT
  while(1){             // Bucle infinito
    PORTB = 0b00010000; // Pone pin 12 a HIGH
    PORTB = 0b00000000; // Pone pin 12 a LOW
    }
  }

void loop(){}
// ============================================================

1º detenemos interrupciones, 2º configuramos pin 12 como salida, y dentro de un bucle "while" infinito, 1º ponemos el pin 12 a HIGH y 2º a LOW, repitiendo el ciclo. Cada orden PORTB absorbe 2 ciclos de reloj, en total serán 4 y la frec de 16/4= 4Mhz (más o menos)...

Vale, ahora hacemos lo mismo pero insertando entre cada estado HIGH y LOW unos retardos básicos "nop" (no operación), que no hacen nada excepto tener el reloj del controlador parado por 1 ciclo, equivalente a un tiempo de 62,5 nanosegundos. La frec. sería 1/6x62,5x10^-9 = 2,6 Mhz

// ============================================================
void setup()
  {
  noInterrupts();       // Detenemos las interrupciones
  DDRB = 0b00010000;    // Pin 12 configurado como OUT
  while(1){             // Bucle infinito
    PORTB = 0b00010000; // Pone pin 12 a HIGH
    __asm__("nop\n\t"); // Espera de 62.5 nS
    PORTB = 0b00000000; // Pone pin 12 a LOW
    __asm__("nop\n\t"); // Espera de 62.5 nS
    }
  }

void loop(){}
// ============================================================

Todo esto son valores aproximados porque no he contado los ciclos de reloj que pueda absorber el bucle "while". Observamos además que lo saltos de frecuencia son ahora muy grandes, pero van a disminuir añadiendo más órdenes "nop" cuando nos aproximemos a los 380 Khz...

Con un cálculo y luego reajustando los valores, veo que con un total de 19 órdenes "nop" en cada estado HIGH y LOW, la frecuencia es de 381,027 Khz, lo cual nos va bien para lo que queremos. Por cada "nop" que quitemos subirá casi 10 Khz, lo cual provecho con 18+18 para grabar un segundo controlador 328 a 400 Khz...

void setup()
  {
  noInterrupts();
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);

  // con 19+19 nops 381,004 Khz 
  // con 18+18 nops 400,027 Khz
   
  while(1){

  PORTB = 0b00110000; // Pone pin 12 a 1
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS  
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS

  PORTB = 0b00100000; // Pone pin 12 a 0
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  __asm__("nop\n\t"); // Espera de 62.5 nS
  }
}

void loop(){}

Una vez insertado el Atmega 328 en la placa del sensor de presión, lo testeo con el frecuencímetro y me da 380,923 Khz, lo cual es solo una diferencia de 104 Hz, debida a la imprecisión del resonador cerámico del Arduino UNO, cuando aquí estoy utilizando un cuarzo de 16 Mhz...

...Y en las pruebas de medición de presiones la diferencia es brutal, ahora los valores ya no derivan en absoluto, las lecturas del "analogRead()" apenas difieren +/- 1, cuando antes era normal +/- 10 y con los minutos podía variar en 50 o 60 unidades...

Continuará...

Saludos a todos

Llorens

I've used the MPS20N0040D breakout board, which uses an ADC to amplify the signal. We wrote a tutorial on calibrating the pressure values with a manometer. Using a manometer will allow you to accurately predict pressure values. We actually found that the MPS20N0040D has quite a lot of variability across different sensors, so each should individually be calibrated. The tutorial can be found here:

MPS20N0040D Pressure Sensor Calibration with Arduino

Here's a photo of our setup:

The calibration curve looks as follows:

Here's a closer look at the MPS20N0040D breakout board: