工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
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

►コンポーネント

このプロジェクトでは、次のパーツが使用されました。

Arduino UNO、https://amzn.to/3ihYFBl

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

Max30102心拍センサー

2つのLED、https://amzn.to/3g1v5za

2つの220Ω抵抗、https://amzn.to/2OSGlBW

GY-906-BCC非接触赤外線温度センサーモジュール

❤SubscribeIt'sFreehttps://bit.ly/2C6HdAg

ご覧いただきありがとうございます。家にいて安全を確保してください...素晴らしい一日を!

#Arduinoproject #ArduinoBloodOxygen#Howto#COVID19 #BloodOxygen #ArduinoBodyTemperature #BodyTemperature

<図> <図> <図> <図> <図> <図>

コード

  • Blood_Oximeter.ino
Blood_Oximeter.ino Arduino
 #include  #include  #include  #include  #include "MAX30105.h" // sparkfunMAX3010XライブラリMAX30105particleSensor; LiquidCrystal_I2C lcd(0x27、 20,4); //#define MAX30105 // SparkfunのMAX30105ブレークアウトボードがある場合は、#defineMAX30105を試してくださいAdafruit_MLX90614mlx =Adafruit_MLX90614(); double avered =0; double aveir =0; double sumirrms =0; double sumredrms =0; int i =0; int Num =100; //このサンプリング間隔でSpO2を計算しますintTemperature; int temp; float ESpO2; //推定SpO2floatESpO2_ROMの初期値;ダブルFSpO2 =0.7; //推定SpO2doublefrateのフィルター係数=0.95; // IR /赤色LED値のローパスフィルターでACコンポーネントを排除#defineTIMETOBOOT 3000 //この時間(msec)が出力されるのを待つSpO2#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( "実行中......"); delay(3000); lcd.clear(); ESpO2 =readEEPROM();温度=EEPROM.read(6); pinMode(Greenled、OUTPUT); pinMode(Redled、OUTPUT); digitalWrite(Greenled、LOW); digitalWrite(Redled、LOW); //センサーを初期化しますwhile(!particleSensor.begin(Wire、I2C_SPEED_FAST))//デフォルトのI2Cポート、400kHzの速度を使用{Serial.println( "MAX30102が見つかりませんでした。MH-ETLIVEMAX30102の配線/電源/はんだジャンパーを確認してくださいボード。 "); // while(1); } //プロッタバイトの見栄えの良い鋸歯を感知するように設定ledBrightness =0x7F; //オプション:0 =オフから255 =50mAバイトsampleAverage =4; //オプション:1、2、4、8、16、32バイトledMode =2; //オプション:1 =赤のみ、2 =赤+ IR、3 =赤+ IR +緑//オプション:1 =IRのみ、2 =MH-ET LIVEMAX30102ボードの赤+ IR 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();} void loop(){uint32_t ir、red、green;ダブルフレッド、モミ;ダブルSpO2 =0; //ローパスフィルター処理される前の生のSpO2#ifdef USEFIFOparticleSensor.check(); //センサーをチェックし、最大3つのサンプルを読み取りますwhile(particleSensor.available()){//新しいデータがありますか#ifdef MAX30105 red =particleSensor.getFIFORed(); // SparkfunのMAX30105ir =particleSensor.getFIFOIR(); // SparkfunのMAX30105#else red =particleSensor.getFIFOIR(); // getFOFOIRがMH-ETLIVEブレークアウトボード上のMAX30102によってRedデータを出力する理由ir =particleSensor.getFIFORed(); // getFIFORedがMH-ETLIVEブレークアウトボード上のMAX30102によってIRデータを出力する理由#endifi ++;フレッド=(ダブル)レッド; fir =(double)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){//遅いarduinoシリアルプロッタのダウングラフプロット速度を間引く場合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( "。");フロート温度=particleSensor.readTemperatureF(); if(ir  FINGER_ON){Temperature =mlx.readObjectTempC(); lcd.setCursor(0,0); lcd.print( "Oxygen%="); lcd.setCursor(11,0); lcd.print(ESpO2); lcd.print( ""); lcd.print( "%"); //温度=温度+2; lcd.setCursor(0,1); lcd.print( "温度:"); lcd.print(Temperature); lcd.print( "* C"); if((ESpO2> =90)&&(Temperature <38)){digitalWrite(Redled、LOW); digitalWrite(Greenled、HIGH); } if((ESpO2 <90)||(温度> 37)){digitalWrite(Greenled、LOW); digitalWrite(Redled、HIGH); }}}} if((i%Num)==0){double R =(sqrt(sumredrms)/ avered)/(sqrt(sumirrms)/ aveir); // Serial.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; i =0;壊す; } particleSensor.nextSample(); //このサンプルは終了したので、次のサンプルに移動します// Serial.println(SpO2); } #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;バイトByteArray [4]; for(int x =0; x <4; x ++){ByteArray [x] =EEPROM.read(x); } memcpy(&ESpO2、ByteArray、4); ESpO2を返す;} 

回路図


製造プロセス

  1. DS18B20温度センサー
  2. 基本的なIoT– RaspberryPIHDC2010の方法
  3. RaspberryPi温度ロガー
  4. PythonとRaspberryPiの温度センサー
  5. ラズベリーパイ温度および光センサー
  6. ラズベリーパイ温度センサー
  7. 湿度センサーをチェックして校正する方法
  8. Arduino + RaspberryPiロボットプラットフォームの作り方
  9. グラスファイバーの作り方
  10. Solidworksでカッタウェイアニメーションを作成する方法
  11. ベアリング温度センサー|検出器