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

Monitor de Oxigenação Sanguínea e Temperatura Corporal com Arduino – Sistema Dual-Sensor

Componentes e Materiais

Componente Quantidade
Arduino UNO 1
Display LCD I2C 20x4 1
Sensor de Frequência Cardíaca MAX30102 1
LEDs (vermelho e verde) 2
Resistores 220 Ω 2
Módulo Sensor IR Temperatura Sem Contato GY-906-BCC (MLX90614) 1
Protoboard 830 pontos 1

Sobre o Projeto

Este projeto detecta simultaneamente o nível de oxigenação sanguínea (SpO2) e a temperatura corporal. Qualquer valor abaixo do limiar configurado acende o LED vermelho (alerta); caso contrário, LED verde (normal).

Importante: O sensor de oxigenação requer que o dedo seja colocado naturalmente sobre ele, sem pressão excessiva, pois isso altera a leitura.

Código no GitHub (esquema e sketch): https://github.com/DKARDU/bloodoxygen

Monitor de Oxigenação Sanguínea e Temperatura Corporal com Arduino – Sistema Dual-Sensor
Monitor de Oxigenação Sanguínea e Temperatura Corporal com Arduino – Sistema Dual-Sensor
Monitor de Oxigenação Sanguínea e Temperatura Corporal com Arduino – Sistema Dual-Sensor
Monitor de Oxigenação Sanguínea e Temperatura Corporal com Arduino – Sistema Dual-Sensor
Monitor de Oxigenação Sanguínea e Temperatura Corporal com Arduino – Sistema Dual-Sensor
Monitor de Oxigenação Sanguínea e Temperatura Corporal com Arduino – Sistema Dual-Sensor

Código (Blood_Oximeter.ino)

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <EEPROM.h>
#include "MAX30105.h"

MAX30105 particleSensor;
LiquidCrystal_I2C lcd(0x27, 20, 4);
Adafruit_MLX90614 mlx = Adafruit_MLX90614();

double avered = 0, aveir = 0, sumirrms = 0, sumredrms = 0;
int i = 0, Num = 100, Temperature, temp;
float ESpO2, ESpO2_ROM;
double FSpO2 = 0.7, frate = 0.95;

#define TIMETOBOOT 3000
#define SCALE 88.0
#define SAMPLING 5
#define FINGER_ON 30000
#define USEFIFO
#define Greenled 8
#define Redled 9

void setup() {
  Serial.begin(115200);
  lcd.init(); lcd.backlight();
  lcd.setCursor(3,1); lcd.print("Running......"); delay(3000); lcd.clear();
  ESpO2 = readEEPROM(); Temperature = EEPROM.read(6);
  pinMode(Greenled, OUTPUT); pinMode(Redled, OUTPUT);
  digitalWrite(Greenled, LOW); digitalWrite(Redled, LOW);

  while (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
    Serial.println("MAX30102 not found. Check wiring/power/solder jumper.");
  }

  byte ledBrightness = 0x7F, sampleAverage = 4, ledMode = 2;
  int sampleRate = 200, pulseWidth = 411, adcRange = 16384;
  particleSensor.setup(ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange);
  particleSensor.enableDIETEMPRDY();
  mlx.begin();
}

void loop() {
  uint32_t ir, red, green;
  double fred, fir, SpO2 = 0;

  #ifdef USEFIFO
  particleSensor.check();
  while (particleSensor.available()) {
    #ifdef MAX30105
      red = particleSensor.getFIFORed();
      ir = particleSensor.getFIFOIR();
    #else
      red = particleSensor.getFIFOIR();
      ir = particleSensor.getFIFORed();
    #endif

    i++;
    fred = (double)red; fir = (double)ir;
    avered = avered * frate + (double)red * (1.0 - frate);
    aveir = aveir * frate + (double)ir * (1.0 - frate);
    sumredrms += (fred - avered) * (fred - avered);
    sumirrms += (fir - aveir) * (fir - aveir);

    if ((i % SAMPLING) == 0) {
      if (millis() > TIMETOBOOT) {
        float ir_forGraph = (2.0 * fir - aveir) / aveir * SCALE;
        float red_forGraph = (2.0 * fred - avered) / avered * SCALE;
        if (ir_forGraph > 100.0) ir_forGraph = 100.0;
        if (ir_forGraph < 80.0) ir_forGraph = 80.0;
        if (red_forGraph > 100.0) red_forGraph = 100.0;
        if (red_forGraph < 80.0) red_forGraph = 80.0;
        Serial.print(red); Serial.print(","); Serial.print(ir); Serial.print(".");

        float temperature = particleSensor.readTemperatureF();
        if (ir < FINGER_ON) {
          temp = Temperature;
          EEPROM.write(6, temp);
          ESpO2_ROM = ESpO2; writeEEPROM(&ESpO2_ROM);
          lcd.setCursor(0,2); lcd.print("Last test: ");
          lcd.setCursor(11,2); lcd.print(ESpO2_ROM); lcd.print(" % ");
          lcd.setCursor(0,3); lcd.print("Last temp: ");
          lcd.setCursor(11,3); lcd.print(temp); lcd.print(" *C");
          break;
        }
        if (ir > FINGER_ON) {
          Temperature = mlx.readObjectTempC();
          lcd.setCursor(0,0); lcd.print("Oxygen % = ");
          lcd.setCursor(11,0); lcd.print(ESpO2); lcd.print(" % ");
          lcd.setCursor(0,1); lcd.print("Temperature: "); lcd.print(Temperature); lcd.print(" *C");
          if ((ESpO2 >= 90) && (Temperature < 38)) {
            digitalWrite(Redled, LOW); digitalWrite(Greenled, HIGH);
          }
          if ((ESpO2 < 90) || (Temperature > 37)) {
            digitalWrite(Greenled, LOW); digitalWrite(Redled, HIGH);
          }
        }
      }
    }

    if ((i % Num) == 0) {
      double R = (sqrt(sumredrms) / avered) / (sqrt(sumirrms) / aveir);
      SpO2 = -23.3 * (R - 0.4) + 100;
      ESpO2 = FSpO2 * ESpO2 + (1.0 - FSpO2) * SpO2;
      sumredrms = 0.0; sumirrms = 0.0; i = 0;
      break;
    }
    particleSensor.nextSample();
  }
  #endif
}

void writeEEPROM(float *data) {
  byte ByteArray[4]; memcpy(ByteArray, data, 4);
  for(int x = 0; x < 4; x++) EEPROM.write(x, ByteArray[x]);
}

float readEEPROM() {
  float ESpO2 = 85.0; byte ByteArray[4];
  for(int x = 0; x < 4; x++) ByteArray[x] = EEPROM.read(x);
  memcpy(&ESpO2, ByteArray, 4); return ESpO2;
}

Esquemático

Monitor de Oxigenação Sanguínea e Temperatura Corporal com Arduino – Sistema Dual-Sensor

Processo de manufatura

  1. Raspberry Pi e HDC2010: Guia Completo de Configuração I2C para Sensor de Temperatura e Umidade
  2. Construa um Registrador de Temperatura com Raspberry Pi e Sensor I2C de $5
  3. Construa um Sensor de Temperatura Remoto com Raspberry Pi e Python – Guia Passo a Passo
  4. Construa um Sistema de Monitoramento de Temperatura e Luz Multi-Sensor com Raspberry Pi e DS18B20
  5. Construa Monitor de Temperatura Doméstico com Raspberry Pi, MCP9808, InfluxDB e Grafana
  6. Verifique e Calibre Seu Sensor de Umidade para Medições Precisas
  7. Construindo um Robô com Arduino e Raspberry Pi: Guia Passo a Passo
  8. O Guia Completo da Produção de Fibra de Vidro
  9. Crie uma Animação de Corte Progressivo no SolidWorks – Tutorial Passo a Passo
  10. Sensor de Temperatura de Mancal de Precisão – Detecção e Monitoramento Precisos