Oxímetro de pulso de código aberto para COVID-19
Componentes e suprimentos
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 |
Ferramentas e máquinas necessárias
![]() |
| |||
![]() |
|
Aplicativos e serviços online
![]() |
| |||
![]() |
|
Sobre este projeto
Os desafios do COVID-19
COVID-19 é uma doença causada pelo vírus SARS-CoV-2 que ataca principalmente o sistema respiratório de uma pessoa. Alguns sintomas mais leves podem incluir febre, dores e calafrios, mas também podem levar a doenças mais graves, como pneumonia. Uma pessoa que tem pneumonia ou até mesmo uma leve falta de ar pode não saber quando ir ao hospital, especialmente porque começa a ficar ainda mais sobrecarregada. É por isso que criei este oxímetro de pulso de código aberto, que pode ajudar a fornecer às pessoas a ajuda de que precisam e obter informações precisas sobre sua condição atual.

Um pouco de isenção de responsabilidade
Este dispositivo / projeto não deve ser usado como uma ferramenta de diagnóstico médico precisa!
A Eletrônica
MAX30102

128x64 Pixel OLED


Arduino Nano

Construindo o dispositivo passo a passo
Aqui está uma explicação passo a passo de como construir este projeto.
1. Imprima e limpe as peças
Comece baixando cada peça da seção de anexos neste projeto e carregando-a no fatiador de sua escolha. Usei um enchimento em torno de 70-80% e suportes médios, todos com PLA. Depois que eles terminaram de imprimir, eu removi os suportes e fiz um pouco de lixamento leve para garantir que todos se encaixassem perfeitamente.




2. Solde a eletrônica
Todo o dispositivo é projetado em torno de um Arduino Nano que é montado em uma placa de perfuração de 44 por 30 mm. Primeiro, os fios são soldados aos pinos VIN, GND, SDA e SCL do sensor e, em seguida, passam por baixo da base para o Arduino Nano.

Em seguida, o conector para o OLED é conectado ao Nano e, em seguida, executado até a própria tela.

E, finalmente, todo o conjunto eletrônico é deslizado para dentro da caixa e preso com alguns parafusos de 3 mm.
3. Monte o dispositivo
Depois que os componentes eletrônicos forem inseridos, basta conectar a tela OLED à peça superior e prendê-la ao resto do chassi com alguns parafusos de 3 mm. Você pode testar seu movimento articulando suavemente a tampa para cima e para baixo.


4. Carregando o Sketch
O esboço incluído executa algumas ações para exibir a freqüência cardíaca atual do usuário e a saturação de oxigênio. Para fazer o upload, basta instalar as bibliotecas necessárias e selecionar Arduino Nano na lista de placas no menu Ferramentas e clicar em Upload.

Quanto ao esboço em si, primeiro ele inicializa o OLED e o MAX30102, relatando quaisquer erros que possam surgir. Em seguida, ele lê 100 valores para calibrar o sensor e começa a exibi-los. O dispositivo então entra em um loop onde lê 25 novos valores e calcula uma média móvel com eles. Por fim, verifica se os valores são válidos e os imprime na tela se forem.
5. Usando-o
Para usar o oxímetro de pulso, coloque a ponta do dedo sobre o sensor e feche suavemente a tampa superior. Em seguida, conecte uma fonte de alimentação e simplesmente espere até ver os dados sendo exibidos.



Código
- Código do oxímetro de pulso
Código do oxímetro de pulso C / C ++
/ * Conexões de hardware (Breakoutboard para Arduino):-5V =5V (3,3V é permitido) -GND =GND -SDA =A4 (ou SDA) -SCL =A5 (ou SCL) -INT =Não conectado O MAX30105 Breakout pode lidar com lógica I2C de 5 V ou 3,3 V. Recomendamos alimentar a placa com 5 V, mas ela também funcionará a 3,3 V. * / # Include#include "MAX30105.h" #include "spo2_algorithm.h" #include "SSD1306Ascii.h" #include "SSD1306AsciiWire .h "MAX30105 particleSensor; SSD1306AsciiWire oled; #define MAX_BRIGHTNESS 255 # se definido (__ AVR_ATmega328P__) || definido (__ AVR_ATmega168 __) // Arduino Uno não tem SRAM suficiente para armazenar 50 amostras de dados de LED IR e dados de LED vermelho no formato de 32 bits // Para resolver este problema, o MSB de 16 bits dos dados de amostra será truncado. As amostras tornam-se 16 bits data.uint16_t irBuffer [50]; // sensor LED infravermelho datauint16_t redBuffer [50]; // dados do sensor de LED vermelho # elseuint32_t irBuffer [50]; // sensor LED infravermelho datauint32_t redBuffer [50]; // dados do sensor LED vermelho # endifint32_t spo2; // SPO2 valueint8_t validSPO2; // indicador para mostrar se o cálculo de SPO2 é validint32_t heartRate; // frequência cardíaca valueint8_t validHeartRate; // indicador para mostrar se o cálculo da freqüência cardíaca é validvoid setup () {Serial.begin (115200); // inicializa a comunicação serial em 115200 bits por segundo:oled.begin (&Adafruit128x64, 0x3C); oled.setFont (Arial14); // Inicializa o sensor if (! ParticleSensor.begin (Wire, I2C_SPEED_FAST)) // Use a porta I2C padrão, velocidade de 400kHz {Serial.println (F ("MAX30105 não foi encontrado. Verifique a fiação / alimentação.")); enquanto (1); } particleSensor.setup (55, 4, 2, 200, 411, 4096); // Configure o sensor com essas configurações} void loop () {// leia as primeiras 50 amostras e determine a faixa do sinal para (byte i =0; i <50; i ++) {while (particleSensor.available () ==false ) // temos novos dados? particleSensor.check (); // Verifique o sensor para novos dados redBuffer [i] =particleSensor.getRed (); irBuffer [i] =particleSensor.getIR (); particleSensor.nextSample (); // Terminamos com este exemplo, então vamos para o próximo exemplo Serial.print (F ("red =")); Serial.print (redBuffer [i], DEC); Serial.print (F (", ir =")); Serial.println (irBuffer [i], DEC); } // calcula a freqüência cardíaca e SpO2 após as primeiras 50 amostras (primeiros 4 segundos das amostras) maxim_heart_rate_and_oxygen_saturation (irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate); // Tirando amostras continuamente de MAX30102. A frequência cardíaca e a SpO2 são calculadas a cada 1 segundo enquanto (1) {// despeja os primeiros 25 conjuntos de amostras na memória e desloca os últimos 25 conjuntos de amostras para o topo para (byte i =25; i <50; i ++) {redBuffer [i - 25] =redBuffer [i]; irBuffer [i - 25] =irBuffer [i]; } // pegue 25 conjuntos de amostras antes de calcular a freqüência cardíaca. for (byte i =25; i <50; i ++) {while (particleSensor.available () ==false) // temos novos dados? particleSensor.check (); // Verifique o sensor para novos dados redBuffer [i] =particleSensor.getRed (); irBuffer [i] =particleSensor.getIR (); particleSensor.nextSample (); // Terminamos com este exemplo, então vamos para o próximo exemplo Serial.print (F ("red =")); Serial.print (redBuffer [i], DEC); Serial.print (F (", ir =")); Serial.print (irBuffer [i], DEC); Serial.print (F (", HR =")); Serial.print (heartRate, DEC); Serial.print (F (", HRvalid =")); Serial.print (validHeartRate, DEC); Serial.print (F (", SPO2 =")); Serial.print (spo2, DEC); Serial.print (F (", SPO2Valid =")); Serial.println (validSPO2, DEC); } // Após coletar 25 novas amostras, recalcular HR e SP02 maxim_heart_rate_and_oxygen_saturation (irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate); printToScreen (); }} void printToScreen () {oled.clear (); oled.setCursor (0,0); if (validSPO2 &&validHeartRate) {oled.print (F ("HR:")); oled.println (heartRate, DEC); oled.print (F ("SPO2:")); oled.println (spo2, DEC); } else {oled.print (F ("Não é válido")); }}
Peças personalizadas e gabinetes
Esquemas

Processo de manufatura
- Um log de projeto para FirePick Delta, a MicroFactory de código aberto
- Dados digitais Arduino
- Homem de Ferro
- Encontre-me
- Arduino 3D-Printed Robotic Arm
- OXÍMETRO DE PULSO para uso de EMERGÊNCIA durante a DOENÇA DE CORONAVIRUS
- Controle do umidificador Arduino
- NeoMatrix Arduino Pong
- Health Band - Um Assistente Inteligente para Idosos
- A necessidade de código aberto na borda (eBook)