Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Hoe bloedzuurstof te meten en lichaamstemperatuur te meten

Componenten en benodigdheden

Arduino UNO
× 1
20 x 4 I2C LCD
× 1
Max30102 hartslagsensor
× 1
Twee leds
× 1
Twee 220Ω weerstanden
× 1
GY-906-BCC contactloze infrarood temperatuursensormodule
× 1
Broodplank 830
× 1

Over dit project

Dit project kan de waarde van bloedzuurstof en lichaamstemperatuur tegelijkertijd detecteren, elke waarde die lager is dan de ingestelde waarde zal rood oplichten.

Het belangrijkste is dat de bloedzuurstofmodule op natuurlijke wijze met uw vinger erop moet worden geplaatst voor detectie en dat u niet te veel druk hoeft uit te oefenen, anders is de waarde verkeerd.

Gelukkig nieuwjaar en veel plezier ermee.

► Code in GitHub (schema en schets):https://github.com/DKARDU/bloodoxygen

► Componenten

In dit project zijn de volgende onderdelen gebruikt:

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

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

Max30102 Hartslagsensor

Twee leds, https://amzn.to/3g1v5za

Twee 220Ω weerstanden, https://amzn.to/2OSGlBW

GY-906-BCC contactloze infrarood temperatuursensormodule

❤Abonneer je gratis https://bit.ly/2C6HdAg

Bedankt voor het kijken, Blijf thuis en wees veilig... Fijne dag verder!

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

Code

  • Blood_Oximeter.ino
Blood_Oximeter.inoArduino
#include #include #include #include #include "MAX30105.h" //sparkfun MAX3010X bibliotheekMAX30105 partikelSensor;LiquidCrystal_I27, lcd(0x) 20,4);//#define MAX30105 //als je Sparkfun's MAX30105 breakout board hebt, probeer dan #define MAX30105 Adafruit_MLX90614 mlx =Adafruit_MLX90614();double avered =0; dubbele aveir =0;dubbele sumirrms =0;dubbele sumredrms =0;int i =0;int Num =100;//bereken SpO2 met dit bemonsteringsintervalint Temperatuur;int temp;float ESPO2;//beginwaarde van geschatte SpO2float ESPO2_ROM; dubbele FSpO2 =0,7; // filterfactor voor geschatte SpO2double frate =0,95; //laagdoorlaatfilter voor IR/rode LED-waarde om AC-component te elimineren#define TIMETOBOOT 3000 // wacht op deze tijd (msec) om SpO2 uit te voeren#define SCALE 88.0 //aanpassen om hartslag en SpO2 op dezelfde schaal weer te geven#define SAMPLING 5 //als u de hartslag nauwkeuriger wilt zien, stelt u SAMPLING in op 1#define FINGER_ON 30000 // als het rode signaal lager is dan dit, geeft dit aan dat uw vinger niet op de sensor zit#define USEFIFO#define Greenled 8#define Redled 9void setup(){ Serial.begin(115200); lcd.init(); lcd.achtergrondverlichting(); lcd.setCursor(3,1); lcd.print("Loopt......"); vertraging (3000); lcd.wissen(); ESPO2 =leesEEPROM(); Temperatuur =EEPROM.lezen (6); pinMode (groen, UITGANG); pinMode (Rood, UITGANG); digitalWrite (groen, LAAG); digitalWrite (Rood, LAAG); // Initialiseer sensor terwijl (!particleSensor.begin (Wire, I2C_SPEED_FAST)) //Gebruik standaard I2C-poort, 400 kHz-snelheid { Serial.println ("MAX30102 is niet gevonden. Controleer de bedrading / voeding / soldeerjumper op MH-ET LIVE MAX30102 bord. "); // terwijl (1); } //Setup om een ​​mooi ogende zaagtand te voelen op de plotter byte ledBrightness =0x7F; //Opties:0=Uit tot 255=50mA byte monsterGemiddelde =4; //Opties:1, 2, 4, 8, 16, 32 byte ledMode =2; //Opties:1 =alleen rood, 2 =rood + IR, 3 =rood + IR + groen //Opties:1 =alleen IR, 2 =rood + IR op MH-ET LIVE MAX30102-kaart int sampleRate =200; //Opties:50, 100, 200, 400, 800, 1000, 1600, 3200 int pulseWidth =411; //Opties:69, 118, 215, 411 int adcRange =16384; //Opties:2048, 4096, 8192, 16384 // Stel de gewenste parameters in particleSensor.setup (ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange); // Configureer de sensor met deze instellingen particleSensor.enableDIETEMPRDY(); mlx.begin();}void loop(){ uint32_t ir, rood , groen; dubbele fred, spar; dubbele SpO2 =0; //ruwe SpO2 vóór laagdoorlaatfilter #ifdef USEFIFO partikelSensor.check(); //Controleer de sensor, lees tot 3 voorbeelden terwijl (particleSensor.available()) {//do we have new data#ifdef MAX30105 red =partikelSensor.getFIFORed(); //Sparkfun's MAX30105 ir =partikelSensor.getFIFOIR(); //Sparkfun's MAX30105#else red =particleSensor.getFIFOIR(); // waarom getFOFOIR-uitvoer Rode gegevens door MAX30102 op MH-ET LIVE breakout-bord ir =particleSensor.getFIFORed (); // waarom getFIFORed IR-gegevens uitvoert door MAX30102 op MH-ET LIVE breakout-board # endif i ++; fred =(dubbel)rood; spar =(dubbel)ir; avered =avered * frate + (dubbel)rood * (1,0 - frate);//gemiddeld roodniveau door laagdoorlaatfilter aveir =aveir * frate + (dubbel)ir * (1,0 - frate); // gemiddeld IR-niveau door laagdoorlaatfilter sumredrms +=(fred - gemiddeld) * (fred - gemiddeld); // kwadratische som van alternatieve component van rood niveau sumirrms +=(fir - aveir) * (fir - aveir);// kwadratische som van alternatieve component van IR-niveau if ((i % SAMPLING) ==0) {//slow down grafiek plotsnelheid voor arduino Seriële plotter door uitdunnen als ( millis ()> TIMETOBOOT) { float ir_forGraph =(2.0 * fir - aveir) / aveir * SCALE; float red_forGraph =(2,0 * fred - gemiddeld) / gemiddeld * SCHAAL; //trancatie voor automatische schaling van de seriële plotter als ( 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 (rood); Serieel.print(","); Serial.print(ir);Serial.print("."); float-temperatuur =deeltjessensor.readTemperatureF(); if (ir  FINGER_ON){Temperatuur =mlx.readObjectTempC(); lcd.setCursor(0,0); lcd.print("Zuurstof% ="); lcd.setCursor(11,0); lcd.afdruk (ESpO2); lcd.print(" "); lcd.print("%"); // Temperatuur =Temperatuur+2; lcd.setCursor(0,1); lcd.print("Temperatuur:"); lcd.print (Temperatuur); lcd.print(" *C"); if ((ESpO2>=90) &&(Temperatuur <38)){ digitalWrite (Rood, LAAG); digitalWrite (groen, HOOG); } if((ESpO2 <90) || (Temperatuur> 37)){ digitalWrite(Greenled,LOW); digitalWrite (Rood, HOOG); } } } } if ((i % Num) ==0) { dubbele R =(sqrt(sumredrms) / avered) / (sqrt(sumirrms) / aveir); // Serieel.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;//laagdoorlaatfilter // Serial.print(SpO2);Serial .print(",");Serial.println(ESpO2); sumredrms =0,0; sumirrms =0,0; ik =0; pauze; } partikelSensor.nextSample(); // We zijn klaar met dit voorbeeld, dus ga naar het volgende voorbeeld // 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; byteByteArray[4]; for(int x =0; x <4; x++) {ByteArray[x] =EEPROM.read(x); } memcpy(&ESpO2, ByteArray, 4); retourneer ESPO2;}

Schema's


Productieproces

  1. DS18B20-temperatuursensor
  2. Basis IoT – RaspberryPI HDC2010 hoe
  3. Raspberry Pi Temperature Logger
  4. Python- en Raspberry Pi-temperatuursensor
  5. Raspberry Pi temperatuur- en lichtsensor
  6. Raspberry Pi-temperatuursensor
  7. Een vochtigheidssensor controleren en kalibreren
  8. Hoe maak je een Arduino+Raspberry Pi-robotplatform
  9. Hoe maak je glasvezel
  10. Hoe maak je een Cutaway-animatie in Solidworks
  11. Lagertemperatuursensor | detector