Messung von Blutsauerstoff und Körpertemperatur
Komponenten und Verbrauchsmaterialien
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 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
- Einfaches IoT – RaspberryPI HDC2010 wie es geht
- Himbeer-Pi-Temperaturlogger
- Python- und Raspberry Pi-Temperatursensor
- Raspberry Pi Temperatur- und Lichtsensor
- Raspberry Pi-Temperatursensor
- So überprüfen und kalibrieren Sie einen Feuchtigkeitssensor
- So erstellen Sie eine Arduino+Raspberry Pi-Roboterplattform
- Wie man Glasfaser herstellt
- So erstellen Sie eine Cutaway-Animation in Solidworks
- Lagertemperatursensor | Detektor