Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Comment mesurer l'oxygène dans le sang et la température corporelle

Composants et fournitures

Arduino UNO
× 1
20 x 4 LCD I2C
× 1
Capteur de fréquence cardiaque Max30102
× 1
Deux Leds
× 1
Deux résistances 220Ω
× 1
Module de capteur de température infrarouge sans contact GY-906-BCC
× 1
Planche à pain 830
× 1

À propos de ce projet

Ce projet peut détecter la valeur de l'oxygène dans le sang et la température corporelle en même temps, toute valeur inférieure à la valeur définie s'allumera en rouge.

La chose importante est que le module d'oxygène sanguin doit être naturellement placé votre doigt dessus pour la détection, et pas besoin de mettre trop de pression, sinon la valeur sera fausse.

Bonne année et amusez-vous bien.

► Code dans GitHub (schéma et croquis) :https://github.com/DKARDU/bloodoxygen

► Composants

Les pièces suivantes ont été utilisées dans ce projet :

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

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

Capteur de fréquence cardiaque Max30102

Deux Leds, https://amzn.to/3g1v5za

Deux résistances 220Ω, https://amzn.to/2OSGlBW

Module de capteur de température infrarouge sans contact GY-906-BCC

S'abonner C'est Gratuit https://bit.ly/2C6HdAg

Merci d'avoir regardé, restez à la maison et soyez prudent... Bonne journée !

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

Code

  • Blood_Oximeter.ino
Blood_Oximeter.inoArduino
#include #include #include #include #include "MAX30105.h" //sparkfun MAX3010X libraryMAX30105 particulesSensor;LiquidCrystal_I2C lcd( 20,4);//#define MAX30105 //si vous avez la carte de dérivation MAX30105 de Sparkfun, essayez #define MAX30105 Adafruit_MLX90614 mlx =Adafruit_MLX90614();double avered =0; double aveir =0;double sumirrms =0;double sumirrms =0;int i =0;int Num =100;//calculer SpO2 par cet intervalle d'échantillonnageint Température;int temp;float ESpO2;//valeur initiale de SpO2 estimée flotter ESpO2_ROM; double FSpO2 =0,7 ; //facteur de filtrage pour le double frate SpO2 estimé =0,95 ; // filtre passe-bas pour la valeur de la LED IR/rouge pour éliminer le composant AC#define TIMETOBOOT 3000 // attendez ce temps (msec) pour produire la SpO2#define SCALE 88,0 //ajustez pour afficher le rythme cardiaque et la SpO2 dans la même échelle#define SAMPLING 5 //si vous voulez voir les battements cardiaques plus précisément, réglez SAMPLING sur 1#define FINGER_ON 30000 // si le signal rouge est inférieur à cela, cela indique que votre doigt n'est pas sur le capteur#define USEFIFO#define Greenled 8#define Redled 9void setup(){ Serial.begin(115200); lcd.init(); LCD rétro-éclairage(); lcd.setCursor(3,1) ; lcd.print("En cours d'exécution......"); retard (3000); lcd.clear(); ESPO2 =lectureEEPROM(); Température =EEPROM.read(6) ; pinMode(Greenled,OUTPUT); pinMode (rouge, SORTIE); digitalWrite(Greenled,LOW); digitalWrite (rouge, FAIBLE); // Initialiser le capteur pendant (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Utiliser le port I2C par défaut, vitesse 400 kHz { Serial.println ("MAX30102 n'a pas été trouvé. Veuillez vérifier le câblage/alimentation/cavalier de soudure sur MH-ET LIVE MAX30102 Conseil. "); //pendant (1); } //Configuration pour détecter une belle dent de scie sur l'octet du traceur ledBrightness =0x7F; //Options :0 = Désactivé à 255 =50 mA octet sampleAverage =4 ; //Options :1, 2, 4, 8, 16, 32 octets ledMode =2 ; //Options :1 =Rouge uniquement, 2 =Rouge + IR, 3 =Rouge + IR + Vert //Options :1 =IR uniquement, 2 =Rouge + IR sur la carte MH-ET LIVE MAX30102 int sampleRate =200 ; //Options :50, 100, 200, 400, 800, 1000, 1600, 3200 largeur d'impulsion int =411 ; //Options :69, 118, 215, 411 int adcRange =16384 ; //Options :2048, 4096, 8192, 16384 // Configurez les paramètres souhaités.ParticuleSensor.setup(ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange); //Configurez le capteur avec ces paramètres particulesSensor.enableDIETEMPRDY(); mlx.begin();}void loop(){ uint32_t ir, red , green; double fred, sapin; double SpO2 =0 ; //SpO2 brut avant le filtrage passe-bas #ifdef USEFIFO particulesSensor.check(); //Vérifiez le capteur, lisez jusqu'à 3 échantillons tandis que (particleSensor.available()) {//avons-nous de nouvelles données#ifdef MAX30105 red =particuleSensor.getFIFORed(); //Le MAX30105 de Sparkfun ir =particuleSensor.getFIFOIR(); //Sparkfun's MAX30105#else red =particuleSensor.getFIFOIR(); //pourquoi getFOFOIR produit des données rouges par MAX30102 sur la carte de dérivation MH-ET LIVE ir =particulesSensor.getFIFORed(); //pourquoi getFIFORed produit des données IR par MAX30102 sur la carte de dérivation MH-ET LIVE#endif i++ ; fred =(double)rouge; sapin =(double)ir; moyenne =moyenne * frate + (double)rouge * (1,0 - frate);//niveau de rouge moyen par filtre passe-bas aveir =aveir * frate + (double)ir * (1,0 - frate); //niveau IR moyen par le filtre passe-bas sumredrms +=(fred - avered) * (fred - avered); //somme carrée de la composante alternative du niveau rouge sumirrms +=(sapin - aveir) * (sapin - aveir);//somme carrée de la composante alternative du niveau IR if ((i % SAMPLING) ==0) {//lent vitesse de traçage du graphique vers le bas pour le traceur série arduino par thin out if ( millis()> TIMETOBOOT) { float ir_forGraph =(2.0 * sapin - aveir) / aveir * SCALE; float red_forGraph =(2,0 * fred - moyenné) / moyenné * ÉCHELLE ; //trancation pour la mise à l'échelle automatique du traceur série if ( ir_forGraph> 100.0) ir_forGraph =100.0; si ( ir_forGraph <80,0) ir_forGraph =80,0 ; if ( red_forGraph> 100.0 ) red_forGraph =100.0; si ( red_forGraph <80,0 ) red_forGraph =80,0 ; // Serial.print(rouge); Serial.print(","); Serial.print(ir);Serial.print("."); température flottante =particuleSensor.readTemperatureF(); if (ir  FINGER_ON){ Température =mlx.readObjectTempC(); lcd.setCursor(0,0); lcd.print("Oxygène % ="); lcd.setCursor(11,0) ; lcd.print(ESpO2) ; lcd.print(" "); lcd.print("% "); // Température =Température+2; lcd.setCursor(0,1) ; lcd.print("Température :"); lcd.print (température); lcd.print(" *C"); if((ESpO2>=90) &&(Température <38)){ digitalWrite(Redled,LOW); digitalWrite(Greenled,HIGH); } if((ESpO2 <90) || (Température> 37)){ digitalWrite(Greenled,LOW); digitalWrite (rouge, ÉLEVÉ); } } } } 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;//filtre passe-bas // Serial.print(SpO2);Série .print(",");Série.println(ESpO2); sumredrms =0,0 ; sumirrms =0,0 ; je =0 ; Pause; } particuleSensor.nextSample(); //Nous avons terminé avec cet exemple, alors passez à l'échantillon suivant // 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 ; octet ByteArray[4] ; for(int x =0; x <4; x++) { ByteArray[x] =EEPROM.read(x); } memcpy(&ESpO2, ByteArray, 4); renvoyer l'ESpO2 ;}

Schémas


Processus de fabrication

  1. IdO de base – RaspberryPI HDC2010 comment
  2. Enregistreur de température Raspberry Pi
  3. Capteur de température Python et Raspberry Pi
  4. Capteur de température et de luminosité Raspberry Pi
  5. Capteur de température Raspberry Pi
  6. Comment vérifier et étalonner un capteur d'humidité
  7. Comment créer une plate-forme robotique Arduino+Raspberry Pi
  8. Comment fabriquer de la fibre de verre
  9. Comment faire une animation en coupe dans Solidworks