Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Messung von Blutsauerstoff und Körpertemperatur

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
20 x 4 I2C-LCD
× 1
Max30102 Herzfrequenzsensor
× 1
Zwei LEDs
× 1
Zwei 220Ω Widerstände
× 1
GY-906-BCC Berührungsloses Infrarot-Temperatursensormodul
× 1
Breadboard 830
× 1

Über dieses Projekt

Dieses Projekt kann gleichzeitig den Wert von Blutsauerstoff und Körpertemperatur erfassen. Jeder Wert, der unter dem eingestellten Wert liegt, leuchtet rot auf.

Wichtig ist, dass das Blutsauerstoffmodul zur Erkennung natürlich mit dem Finger darauf platziert werden muss und nicht zu viel Druck ausgeübt werden muss, da sonst der Wert falsch ist.

Frohes neues Jahr und viel Spaß damit.

► Code in GitHub (Schema und Skizze):https://github.com/DKARDU/bloodoxygen

► Komponenten

Die folgenden Teile wurden in diesem Projekt verwendet:

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

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

Max30102 Herzfrequenzsensor

Zwei LEDs, https://amzn.to/3g1v5za

Zwei 220Ω Widerstände, https://amzn.to/2OSGlBW

GY-906-BCC Berührungsloses Infrarot-Temperatursensormodul

❤Kostenlos abonnieren https://bit.ly/2C6HdAg

Danke fürs Zuschauen. Bleiben Sie zu Hause und seien Sie sicher ... Einen schönen Tag noch!

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

Code

  • Blood_Oximeter.ino
Blood_Oximeter.inoArduino
#include #include #include #include #include "MAX30105.h" //sparkfun MAX3010X BibliothekMAX30105 PartikelSensor;LiquidCrystal_I2C 20,4);//#define MAX30105 //Wenn Sie das Breakout-Board MAX30105 von Sparkfun haben, versuchen Sie es mit #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 nach diesem Abtastintervall berechnenint Temperatur;int temp;float ESpO2;//Anfangswert des geschätzten SpO2float ESpO2_ROM; doppelter FSpO2 =0,7; // Filterfaktor für geschätzte SpO2double-Frate =0,95; // Tiefpassfilter für IR / rote LED-Werte, um die Wechselstromkomponente zu eliminieren #define TIMETOBOOT 3000 // diese Zeit (ms) warten, um SpO2 auszugeben #define SCALE 88.0 // Anpassen, um Herzschlag und SpO2 in derselben Skala anzuzeigen #define SAMPLING 5 // Wenn Sie den Herzschlag genauer sehen möchten, setzen Sie SAMPLING auf 1 #define FINGER_ON 30000 // Wenn das rote Signal niedriger ist, zeigt dies an, dass sich Ihr Finger nicht auf dem Sensor befindet #define USEFIFO #define Greenled 8#define Redled 9void setup () { Serial.begin (115200); lcd.init(); LCD-Rücklicht(); lcd.setCursor(3,1); lcd.print("Läuft......"); Verzögerung (3000); lcd.clear(); ESpO2 =readEEPROM(); Temperatur =EEPROM.read(6); PinMode (Grüne LED, AUSGANG); PinMode (Redled, AUSGANG); digitalWrite (Grünled, NIEDRIG); digitalWrite (Redled, LOW); // Sensor initialisieren während (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Standard-I2C-Port verwenden, 400kHz-Geschwindigkeit {Serial.println("MAX30102 wurde nicht gefunden. Bitte überprüfen Sie die Verdrahtung/Strom/Lötbrücke bei MH-ET LIVE MAX30102 Gremium. "); // während (1); } // Setup, um einen gut aussehenden Sägezahn auf dem Plotter zu erkennen byte ledBrightness =0x7F; //Optionen:0=Aus bis 255=50mA Byte SampleAverage =4; //Optionen:1, 2, 4, 8, 16, 32 Byte ledMode =2; //Optionen:1 =nur Rot, 2 =Rot + IR, 3 =Rot + IR + Grün //Optionen:1 =nur IR, 2 =Rot + IR auf der MH-ET LIVE MAX30102 Platine int sampleRate =200; //Optionen:50, 100, 200, 400, 800, 1000, 1600, 3200 int pulseWidth =411; //Optionen:69, 118, 215, 411 int adcRange =16384; //Optionen:2048, 4096, 8192, 16384 // Stellen Sie die gewünschten Parameter ein. // Sensor mit diesen Einstellungen konfigurieren PartikelSensor.enableDIETEMPRDY(); mlx.begin();}void loop(){ uint32_t ir, red , green; doppelter Fred, Tanne; doppeltes SpO2 =0; // Raw SpO2 vor Tiefpassfilterung #ifdef USEFIFO PartikelSensor.check (); // Überprüfen Sie den Sensor, lesen Sie bis zu 3 Proben während (particleSensor.available ()) {//haben wir neue Daten # ifdef MAX30105 rot =PartikelSensor.getFIFORed (); // Sparkfuns MAX30105 ir =PartikelSensor.getFIFOIR (); // Sparkfuns MAX30105 #else red =PartikelSensor.getFIFOIR (); // warum getFOFOIR rote Daten von MAX30102 auf dem MH-ET LIVE Breakout Board ausgeben ir =PartikelSensor.getFIFORed(); // warum getFIFORed IR-Daten von MAX30102 auf MH-ET LIVE Breakout Board ausgeben #endif i++; fred =(doppelt)rot; Tanne =(doppelt)ir; gemittelt =gemittelt * frate + (double) red * (1.0 - frate); // durchschnittlicher Rotpegel durch Tiefpassfilter aveir =aveir * frate + (double)ir * (1.0 - frate); // durchschnittlicher IR-Pegel durch Tiefpassfilter sumredrms +=(fred - gemittelt) * (fred - gemittelt); //Quadratsumme der alternativen Komponente des roten Pegels sumirrms +=(tanne - aveir) * (tanne - aveir); // Quadratsumme der alternativen Komponente des IR-Pegels if ((i % SAMPLING) ==0) {//slow Down-Graph-Plotgeschwindigkeit für Arduino Serieller Plotter durch Ausdünnen if (Millis ()> TIMETOBOOT) { float ir_forGraph =(2,0 * Tanne - Aveir) / Aveir * SCALE; float red_forGraph =(2.0 * fred - gemittelt) / gemittelt * SCALE; // Trankation für die automatische Skalierung des seriellen Plotters 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 (rot); Serial.print (","); Serial.print (ir); Serial.print ( "."); Schwimmertemperatur =PartikelSensor.readTemperatureF(); if (ir  FINGER_ON){ Temperatur =mlx.readObjectTempC(); lcd.setCursor(0,0); lcd.print("Sauerstoff % ="); lcd.setCursor(11,0); lcd.print (ESpO2); lcd.print(" "); lcd.print("%"); // Temperatur =Temperatur+2; lcd.setCursor(0,1); lcd.print("Temperatur:"); lcd.print (Temperatur); lcd.print(" *C"); if ((ESpO2>=90) &&(Temperatur <38)) { DigitalWrite (Redled, LOW); digitalWrite (grün, HOCH); aufrechtzuerhalten. Wenn ((ESpO2 <90) || (Temperatur> 37)) { DigitalWrite (Grünled, NIEDRIG); digitalWrite (rot, HOCH); } } } } if ((i % Num) ==0) { double R =(sqrt (sumredrms) / gemittelt) / (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; // Tiefpassfilter // Serial.print (SpO2); Serial .print(",");Seriell.println(ESpO2); Summeredrms =0,0; Summen =0,0; ich =0; brechen; } PartikelSensor.nextSample(); // Wir sind mit diesem Beispiel fertig, also gehen Sie zum nächsten Beispiel // Serial.println (SpO2); }#endif}void writeEEPROM(float *data){ byte ByteArray[4]; memcpy(ByteArray, Daten, 4); for(int x =0; x <4; x++) { EEPROM.write (x, ByteArray[x]); }} Float readEEPROM () { Float ESpO2 =85,0; Byte-ByteArray[4]; for(int x =0; x <4; x++) { ByteArray[x] =EEPROM.read(x); } memcpy(&ESpO2, ByteArray, 4); ESpO2 zurückgeben}

Schaltpläne


Herstellungsprozess

  1. Einfaches IoT – RaspberryPI HDC2010 wie es geht
  2. Himbeer-Pi-Temperaturlogger
  3. Python- und Raspberry Pi-Temperatursensor
  4. Raspberry Pi Temperatur- und Lichtsensor
  5. Raspberry Pi-Temperatursensor
  6. So überprüfen und kalibrieren Sie einen Feuchtigkeitssensor
  7. So erstellen Sie eine Arduino+Raspberry Pi-Roboterplattform
  8. Wie man Glasfaser herstellt
  9. So erstellen Sie eine Cutaway-Animation in Solidworks
  10. Lagertemperatursensor | Detektor