산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 혈중 산소 & 체온 모니터: 듀얼 센서 시스템 제작

부품 및 소모품

부품수량
아두이노 우노 (Arduino UNO)1
20x4 I2C LCD1
MAX30102 심박/산소포화도 센서1
LED 2개 (적색, 녹색 등)1세트
220Ω 저항 2개1세트
GY-906-BCC 비접촉 적외선 온도 센서 (MLX90614)1
브레드보드 830 포인트1

프로젝트 소개

혈중 산소 포화도(SpO2)와 체온을 동시에 측정하여 설정값 미만 시 적색 LED 경고, 정상 시 녹색 LED 점등하는 건강 모니터링 장치입니다.

주요 특징

아두이노 혈중 산소 & 체온 모니터: 듀얼 센서 시스템 제작

깃허브 저장소

코드 및 회로도: https://github.com/DKARDU/bloodoxygen

소스 코드 (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;
int 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.");
  }
  
  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 + fred * (1.0 - frate);
    aveir = aveir * frate + fir * (1.0 - frate);
    sumredrms += (fred - avered) * (fred - avered);
    sumirrms += (fir - aveir) * (fir - aveir);
    
    if ((i % SAMPLING) == 0) {
      if (millis() > TIMETOBOOT) {
        // 시리얼 플로터용 그래프 데이터 출력
        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;  // SpO2 계산 공식
      ESpO2 = FSpO2 * ESpO2 + (1.0 - FSpO2) * SpO2;  // 로우패스 필터
      sumredrms = sumirrms = 0.0; i = 0; break;
    }
    particleSensor.nextSample();
  }
  #endif
}

void writeEEPROM(float *data) { ... }
float readEEPROM() { ... }

회로도

아두이노 혈중 산소 & 체온 모니터: 듀얼 센서 시스템 제작

제조공정

  1. 라즈베리 파이 & HDC2010: I2C 온습도 센서 완전 설정 가이드
  2. 5달러 I2C 센서로 라즈베리 파이 온도 로거 만들기
  3. 라즈베리 파이와 파이썬으로 원격 온도 센서 만들기 – 단계별 가이드
  4. 라즈베리 파이 & DS18B20으로 다중 센서 온도 & 조도 모니터링 시스템 구축
  5. MCP9808, InfluxDB, Grafana로 라즈베리 파이 홈 온도 모니터 구축하기
  6. 습도 센서 검증 및 보정으로 정밀 측정 달성하기
  7. 라즈베리 파이와 아두이노로 로봇 만들기: 단계별 통합 가이드
  8. 유리 섬유 생산 공정 완벽 가이드
  9. SolidWorks에서 프로그레시브 컷어웨이 애니메이션 만들기 - 단계별 튜토리얼
  10. 정밀 베어링 온도 센서/검출기(BTD): 원리, 설치, SKF 제품군