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

혈액 산소 및 체온 측정 방법

구성품 및 소모품

Arduino UNO
× 1
20 x 4 I2C LCD
× 1
Max30102 심박수 센서
× 1
2개의 LED
× 1
2개의 220Ω 저항
× 1
GY-906-BCC 비접촉 적외선 온도 센서 모듈
× 1
브레드보드 830
× 1

이 프로젝트 정보

이 프로젝트는 혈액 산소와 체온의 값을 동시에 감지할 수 있으며 설정 값보다 낮은 값은 빨간색으로 켜집니다.

중요한 것은 혈액 산소 모듈이 감지를 위해 자연스럽게 손가락을 올려 놓아야 하며 너무 많은 압력을 가할 필요가 없다는 것입니다. 그렇지 않으면 값이 잘못될 것입니다.

새해 복 많이 받으시고 즐거운 시간 보내세요.

► GitHub의 코드(계획 및 스케치):https://github.com/DKARDU/bloodoxygen

► 구성요소

이 프로젝트에서 사용된 부품은 다음과 같습니다.

아두이노 UNO, https://amzn.to/3ihYFBl

20 x 4 I2C LCD, https://amzn.to/3gTMZnW

Max30102 심박수 센서

두 개의 LED, https://amzn.to/3g1v5za

2개의 220Ω 저항, https://amzn.to/2OSGlBW

GY-906-BCC 비접촉 적외선 온도 센서 모듈

❤구독은 무료입니다 https://bit.ly/2C6HdAg

시청해주셔서 감사합니다. 집에 머물면서 안전하세요... 좋은 하루 보내세요!

#Arduinoproject #ArduinoBloodOxygen #하우투 #COVID19 #BloodOxygen #ArduinoBodyTemperature #BodyTemperature

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • Blood_Oximeter.ino
  • Blood_Oximeter.inoArduino
    #include #include #include #include #include "MAX30105.h" //sparkfun MAX3010X 라이브러리MAX30105 particleSensor;(IquidCrystal_7lcd_0 20,4);//#define MAX30105 //Sparkfun의 MAX30105 브레이크아웃 보드가 있는 경우 #define MAX30105 Adafruit_MLX90614 mlx =Adafruit_MLX90614();double avered =0; double aveir =0;double sumirrms =0;double sumredrms =0;int i =0;int Num =100;//이 샘플링 간격으로 SpO2를 계산int Temperature;int temp;float ESpO2;//추정 SpO2float ESpO2_ROM의 초기 값; 이중 FSpO2 =0.7; // 추정된 SpO2double frate =0.95에 대한 필터 계수; //AC 성분을 제거하기 위한 IR/적색 LED 값에 대한 저역 통과 필터#define TIMETOBOOT 3000 // SpO2가 출력될 때까지 이 시간(msec)을 기다립니다.#define SCALE 88.0 //심장 박동과 SpO2를 동일한 스케일로 표시하도록 조정#define SAMPLING 5 //심장 박동을 더 정확하게 보고 싶다면 SAMPLING을 1로 설정#define FINGER_ON 30000 // 빨간색 신호가 이보다 낮으면 손가락이 센서에 있지 않음을 나타냅니다#define USEFIFO#define Greenled 8#define Redled 9void setup(){ Serial.begin(115200); lcd.init(); lcd.backlight(); lcd.setCursor(3,1); lcd.print("실행 중......"); 지연(3000); lcd.clear(); ESPO2 =readEEPROM(); 온도 =EEPROM.read(6); 핀모드(녹색, 출력); 핀모드(빨간색, 출력); digitalWrite(녹색,낮음); 디지털 쓰기(빨간색, 낮음); // 센서 초기화 while (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //기본 I2C 포트 사용, 400kHz 속도 { Serial.println("MAX30102를 찾을 수 없습니다. MH-ET LIVE MAX30102에서 배선/전원/땜납 점퍼를 확인하세요. 판자. "); //동안(1); } //플로터 바이트에서 멋진 톱니 모양을 감지하도록 설정 ledBrightness =0x7F; //옵션:0=255로 끄기=50mA 바이트 sampleAverage =4; //옵션:1, 2, 4, 8, 16, 32바이트 ledMode =2; //옵션:1 =빨간색만, 2 =빨간색 + IR, 3 =빨간색 + IR + 녹색 //옵션:1 =IR만, 2 =빨간색 + IR on MH-ET LIVE MAX30102 보드 int sampleRate =200; //옵션:50, 100, 200, 400, 800, 1000, 1600, 3200 int pulseWidth =411; //옵션:69, 118, 215, 411 int adcRange =16384; //옵션:2048, 4096, 8192, 16384 // 원하는 매개변수 설정 particleSensor.setup(ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange); //이 설정으로 센서를 구성합니다. particleSensor.enableDIETEMPRDY(); mlx.begin();} 무효 루프(){ uint32_t ir, 빨간색, 녹색; 더블 프레드, 전나무; 이중 SpO2 =0; //로우 패스 필터링 전의 원시 SpO2 #ifdef USEFIFO particleSensor.check(); //센서를 확인하고 최대 3개의 샘플을 읽는 동안 (particleSensor.available()) {//새로운 데이터가 있습니까?#ifdef MAX30105 red =particleSensor.getFIFORed(); //Sparkfun의 MAX30105 ir =particleSensor.getFIFOIR(); //Sparkfun의 MAX30105#else red =particleSensor.getFIFOIR(); // getFOFOIR이 MH-ET LIVE 브레이크아웃 보드에서 MAX30102에 의해 Red 데이터를 출력하는 이유 ir =particleSensor.getFIFORed(); //getFIFORed가 MH-ET LIVE 브레이크아웃 보드에서 MAX30102로 IR 데이터를 출력하는 이유#endif i++; 프레드 =(이중)빨간색; 전나무 =(이중)ir; avered =avered * frate + (double)red * (1.0 - frate);//저역 통과 필터에 의한 평균 적색 레벨 aveir =aveir * frate + (double)ir * (1.0 - frate); //저역 통과 필터에 의한 평균 IR 레벨 sumredrms +=(fred - avered) * (fred - avered); //적색 레벨의 대체 구성요소의 제곱합 sumirrms +=(fir - aveir) * (fir - aveir);//IR 레벨의 대체 구성요소의 제곱합 if ((i % SAMPLING) ==0) {//slow thin out if ( millis()> TIMETOBOOT) { float ir_forGraph =(2.0 * fir - aveir) / aveir * SCALE; float red_forGraph =(2.0 * fred - 평균) / 평균 * 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(빨간색); Serial.print(","); Serial.print(ir);Serial.print("."); 부동 온도 =particleSensor.readTemperatureF(); if (ir  FINGER_ON){ 온도 =mlx.readObjectTempC(); lcd.setCursor(0,0); lcd.print("산소 % ="); lcd.setCursor(11,0); lcd.print(ESpO2); lcd.print(" "); lcd.print("% "); // 온도 =온도+2; lcd.setCursor(0,1); lcd.print("온도:"); lcd.print(온도); lcd.print(" *C"); if((ESpO2>=90) &&(온도 <38)){ digitalWrite(빨간색,낮음); 디지털 쓰기(녹색, 높음); } if((ESpO2 <90) || (온도> 37)){ digitalWrite(녹색,낮음); 디지털 쓰기(빨간색, 높음); } } } } if ((i % 숫자) ==0) { 이중 R =(sqrt(sumredrms) / 평균) / (sqrt(sumirrms) / aveir); // 직렬.println(R); SpO2 =-23.3 * (R - 0.4) + 100; //http://ww1.microchip.com/downloads/jp/AppNotes/00001525B_JP.pdf ESpO2 =FSpO2 * ESpO2 + (1.0 - FSpO2) * SpO2;//저역 통과 필터 // Serial.print(SpO2);Serial .print(",");Serial.println(ESpO2); sumredrms =0.0; sumirrms =0.0; 나는 =0; 부서지다; } 입자센서.nextSample(); //이 샘플은 끝났으므로 다음 샘플로 이동합니다. // Serial.println(SpO2); }#endif}무효 writeEEPROM(float *data){ 바이트 ByteArray[4]; memcpy(바이트 배열, 데이터, 4); for(int x =0; x <4; x++) { EEPROM.write(x, ByteArray[x]); } } float readEEPROM(){ float ESPO2 =85.0; 바이트 ByteArray[4]; for(int x =0; x <4; x++) { ByteArray[x] =EEPROM.read(x); } memcpy(&ESpO2, 바이트 배열, 4); ESPO2 반환;}

    회로도


    제조공정

    1. 기본 IoT – RaspberryPI HDC2010 방법
    2. 라즈베리 파이 온도 로거
    3. Python 및 Raspberry Pi 온도 센서
    4. Raspberry Pi 온도 및 광 센서
    5. 라즈베리 파이 온도 센서
    6. 습도 센서를 확인하고 보정하는 방법
    7. Arduino+Raspberry Pi 로봇 플랫폼을 만드는 방법
    8. 유리 섬유를 만드는 방법
    9. Solidworks에서 장면 전환 애니메이션을 만드는 방법
    10. 베어링 온도 센서 | 탐지기