Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Sensor Oxímetro Realmente Caseiro

Componentes e suprimentos

Emissor infravermelho, 18 °
Comprimento de onda entre 805 nm e 1000 nm
× 1
Fotodiodo LPT80A
O fotodiodo necessário é de amplo alcance, deve ser capaz de receber os dois sinais vermelhos (600 nm) e sinais infravermelhos (940 nm).
× 1
LED de 5 mm:Vermelho
Comprimento de onda próximo a 600 nm
× 1
Resistor 10k ohm
× 1
Resistor 330 ohm
× 2
Módulo DFRobot I2C 16x2 Arduino LCD
Ou outro monitor LCD para mostrar os valores.
× 1
Arduino UNO
× 1
Fios de jumpers (genérico)
× 1
LED de alto brilho, branco
Terceiro led opcional, consulte a seção de melhoria do projeto
× 1

Ferramentas e máquinas necessárias

Ponta de ferro de soldar, asa de gaivota

Aplicativos e serviços online

Arduino IDE

Sobre este projeto


Nesse período de isolamento, construí um oxímetro com peças já em casa. Afinal, um oxímetro é feito apenas de dois leds e um fotodiodo.

Não sou um especialista em conhecimentos médicos e nesta fase do projeto não tenho certeza se este trabalho tem um valor diagnóstico, mas é um bom projeto educacional para estudar como funciona, e provavelmente com algumas dicas ele pode se tornar uma ferramenta médica caseira.





Saturação de oxigênio e COVID-19


Neste período incrível da nossa vida, aprendemos muitas coisas sobre vírus, pulmões, máscaras cirúrgicas, sabonete e lavagem das mãos. Todo mundo lê sobre sintomas como tosse, febre e dificuldades respiratórias. Também sabemos que uma forma de medir a dificuldade de respirar é lendo a quantidade de oxigênio no sangue.

Esta medida pode ser lida indiretamente com um dispositivo médico chamado Oxímetro . Você provavelmente já viu, é um dispositivo não invasivo que é colocado em um dedo com algumas luzes pulsantes que fazem o trabalho. Como isso:

Normalmente, quando você está bem, você tem uma porcentagem de saturação de oxigênio (SpO2) próxima ou maior que 95%. Quando a saturação desce abaixo de 90% e você tem tosse e febre, é um problema.

Se algum fabricante pudesse construir um oxímetro, descobrir uma infecção seria mais fácil e poderia ajudar as pessoas a decidirem ir ao hospital quando o problema realmente existe e não para um ataque de pânico.





Primeiro, entenda como o sensor de pulsação funciona


Comecei este projeto brincando com um sensor de batimentos cardíacos KY-039 que encontrei em um sensor de kit que muitos de nós temos em casa. Como você pode ver no circuito abaixo, é apenas um led infravermelho que acende um fotodiodo. Existem também dois resistores para proteger o led e ler o pequeno sinal do sensor.

Portanto, se você não tem um sensor KY-039, pode construir seu próprio sensor com poucos componentes.

O dedo é colocado entre o sensor e o fotodiodo como nesta foto (originalmente tirada deste site e modificada):

A luz emitida pelo led infravermelho é parcialmente absorvida pela unha, pela pele e por todas as outras partes do dedo, mas não é constante porque muda com as mudanças do sangue que corre nas veias. Quando o seu coração bate, o sangue é empurrado para as veias e a absorção da luz muda. Podemos medir a corrente gerada pelo fotodiodo iluminado pela luz infravermelha que o atinge.

O sensor KY-039 tem um S (sinal) pino para ler esse valor em mudança.





Podemos medir a taxa de batimentos cardíacos contando os picos do sinal


Ler um valor de um sinal variável de um sensor não é tão fácil, porque há muito ruído, o sinal é muito baixo e precisamos fazer algumas contas para encontrar os bons valores para traçar.

Tenho que agradecer este útil post de Johan Ha, que explica como calcular a média do sinal e também explica como remover o ruído feito por uma lâmpada doméstica (aquela luz é um ruído!).

O truque é fazer uma matriz na qual empurramos um valor e o eliminamos para fazer a média dos últimos X valores lidos do sensor. Ele também descreve uma maneira de encontrar o aumento do sinal, contando N valores crescentes. Quer dizer, quando um valor é maior do que o valor anterior para N vezes, é um pico.

Usando a ferramenta Arduino Serial plot ou outra ferramenta serial para analisar valores impressos na porta COM (como SerialPlot), e tentando valores diferentes, podemos definir um número N correto ( rise_threshold constante no código). Se você definir um número muito grande ou muito pequeno, você pode perder algumas batidas ou contar um entalhe dicrótico como uma batida.

Depois de entender como refinar os picos, basta contá-los ou calcular o tempo entre uma pequena série de batidas para determinar seu BPM taxa ( batidas por minuto )





Construindo o oxímetro (hackeando o sensor KY-039) para encontrar a saturação de oxigênio


Nosso sangue absorve luz de uma maneira diferente com a mudança do comprimento de onda da luz. A luz vermelha ( ~ 600nm ) é melhor absorvido pelo sangue que contém mais oxigênio, então podemos comparar as medidas feitas com LED infravermelho ( ~ 950nm ) com os feitos com led vermelho e encontre a porcentagem de oxigênio no sangue. Esse valor é denominado Sp02% ( saturação de oxigênio capilar periférico )

Como tenho um sensor KY-039, decidi modificá-lo. Ele tem apenas um LED infravermelho, então adicionei um VERMELHO led, desligue o IR liderado do Vcc e conecte com um 330 ohm resistor os dois leds a dois pinos diferentes do Arduino.

(Se você não tem um sensor KY-039 para modificar, você pode construí-lo, são apenas alguns leds, um fotodiodo e 3 resistores, e o esquema é muito simples!)

Aqui está o esquema do sensor modificado:

Desta forma, podemos ligar o IR levou e leu o valor do KY-039 S pin, então podemos desligar o IR levou e ligue o VERMELHO led, e leia o valor do KY-039 S alfinete.

Aqui está o meu:

Se você plotar os dois sinais, poderá ver que os valores de IV são sempre inferiores aos valores de vermelho.

Para encontrar um bom sinal lembre-se de colocar a ponta do dedo corretamente no fotodiodo e os leds devem tocar na unha, quando encontrar uma posição confortável com boa leitura no plot não altere.

Como os sinais são baixos e o ruído é muito problemático, para obter medidas úteis, percebi que uma boa luz ambiente é sempre necessária. Portanto, não mova o dedo durante a medição e não altere a luz, apenas uma sombra no sensor pode mudar tudo.





Como é medida a saturação de SpO2%


O nível de saturação de oxigênio (SpO2) é a fração da hemoglobina saturada de oxigênio em relação à hemoglobina total e é função de um parâmetro denominado R (Encontrei essas informações em um artigo acadêmico do Politécnico de Milão), que é calculado usando os valores mínimo e máximo dos dois sinais:

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

Cada instrumento tem seu próprio R e é necessária calibração para encontrar a curva (a função) que conecta R com SpO2%.

Contamos o número de picos, mas agora precisamos encontrar max e min valores das duas curvas ( VERMELHO led e IR liderada).

Para realizar esse trabalho, avaliamos o "período" do batimento cardíaco (ou seja, quantos milissegundos dura um batimento) e o dividimos pela taxa de amostragem para determinar quantas amostras fazem um período. A taxa de amostragem em nosso caso é de 40 milissegundos porque lemos o led IR por 20 milissegundos e o led VERMELHO por mais 20 milissegundos.

O período da batida é o tempo que passa entre duas curvas crescentes no sinal.

Para que eu possa analisar o último L amostras (onde L =período / 40), que salvei em uma matriz, para encontrar REDmax , REDmin , IRmax e IRmin valores.

Com valores máximos e mínimos, posso calcular R .

R, L e o período são calculados a cada batida, então o cálculo de R também é feito para cada batida.





De R a SpO2%:como calibrar o oxímetro?


A função que vincula R com SpO2 pode ser simplificado com uma linha reta:

SpO2 =K * R + M

Portanto, precisamos de dois pontos (dois pares de valores de SpO2 e R) para determinar K e M. A única maneira de encontrar esses 2 pontos é usar outro oxímetro e ler os valores em seu visor.

O novo oxímetro será a referência, lemos o valor de SpO2 enquanto medimos os valores de R do nosso oxímetro caseiro.

Primeira respiração normalmente e leia o valor de SpO2 e R. Anote-o.

Em seguida, tente manter a respiração e após 10-20 segundos você lerá a SpO2 no novo oxímetro diminuindo, você também deverá ver o parâmetro R do seu oxímetro crescendo. Antes de desmaiar, anote os valores de SpO2 alcançados e o valor do seu parâmetro R.

Resolva a equação do 2º grau e encontre K e M para o seu oxímetro.

Agora é possível calcular tanto bpm e SpO2 valores para cada medida de R .

Também adicionei um display para mostrar todos os números, mostro os valores apenas se encontrar pelo menos 5 medidas de períodos que não mudam muito (± 10% da duração do período). Desta forma, eu removo valores que mudam muito, dependendo de componentes inadequados ou da mudança das luzes ambientais ou do movimento dos dedos.

O c valor indica que os valores mostrados são calculados com c medidas estáveis.





Melhoria do projeto:remover a variabilidade da luz ambiente


Depois de alguns dias brincando com meu projeto, descobri uma maneira de melhorá-lo.

Percebi que com esses componentes de baixo custo (estamos usando apenas leds e um foto diodo!) As medidas são muito dependentes da luz ambiente e isso não é uma coisa boa, se quisermos ler os dados corretamente em um ambiente real ambiente de trabalho. Já que notei que em um dia de sol os resultados são melhores do que com luz nublada ou à noite quando uso uma lâmpada elétrica, decidi adicionar um terceiro led, que está sempre aceso e fornece apenas luz no dedo .

Com este sensor de 3 leds as medidas também são tomadas sob um pano preto para excluir a luz ambiente que pode sempre mudar.

Agora, os resultados são melhores e não dependem mais da luz ambiente.

Também tive que recalibrar o oxímetro, como você pode ver no vídeo depois de alguns segundos, ele encontra bpm ans SpO2% :



Código

  • oxímetro-diy-ver-0.92.ino
oxímetro-diy-ver-0.92.ino Arduino
Este é o código-fonte do Oxímetro DIY, que é feito com poucos componentes que um fabricante poderia ter em casa.
 / * * um oxímetro diy. v.0.92 (pequenas correções) * hackeando um sensor de pulsação ky-039 ou usando um led infravermelho * um led vermelho e um fotodiodo. * https://hackaday.io/project/170752-oximeter-do-it-yourself * / # include  #include  #define maxperiod_siz 80 // número máximo de amostras em um período # definir medidas 10 // número de períodos armazenados # define samp_siz 4 // número de amostras para média # define rise_threshold 3 // número de medidas crescentes para determinar um pico // um cristal líquido exibe BPM LiquidCrystal_I2C lcd (0x3F, 16, 2); int T =20; // slot milissegundos para ler um valor do 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}}; configuração vazia () {Serial.begin (9600); Serial.flush (); pinMode (sensorPin, INPUT); pinMode (REDLed, OUTPUT); pinMode (IRLed, OUTPUT); // inicializa o LCD lcd.init (); lcd.backlight (); // desliga os leds digitalWrite (REDLed, LOW); digitalWrite (IRLed, LOW); para (int i =0; i <8; i ++) lcd.createChar (i, sym [i]);} void loop () {bool finger_status =true; float lêIR [samp_siz], sumIR, lastIR, leitor, início; float lêRED [samp_siz], sumRED, últimoRED; período interno, amostras; período =0; amostras =0; int samplesCounter =0; float lêIRMM [maxperiod_siz], lêREDMM [maxperiod_siz]; int ptrMM =0; para (int i =0; i  =samples) {samplesCounter =0; IRmax =0; IRmin =1023; REDmax =0; REDmin =1023; para (int i =0; i  IRmax) IRmax =lêIRMM [i]; if (lêIRMM [i]> 0 &&lêIRMM [i]  REDmax) REDmax =lêREDMM [i]; if (lêREDMM [i]> 0 &&lêREDMM [i]  4) {// // SATURAÇÃO É UMA FUNÇÃO DE R (calibração) // Y =k * x + m // k e m são calculados com outro 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); if (SpO2> 70 &&SpO2 <150) lcd.print ("" + String (SpO2) + "%"); // else lcd.print ("-%"); } else {if (c <3) {// se menos que 2 medidas somam? lcd.setCursor (3,0); lcd.write (2); // bpm? lcd.setCursor (4,1); lcd.write (2); // SpO2? }}}} else {// Ok, a curva está caindo e subindo =false; ascensão_contagem =0; lcd.setCursor (3,0); lcd.print (""); } // para compará-lo com o novo valor e encontrar picos antes de IR =lastIR; } // dedo está dentro // PLOTAR tudo 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 (); // manipula os arrays ptr ++; ptr% =samp_siz; } // faz um loop enquanto 1} 

Esquemas

No meu projeto, modifiquei um KY-039, mas esse sensor não está disponível na biblioteca de fritização, então eu o construí com os poucos componentes de que é feito, mas não encontrei um fotodiodo adequado na biblioteca de fritização. oximeter-diy_oW9ZI5zQtJ.fzzUm oxímetro simples para ler o oxigênio no sangue pode ser feito hackeando o sensor KY-039 ou construindo um sensor do zero,

Processo de manufatura

  1. Circuito de economia de energia baseado em sensor infravermelho e funcionamento
  2. Compreendendo a escolha do comprimento de onda em sistemas LiDAR
  3. Sistema de sensor de movimento infravermelho faça você mesmo para Raspberry Pi
  4. Sensor de movimento usando Raspberry Pi
  5. Sensor de umidade do solo Raspberry Pi
  6. Teste o sensor DS18B20
  7. Sensor de temperatura Raspberry Pi
  8. Telemetria do Sensor 2.0.1
  9. Sensor de emoção / EEG
  10. Medições de temperatura por sensor infravermelho