Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Sensor de oxímetro realmente casero

Componentes y suministros

Emisor de infrarrojos, 18 °
Longitud de onda entre 805 nm y 1000 nm
× 1
Fotodiodo LPT80A
El fotodiodo necesario es de amplio rango, debe poder recibir ambas señales rojas (600nm) y señales infrarrojas (940 nm).
× 1
LED de 5 mm:rojo
Longitud de onda cercana a 600 nm
× 1
Resistencia de 10k ohmios
× 1
Resistencia de 330 ohmios
× 2
Módulo de pantalla LCD Arduino DFRobot I2C 16x2
U otra pantalla lcd para mostrar los valores.
× 1
Arduino UNO
× 1
Cables de puente (genéricos)
× 1
LED de alto brillo, blanco
Tercer led opcional, ver sección de mejora del proyecto
× 1

Herramientas y máquinas necesarias

Punta de cautín, ala de gaviota

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

En este período de aislamiento, construí un oxímetro con piezas ya en casa. Después de todo, un oxímetro solo se hace con dos leds y un fotodiodo.

No soy un experto en conocimientos médicos y en esta etapa del proyecto no estoy seguro de que este trabajo tenga un valor diagnóstico, pero es un buen proyecto educativo para estudiar cómo funciona, y probablemente con algunos consejos. podría convertirse en una herramienta médica casera.

Saturación de oxígeno y COVID-19

En este período increíble de nuestra vida hemos aprendido muchas cosas sobre virus, pulmones, mascarillas quirúrgicas, jabón y lavado de manos. Todo el mundo lee sobre síntomas como tos, fiebre y dificultades respiratorias. También sabemos que una forma de medir la dificultad para respirar es leer la cantidad de oxígeno en nuestra sangre.

Esta medida se puede leer indirectamente con un dispositivo médico llamado Oxímetro . Probablemente ya lo hayas visto, es un dispositivo no invasivo que se coloca en un dedo con unas luces pulsantes que hacen el trabajo. Así:

Normalmente, cuando estás bien, tienes un porcentaje de saturación de oxígeno (SpO2) cercano o superior al 95%. Cuando la saturación desciende por debajo del 90% y tiene tos y fiebre, es un problema.

Si cualquier fabricante pudiera construir un oxímetro, descubrir una infección sería más fácil y podría ayudar a las personas a decidir ir al hospital cuando el problema realmente existe y no por un ataque de pánico.

Primero, comprenda cómo funciona el sensor de latidos

Comencé este proyecto jugando con un sensor de latido KY-039 que encontré en un sensor de kit que muchos de nosotros tenemos en casa. Como puede ver en el circuito de abajo, es solo un LED infrarrojo que enciende un fotodiodo. También hay dos resistencias para proteger el led y leer la pequeña señal del sensor.

Entonces, si no tiene un sensor KY-039, puede construir su propio sensor con pocos componentes.

El dedo se coloca entre el sensor y el fotodiodo como en esta foto (tomada originalmente de este sitio y modificada):

La luz emitida por el led infrarrojo es absorbida parcialmente por la uña, la piel y todas las demás partes de su dedo, pero no es constante porque cambia siguiendo los cambios de la sangre que corre por sus venas. Cuando su corazón late, la sangre es empujada por sus venas y cambia la absorción de luz. Podemos medir la corriente generada por el fotodiodo iluminado por la luz infrarroja que lo alcanza.

El sensor KY-039 tiene un S (señal) pin para leer ese valor cambiante.

Podemos medir la frecuencia cardíaca contando los picos de la señal

Leer un valor de una señal variable de un sensor no es tan fácil, porque hay mucho ruido, la señal es muy baja y necesitamos hacer algunos cálculos matemáticos para encontrar los buenos valores para trazar.

Tengo que agradecer esta útil publicación de Johan Ha, que explica cómo calcular el promedio de la señal y también explica cómo eliminar el ruido de una lámpara de casa (¡esa luz es un ruido!).

El truco consiste en hacer una matriz en la que presionamos un valor y soltamos un valor para hacer que el promedio de los últimos X valores leídos del sensor. También ha descrito una forma de encontrar el aumento de la señal, contando N valores crecientes. Quiero decir, cuando un valor es mayor que el valor anterior N veces, es un pico.

Usando la herramienta de trazado serial Arduino u otra herramienta serial para analizar los valores impresos en el puerto COM (como SerialPlot), y probando diferentes valores, podemos definir un número correcto N ( rise_threshold constante n el código). Si define un número demasiado grande o demasiado pequeño, puede perder algunos latidos o contar una muesca dicrótica como un ritmo.

Una vez que haya entendido cómo ajustar los picos, simplemente cuéntelos o calcule el tiempo entre una pequeña serie de latidos para determinar su BPM tasa ( latidos por minuto ).

Construyendo el oxímetro (pirateando el sensor KY-039) para encontrar la saturación de oxígeno

Nuestra sangre absorbe la luz de una manera diferente con el cambio de la longitud de onda de la luz. La luz roja ( ~ 600nm ) es mejor absorbido por la sangre que contiene más oxígeno, por lo que podemos comparar las medidas realizadas con led infrarrojos ( ~ 950nm ) con los realizados con led rojo y encontrar el porcentaje de oxígeno en nuestra sangre. Ese valor se llama Sp02% ( saturación de oxígeno capilar periférico ).

Como tengo un sensor KY-039, he decidido modificarlo. Solo tiene un led de infrarrojos, así que agregué un ROJO led, desconecte el IR dirigido desde el Vcc y conectar con un 330 ohm resistir los dos leds a dos pines diferentes de Arduino.

(Si no tiene un sensor KY-039 para modificarlo, puede construirlo, son solo un par de leds, un fotodiodo y 3 resistencias, ¡y el esquema es realmente simple!)

Aquí está el esquema del sensor modificado:

De esta forma podemos encender el IR led y leer el valor del KY-039 S pin, luego podemos apagar el IR led y encienda el RED LED y lea el valor del KY-039 S alfiler.

Aquí está el mío:

Si traza las dos señales, puede ver que los valores de IR siempre son más bajos que los valores de rojo.

Para encontrar una buena señal recuerda colocar correctamente la yema del dedo sobre el fotodiodo y los leds deben tocar la uña, cuando encuentres una posición cómoda con buena lectura en la parcela no la cambies.

Dado que las señales son bajas y el ruido es muy problemático, para obtener medidas útiles, he notado que siempre se necesita una buena luz ambiental. Por lo tanto, no mueva el dedo mientras mide y no cambie la luz, solo una sombra en el sensor podría cambiarlo todo.

¿Cómo se mide la saturación SpO2%

El nivel de saturación de oxígeno (SpO2) es la fracción de hemoglobina saturada de oxígeno en relación con la hemoglobina total y es una función de un parámetro llamado R (Encontré esta información en un artículo académico del Politécnico de Milán), que se calcula utilizando valores mínimos y máximos de las dos señales:

R =((REDmax-REDmin) / REDmin) / ((IRmax-IRmin) / IRmin)

Cada instrumento tiene su propia R y se necesita calibración para encontrar la curva (la función) que conecta R con SpO2%.

Contamos el número de picos, pero ahora necesitamos encontrar máx. y min valores de las dos curvas ( RED led y IR led).

Para realizar este trabajo, evaluamos el "período" del latido del corazón (es decir, cuántos milisegundos dura un latido) y lo dividimos por la frecuencia de muestreo para determinar cuántas muestras forman un período. La frecuencia de muestreo es en nuestro caso 40 milisegundos porque leemos el led IR durante 20 milisegundos y luego el led ROJO de otros 20 milisegundos.

El período del latido es el tiempo que pasa entre dos curvas ascendentes en la señal.

Entonces puedo analizar el último L muestras (donde L =período / 40), que he guardado en una matriz, para encontrar REDmax , REDmin , IRmax y IRmin valores.

Con valores máximos y mínimos puedo calcular R .

R, L y el período se calculan en cada latido, por lo que el cálculo de R también se realiza para cada latido.

De R a SpO2%:¿Cómo calibrar el oxímetro?

La función que vincula R con SpO2 se puede simplificar con una línea recta:

SpO2 =K * R + M

Entonces necesitamos dos puntos (dos pares de valores de SpO2 y R) para determinar K y M. La única forma de encontrar estos 2 puntos es usando otro oxímetro y leer los valores de su pantalla.

El nuevo oxímetro será la referencia, leemos el valor de SpO2 mientras medimos los valores de R de nuestro oxímetro casero.

Primero respire normalmente y lea el valor de SpO2 y R. Anótelo.

Luego intente mantener la respiración y después de 10-20 segundos leerá la SpO2 en el nuevo oxímetro disminuyendo, también debería ver el parámetro R de su oxímetro creciendo. Antes de desmayarse, anote los valores de SpO2 alcanzados y el valor de su parámetro R.

Resuelve la ecuación de segundo grado y encuentra K y M para tu oxímetro.

Ahora es posible calcular tanto bpm y SpO2 valores para cada medida de R .

También agregué una pantalla para mostrar todos los números, solo muestro valores si he encontrado al menos 5 medidas de períodos que no cambian demasiado (± 10% de la duración del período). De esta manera elimino valores que cambian demasiado que dependen de los componentes deficientes o el cambio de luces ambientales o el movimiento de los dedos.

El c valor indica que los valores mostrados se calculan con c medidas estables.

Mejora del proyecto:elimine la variabilidad de la luz ambiental

Después de unos días de jugar con mi proyecto, encontré una manera de mejorarlo.

He notado que con estos componentes de bajo costo (¡estamos usando solo leds y un fotodiodo!) Las medidas dependen demasiado de la luz ambiental y esto no es algo bueno, si queremos leer los datos correctamente en un formato real. ambiente de trabajo. Como he notado que en un día soleado los resultados son mejores que con luz nublada o por la noche cuando uso una lámpara eléctrica, he decidido agregar un tercer led, que siempre está encendido y proporciona solo luz en el dedo. .

Con este sensor de 3 leds las medidas también se toman bajo un paño negro para excluir la luz ambiental que siempre puede cambiar.

Ahora, los resultados son mejores y ya no dependen de la luz ambiental.

También tuve que volver a calibrar el oxímetro, como puede ver en el video después de unos segundos, encuentra correctamente bpm ans SpO2% :


Código

  • oxímetro-diy-ver-0.92.ino
oxímetro-diy-ver-0.92.ino Arduino
Este es el código fuente del Oxímetro de bricolaje, que está hecho con pocos componentes que un fabricante podría tener en casa.
 / * * un oxímetro de bricolaje. v.0.92 (correcciones menores) * pirateando un sensor de latidos cardíacos ky-039 o usando un led infrarrojo * un led rojo y un fotodiodo. * https://hackaday.io/project/170752-oximeter-do-it-yourself * / # include  #include  #define maxperiod_siz 80 // número máximo de muestras en un período # definir medidas 10 // número de períodos almacenados # definir samp_siz 4 // número de muestras para el promedio # definir aumento_threshold 3 // número de medidas ascendentes para determinar un pico // un cristal líquido muestra BPM LiquidCrystal_I2C lcd (0x3F, 16, 2); int T =20; // ranura milisegundos para leer un valor del sensorint sensorPin =A1; int REDLed =3; int IRLed =4; byte sym [3] [8] ={{B00000, B01010, B11111, B11111, B01110, B00100, B00000, B00000}, {B00000, B00000, B00000, B11000, B00100, B01000 , B10000, B11100}, {B00000, B00100, B01010, B00010, B00100, B00100, B00000, B00100}}; configuración vacía () {Serial.begin (9600); Serial.flush (); pinMode (sensorPin, ENTRADA); pinMode (REDLed, SALIDA); pinMode (IRLed, SALIDA); // inicializar la pantalla LCD lcd.init (); LCD luz de fondo(); // apaga los leds digitalWrite (REDLed, LOW); escritura digital (IRLed, BAJA); for (int i =0; i <8; i ++) lcd.createChar (i, sym [i]);} void loop () {bool finger_status =true; flotante leeIR [samp_siz], sumIR, lastIR, reader, start; flotante leeRED [samp_siz], sumRED, lastRED; int período, muestras; período =0; muestras =0; int samplesCounter =0; flotante leeIRMM [maxperiod_siz], readsREDMM [maxperiod_siz]; int ptrMM =0; for (int i =0; i  =samples) {samplesCounter =0; IRmax =0; IRmin =1023; REDmax =0; REDmin =1023; for (int i =0; i  IRmax) IRmax =leeIRMM [i]; if (leeIRMM [i]> 0 &&leeIRMM [i]  REDmax) REDmax =leeREDMM [i]; if (leeREDMM [i]> 0 &&leeREDMM [i]  4) {// // LA SATURACIÓN ES UNA FUNCIÓN DE R (calibración) // Y =k * x + m // kym se calculan con otro oxímetro int SpO2 =-19 * R + 112; lcd.setCursor (4,0); if (avBPM> 40 &&avBPM <220) lcd.print (String (avBPM) + ""); // else lcd.print ("---"); lcd.setCursor (4,1); si (SpO2> 70 &&SpO2 <150) lcd.print ("" + Cadena (SpO2) + "%"); // else lcd.print ("-%"); } else {if (c <3) {// si menos de 2 medidas sumar? lcd.setCursor (3,0); lcd.write (2); // bpm? lcd.setCursor (4,1); lcd.write (2); // ¿SpO2? }}}} else {// Ok, la curva está cayendo subiendo =falso; recuento_aumenta =0; lcd.setCursor (3,0); lcd.print (""); } // para compararlo con el nuevo valor y encontrar picos antes de IR =lastIR; } // el dedo está dentro // TRAZAR todo Serial.print (lastIR); Serial.print (","); Serial.print (lastRED); / * * Serial.print (","); Serial.print (R); Serial.print (","); Serial.print (IRmax); Serial.print (","); Serial.print (IRmin); Serial.print (","); Serial.print (REDmax); Serial.print (","); Serial.print (REDmin); Serial.print (","); Serial.print (avR); Serial.print (","); Serial.print (avBPM); * / Serial.println (); // manejar las matrices ptr ++; ptr% =samp_siz; } // bucle mientras 1} 

Esquemas

En mi proyecto, modifiqué un KY-039 pero ese sensor no está disponible en la biblioteca de fritzing, así que lo construí con los pocos componentes de los que está hecho, pero no encontré un fotodiodo adecuado en la biblioteca de fritzing. oxímetro-diy_oW9ZI5zQtJ.fzz Se puede hacer un oxímetro simple para leer el oxígeno en la sangre pirateando el sensor KY-039, o construyendo un sensor desde cero,

Proceso de manufactura

  1. Circuito de ahorro de energía basado en sensor infrarrojo y en funcionamiento
  2. Comprender la elección de la longitud de onda en los sistemas LiDAR
  3. Sistema de sensor de movimiento por infrarrojos de bricolaje para Raspberry Pi
  4. Sensor de movimiento con Raspberry Pi
  5. Sensor de humedad del suelo Raspberry Pi
  6. Prueba del sensor DS18B20
  7. Sensor de temperatura Raspberry Pi
  8. Telemetría del sensor 2.0.1
  9. Sensor de emoción / EEG
  10. Televisión casera B-Gone
  11. Medición de temperatura del sensor infrarrojo