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

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Componentes e Materiais

Arduino Nano R3 1
Sensor de Pulso e Frequência Cardíaca Maxim MAX30102 1
Display OLED I2C 128x64 Gravity (DFRobot) 1

Ferramentas Necessárias

Aplicativos e Serviços Online

Sobre o Projeto

Os Desafios da COVID-19

A COVID-19 é uma doença causada pelo vírus SARS-CoV-2 que ataca principalmente o sistema respiratório. Sintomas mais leves incluem febre, dores e calafrios, mas pode levar a condições mais sérias como pneumonia. Uma pessoa com pneumonia ou até falta de ar leve pode não saber quando ir ao hospital, especialmente quando os hospitais começam a ficar sobrecarregados. Por isso criei este oxímetro de pulso open-source, que pode ajudar a obter a ajuda necessária e informações precisas sobre a condição atual.

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Um Aviso Importante

Este dispositivo/projeto NÃO deve ser usado como ferramenta de diagnóstico médico preciso!

A Eletrônica

MAX30102

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

OLED 128x64 Pixel

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Arduino Nano

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Construindo o Dispositivo Passo a Passo

1. Imprima e Limpe as Peças

Comece baixando cada peça da seção de anexos do projeto e carregando no seu slicer preferido. Usei preenchimento de 70-80% e suportes médios, tudo com PLA. Após impressão, removi suportes e lixei levemente para garantir encaixe perfeito.

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

2. Solde a Eletrônica

O dispositivo é projetado em torno de um Arduino Nano montado em uma perfboard de 44mm x 30mm. Primeiro, soldam-se fios nos pinos VIN, GND, SDA e SCL do sensor e passam por baixo da peça base até o Arduino Nano.

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Em seguida, o conector do OLED é ligado ao Nano e passa até o display.

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Por fim, toda a montagem eletrônica é inserida na carcaça e fixada com alguns parafusos de 3mm.

3. Monte o Dispositivo

Após inserir a eletrônica, basta prender a tela OLED à tampa superior e fixá-la ao resto do chassi com parafusos de 3mm. Teste o movimento articulando a tampa suavemente.

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

4. Carregando o Sketch

O sketch incluído realiza ações para exibir frequência cardíaca e saturação de oxigênio do usuário. Para carregar, instale as bibliotecas necessárias, selecione Arduino Nano no menu Ferramentas > Placa e clique em Carregar.

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Quanto ao sketch: primeiro inicializa o OLED e MAX30102, reportando erros. Depois lê 100 valores para calibrar o sensor e começa a exibi-los. O dispositivo entra em loop lendo 25 novos valores e calculando média móvel. Por fim, verifica se valores são válidos e imprime na tela se forem.

5. Usando

Para usar o oxímetro, coloque a ponta do dedo sobre o sensor e feche suavemente a tampa. Conecte uma fonte de energia e aguarde até ver os dados sendo exibidos.

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Código

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 aceita 5V ou 3.3V I2C. Recomendamos alimentar com 5V mas roda em 3.3V.
 */
#include <Wire.h>
#include "MAX30105.h"
#include "spo2_algorithm.h"
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"

MAX30105 particleSensor;
SSD1306AsciiWire oled;

#define MAX_BRIGHTNESS 255

#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
// Arduino Uno não tem SRAM suficiente para 50 amostras de IR e red em 32-bit
// Solução: truncar 16-bit MSB dos dados amostrados. Amostras viram 16-bit.
uint16_t irBuffer[50];  // dados sensor LED infravermelho
uint16_t redBuffer[50]; // dados sensor LED vermelho
#else
uint32_t irBuffer[50];
uint32_t redBuffer[50];
#endif

int32_t spo2;        // valor SPO2
int8_t validSPO2;    // indicador se cálculo SPO2 é válido
int32_t heartRate;   // valor frequência cardíaca
int8_t validHeartRate; // indicador se cálculo FC é válido

void setup() {
  Serial.begin(115200);
  oled.begin(&Adafruit128x64, 0x3C);
  oled.setFont(Arial14);
  
  // Inicializa sensor
  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) { // Porta I2C padrão, 400kHz
    Serial.println(F("MAX30105 não encontrado. Verifique ligação/alimentação."));
    while (1);
  }
  particleSensor.setup(55, 4, 2, 200, 411, 4096); // Configura sensor
}

void loop() {
  // Lê primeiras 50 amostras e determina faixa do sinal
  for (byte i = 0; i < 50; i++) {
    while (particleSensor.available() == false) 
      particleSensor.check();
    redBuffer[i] = particleSensor.getRed();
    irBuffer[i] = particleSensor.getIR();
    particleSensor.nextSample();
    Serial.print(F("red="));
    Serial.print(redBuffer[i], DEC);
    Serial.print(F(", ir="));
    Serial.println(irBuffer[i], DEC);
  }
  
  // Calcula FC e SpO2 após primeiras 50 amostras (primeiros 4 segundos)
  maxim_heart_rate_and_oxygen_saturation(irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate);
  
  // Continuamente amostra MAX30102. FC e SpO2 calculados a cada 1 segundo
  while (1) {
    // Descarte primeiras 25 amostras na memória e desloque últimas 25 para topo
    for (byte i = 25; i < 50; i++) {
      redBuffer[i - 25] = redBuffer[i];
      irBuffer[i - 25] = irBuffer[i];
    }
    
    // Coleta 25 novas amostras antes de calcular FC
    for (byte i = 25; i < 50; i++) {
      while (particleSensor.available() == false)
        particleSensor.check();
      redBuffer[i] = particleSensor.getRed();
      irBuffer[i] = particleSensor.getIR();
      particleSensor.nextSample();
      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 25 novas amostras, recalcula 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("FC: "));
    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

Arquivos para impressão 3D disponíveis na seção de anexos do projeto original.

Esquemáticos

Oxímetro de Pulso Open-Source DIY para COVID-19: Construção com Arduino

Processo de manufatura

  1. Log do Projeto FirePick Delta: Construindo uma MicroFactory Open-Source com OpenPnP
  2. Dados Digital com Arduino: Gere Números Aleatórios 1-6 em LCD 16x2
  3. Construa um Homem de Ferro com Arduino: Componentes, Sensores e Guia Passo a Passo
  4. Find Me: Localizador Inteligente de Objetos com Arduino e Bluetooth
  5. Construa um Braço Robótico 3D Impresso Funcional com Arduino – Guia Passo a Passo
  6. Oxímetro de Pulso Portátil para Uso Emergencial Durante COVID-19
  7. Controlador de Umidificador DIY com Arduino e Relé – Configuração Segura de Alta Tensão
  8. Jogo Pong Neon em Matriz NeoPixel com Arduino Nano
  9. Health Band: Pulseira Inteligente para Monitoramento de Idosos com Arduino Nano e DPS310
  10. Por Que Código Aberto Impulsiona Inovação na Borda — eBook Essencial