제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 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="코드">
#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. 열 센서 회로란 무엇입니까? 온도 센서 회로는 열 센서 내에 존재합니다. 온도가 상승하여 특정 값을 초과하면 깜박이는 LED 또는 부저를 통해 알려줍니다. 예를 들어 연기 감지기 경보에서 경고 경보 장치로 작동한다고 말할 수 있습니다. 저항 온도 감
고정밀 온도 측정과 넓은 전압 범위로 정확한 온도 센서를 찾는 것은 쉽지 않습니다. 종종 초보자는 DS18B20을 이상적인 옵션으로 생각합니다. 그러나 그들은 MCP9808 센서의 모범적인 기능을 가진 사용하기 쉬운 센서를 간과하는 경향이 있습니다. https://depositphotos.com/325693808/stock-photo-digital-thermometer-temperature-sensor-ds18b20.html (디지털 온도 센서 DS18B20) 그렇다면 MCP9808 센서가 다른 센서 중에서 눈에 띄는 이유는