Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Cómo medir el oxígeno en sangre y la temperatura corporal

Componentes y suministros

Arduino UNO
× 1
LCD I2C de 20 x 4
× 1
Sensor de frecuencia cardíaca Max30102
× 1
Dos Leds
× 1
Dos resistencias de 220Ω
× 1
Módulo de sensor de temperatura infrarrojo sin contacto GY-906-BCC
× 1
Breadboard 830
× 1

Acerca de este proyecto

Este proyecto puede detectar el valor del oxígeno en sangre y la temperatura corporal al mismo tiempo, cualquier valor inferior al valor establecido se iluminará en rojo.

Lo importante es que el módulo de oxígeno en sangre debe colocarse naturalmente con el dedo para detectarlo y no es necesario ejercer demasiada presión, de lo contrario, el valor será incorrecto.

Feliz año nuevo y diviértete con él.

► Código en GitHub (esquema y boceto):https://github.com/DKARDU/bloodoxygen

► Componentes

En este proyecto se utilizaron las siguientes partes:

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

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

Sensor de frecuencia cardíaca Max30102

Dos LED, https://amzn.to/3g1v5za

Dos resistencias de 220Ω, https://amzn.to/2OSGlBW

Módulo de sensor de temperatura infrarrojo sin contacto GY-906-BCC

❤Suscríbete es gratis https://bit.ly/2C6HdAg

Gracias por mirar, quédese en casa y esté seguro ... ¡Que tenga un gran día!

#Arduinoproject #ArduinoBloodOxygen #Cómo # COVID19 #BloodOxygen #ArduinoBodyTemperature #BodyTemperature

Código

  • Blood_Oximeter.ino
Blood_Oximeter.ino Arduino
 #include  #include  #include  #include  #include "MAX30105.h" // sparkfun MAX3010X libraryMAX30105 ParticleSensor; LiquidCrystal_I2C lcd (0x27 20,4); // # define MAX30105 // si tienes la placa de ruptura MAX30105 de Sparkfun, prueba #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; // calcular SpO2 por este intervalo de muestreoint Temperature; int temp; float ESpO2; // valor inicial de SpO2float ESpO2_ROM estimado; FSpO2 doble =0,7; // factor de filtro para SpO2double frate estimado =0,95; // filtro de paso bajo para IR / valor de LED rojo para eliminar el componente de CA # definir TIMETOBOOT 3000 // esperar este tiempo (mseg) para generar SpO2 # definir ESCALA 88.0 // ajustar para mostrar el latido del corazón y SpO2 en la misma escala # definir MUESTREO 5 // si desea ver el latido del corazón con mayor precisión, establezca MUESTREO en 1 # definir FINGER_ON 30000 // si la señal roja es más baja que esto, indica que su dedo no está en el sensor # definir USEFIFO # definir Greenled 8 # definir Redled 9void setup () {Serial.begin (115200); lcd.init (); LCD luz de fondo(); lcd.setCursor (3,1); lcd.print ("Ejecutando ......"); retraso (3000); lcd.clear (); ESpO2 =leerEEPROM (); Temperatura =EEPROM.read (6); pinMode (Greenled, SALIDA); pinMode (Redled, SALIDA); digitalWrite (Greenled, BAJO); digitalWrite (Redled, LOW); // Inicialice el sensor mientras (! ParticleSensor.begin (Wire, I2C_SPEED_FAST)) // Use el puerto I2C predeterminado, velocidad de 400kHz {Serial.println ("No se encontró el MAX30102. Verifique el cableado / puente de soldadura / alimentación en MH-ET LIVE MAX30102 Junta. "); // mientras (1); } // Configuración para detectar un diente de sierra de aspecto agradable en el byte del trazador ledBrightness =0x7F; // Opciones:0 =Off a 255 =50mA byte sampleAverage =4; // Opciones:1, 2, 4, 8, 16, 32 bytes ledMode =2; // Opciones:1 =Solo rojo, 2 =Rojo + IR, 3 =Rojo + IR + Verde // Opciones:1 =Solo IR, 2 =Rojo + IR en placa MH-ET LIVE MAX30102 int sampleRate =200; // Opciones:50, 100, 200, 400, 800, 1000, 1600, 3200 int pulseWidth =411; // Opciones:69, 118, 215, 411 int adcRange =16384; // Opciones:2048, 4096, 8192, 16384 // Configure los parámetros deseados. ParticleSensor.setup (ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange); // Configure el sensor con esta configuración. ParticleSensor.enableDIETEMPRDY (); mlx.begin ();} bucle vacío () {uint32_t ir, rojo, verde; doble fred, abeto; doble SpO2 =0; // SpO2 sin procesar antes del filtrado de paso bajo #ifdef USEFIFO ParticleSensor.check (); // Verifica el sensor, lee hasta 3 muestras while (ParticleSensor.available ()) {// Tenemos nuevos datos # ifdef MAX30105 red =ParticleSensor.getFIFORed (); // MAX30105 ir =ParticleSensor.getFIFOIR () de Sparkfun; // MAX30105 de Sparkfun # else red =partitionSensor.getFIFOIR (); // por qué getFOFOIR muestra datos rojos por MAX30102 en la placa de conexión MH-ET LIVE ir =ParticleSensor.getFIFORed (); // por qué getFIFORed datos IR de salida por MAX30102 en la placa de conexiones MH-ET LIVE # endif i ++; fred =(doble) rojo; fir =(doble) ir; avered =avered * frate + (doble) rojo * (1.0 - frate); // nivel promedio de rojo por filtro de paso bajo aveir =aveir * frate + (doble) ir * (1.0 - frate); // nivel de IR promedio por filtro de paso bajo sumredrms + =(fred - avered) * (fred - avered); // suma al cuadrado del componente alterno del nivel rojo sumirrms + =(fir - aveir) * (fir - aveir); // suma al cuadrado del componente alterno del nivel IR if ((i% MUESTREO) ==0) {// lento abajo la velocidad de trazado del gráfico para arduino Plotter serial por adelgazamiento if (millis ()> TIMETOBOOT) {float ir_forGraph =(2.0 * fir - aveir) / aveir * SCALE; float red_forGraph =(2.0 * fred - avered) / avered * ESCALA; // transición para el autoescalado del trazador serial 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 (rojo); Serial.print (","); Serial.print (ir); Serial.print ("."); temperatura de flotación =sensor de partículas.readTemperatureF (); if (ir  FINGER_ON) {Temperature =mlx.readObjectTempC (); lcd.setCursor (0,0); lcd.print ("% de oxígeno ="); lcd.setCursor (11,0); lcd.print (ESpO2); lcd.print (""); lcd.print ("%"); // Temperatura =Temperatura + 2; lcd.setCursor (0,1); lcd.print ("Temperatura:"); lcd.print (temperatura); lcd.print ("* C"); if ((ESpO2> =90) &&(Temperatura <38)) {digitalWrite (Redled, LOW); digitalWrite (Greenled, HIGH); } if ((ESpO2 <90) || (Temperatura> 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; // filtro de paso bajo // Serial.print (SpO2); Serial .print (","); Serial.println (ESpO2); sumredrms =0.0; sumirrms =0.0; i =0; descanso; } ParticleSensor.nextSample (); // Hemos terminado con esta muestra, así que pase a la siguiente muestra // Serial.println (SpO2); } #endif} void writeEEPROM (float * data) {byte ByteArray [4]; memcpy (ByteArray, datos, 4); para (int x =0; x <4; x ++) {EEPROM.write (x, ByteArray [x]); }} float readEEPROM () {float ESpO2 =85.0; byte ByteArray [4]; para (int x =0; x <4; x ++) {ByteArray [x] =EEPROM.read (x); } memcpy (&ESpO2, ByteArray, 4); return ESpO2;} 

Esquemas


Proceso de manufactura

  1. DS18B20 Sensor de temperatura
  2. IoT básico - RaspberryPI HDC2010 cómo
  3. Registrador de temperatura Raspberry Pi
  4. Sensor de temperatura Python y Raspberry Pi
  5. Sensor de temperatura y luz Raspberry Pi
  6. Sensor de temperatura Raspberry Pi
  7. Cómo comprobar y calibrar un sensor de humedad
  8. Cómo hacer una plataforma de robot Arduino + Raspberry Pi
  9. Cómo hacer fibra de vidrio
  10. Cómo hacer una animación de corte en Solidworks
  11. Sensor de temperatura del rodamiento | detector