Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Как измерить кислород в крови и температуру тела

Компоненты и расходные материалы

Arduino UNO
× 1
ЖК-дисплей I2C 20 x 4
× 1
Датчик частоты пульса Max30102
× 1
Два светодиода
× 1
Два сопротивления 220 Ом
× 1
Модуль бесконтактного инфракрасного датчика температуры GY-906-BCC
× 1
Макет 830
× 1

Об этом проекте

Этот проект может определять значение кислорода в крови и температуру тела одновременно, любое значение ниже установленного будет гореть красным.

Важно то, что модуль кислорода в крови должен быть естественным образом приложен к нему пальцем для обнаружения, и не нужно слишком сильно нажимать, иначе значение будет неправильным.

С Новым годом и получайте удовольствие.

► Код в GitHub (схема и эскиз):https://github.com/DKARDU/bloodoxygen

► Компоненты

В этом проекте были использованы следующие части:

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

ЖК-дисплей 20 x 4 I2C, https://amzn.to/3gTMZnW

Датчик частоты пульса Max30102

Два светодиода, https://amzn.to/3g1v5za

Два сопротивления 220 Ом, https://amzn.to/2OSGlBW

Модуль бесконтактного инфракрасного датчика температуры GY-906-BCC

❤Подписаться бесплатно https://bit.ly/2C6HdAg

Спасибо за просмотр, оставайтесь дома и будьте в безопасности ... Удачного дня!

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

Код

  • Blood_Oximeter.ino
Blood_Oximeter.ino Arduino
 #include  #include  #include  #include  #include «MAX30105.h» // sparkfun MAX3010X libraryMAX30105 ParticleSensor; 20,4); // # define MAX30105 // если у вас есть коммутационная плата MAX30105 от Sparkfun, попробуйте #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 по этому интервалу выборки int Temperature; int temp; float ESpO2; // начальное значение расчетного SpO2float ESpO2_ROM; двойной FSpO2 =0,7; // коэффициент фильтрации для оценки SpO2double frate =0,95; // фильтр нижних частот для ИК / красного светодиода значение для исключения компонента переменного тока # define TIMETOBOOT 3000 // ожидание этого времени (мс) для вывода SpO2 # define SCALE 88.0 // настройка для отображения сердцебиения и SpO2 в одном масштабе # define SAMPLING 5 // если вы хотите более точно видеть сердцебиение, установите SAMPLING на 1 # define FINGER_ON 30000 // если красный сигнал ниже этого значения, это означает, что ваш палец не на датчике # define USEFIFO #define Greenled 8 # define Redled 9void setup () {Serial.begin (115200); lcd.init (); lcd.backlight (); lcd.setCursor (3,1); lcd.print ("Выполняется ......"); задержка (3000); lcd.clear (); ESpO2 =чтение EEPROM (); Температура =EEPROM.read (6); pinMode (Greenled, ВЫХОД); pinMode (Redled, ВЫХОД); digitalWrite (зеленый, низкий); digitalWrite (Redled, LOW); // Инициализируем датчик в то время как (! ParticleSensor.begin (Wire, I2C_SPEED_FAST)) // Использовать порт I2C по умолчанию, скорость 400 кГц {Serial.println ("MAX30102 не найден. Пожалуйста, проверьте перемычку проводки / питания / пайки на MH-ET LIVE MAX30102 доска. "); // while (1); } // Настройка распознавания красивой пилы на байте плоттера ledBrightness =0x7F; // Опции:от 0 =выкл. До 255 =50 мА байт sampleAverage =4; // Опции:1, 2, 4, 8, 16, 32 байта ledMode =2; // Параметры:1 =только красный, 2 =красный + ИК, 3 =красный + ИК + зеленый // Параметры:1 =только ИК, 2 =красный + ИК на плате MH-ET LIVE MAX30102 int sampleRate =200; // Параметры:50, 100, 200, 400, 800, 1000, 1600, 3200 int pulseWidth =411; // Параметры:69, 118, 215, 411 int adcRange =16384; // Параметры:2048, 4096, 8192, 16384 // Настройте требуемые параметры ParticleSensor.setup (ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange); // Настраиваем датчик с этими настройками ParticleSensor.enableDIETEMPRDY (); mlx.begin ();} void loop () {uint32_t ir, красный, зеленый; двойной фред, пихта; двойной SpO2 =0; // необработанный SpO2 перед фильтрацией нижних частот #ifdef USEFIFO particleSensor.check (); // Проверяем датчик, считываем до 3-х образцов while (particleSensor.available ()) {// есть ли у нас новые данные # ifdef MAX30105 red =particleSensor.getFIFORed (); // MAX30105 Sparkfun ir =particleSensor.getFIFOIR (); // MAX30105 Sparkfun # else red =ParticleSensor.getFIFOIR (); // почему getFOFOIR выводит данные красного цвета от MAX30102 на коммутационной плате MH-ET LIVE ir =particleSensor.getFIFORed (); // почему getFIFORed выводит данные IR от MAX30102 на коммутационной плате MH-ET LIVE # endif i ++; fred =(двойной) красный; fir =(двойной) ir; avered =avered * frate + (double) red * (1.0 - frate); // средний уровень красного по фильтру нижних частот aveir =aveir * frate + (double) ir * (1.0 - frate); // средний уровень ИК-излучения по фильтру нижних частот sumredrms + =(fred - avered) * (fred - avered); // квадратная сумма альтернативной составляющей уровня красного sumirrms + =(fir - aveir) * (fir - aveir); // квадратная сумма альтернативной составляющей уровня IR if ((i% SAMPLING) ==0) {// медленно скорость построения графика вниз для последовательного плоттера Arduino с помощью утончения if (millis ()> TIMETOBOOT) {float ir_forGraph =(2.0 * fir - aveir) / aveir * SCALE; float red_forGraph =(2.0 * fred - авер.) / авер. * МАСШТАБ; // транкация для автомасштабирования последовательного плоттера if (ir_forGraph> 100.0) ir_forGraph =100.0; если (ir_forGraph <80.0) ir_forGraph =80.0; если (red_forGraph> 100.0) red_forGraph =100.0; если (red_forGraph <80.0) red_forGraph =80.0; // Serial.print (красный); Serial.print (","); Serial.print (ir); Serial.print ("."); Серийный принт ("."); температура с плавающей запятой =ParticleSensor.readTemperatureF (); если (ir  FINGER_ON) {Температура =mlx.readObjectTempC (); lcd.setCursor (0,0); lcd.print ("Кислород% ="); lcd.setCursor (11,0); lcd.print (ESpO2); lcd.print (""); lcd.print ("%"); // Температура =Температура + 2; lcd.setCursor (0,1); lcd.print ("Температура:"); lcd.print (Температура); lcd.print ("* C"); если ((ESpO2> =90) &&(Температура <38)) {digitalWrite (Redled, LOW); digitalWrite (зеленый, высокий); } if ((ESpO2 <90) || (Температура> 37)) {digitalWrite (Greenled, LOW); digitalWrite (Redled, HIGH); }}}} если ((i% Num) ==0) {двойной 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; // фильтр нижних частот // Serial.print (SpO2); Serial .print (","); Serial.println (ESpO2); sumredrms =0,0; sumirrms =0,0; я =0; ломать; } particleSensor.nextSample (); // Мы закончили с этим образцом, поэтому переходим к следующему образцу // Serial.println (SpO2); } #endif} void writeEEPROM (float * data) {byte ByteArray [4]; memcpy (ByteArray, данные, 4); для (int x =0; x <4; x ++) {EEPROM.write (x, ByteArray [x]); }} float readEEPROM () {float ESpO2 =85.0; byte ByteArray [4]; для (int x =0; x <4; x ++) {ByteArray [x] =EEPROM.read (x); } memcpy (&ESpO2, ByteArray, 4); return ESpO2;} 

Схема


Производственный процесс

  1. Базовый IoT - RaspberryPI HDC2010 как
  2. Регистратор температуры Raspberry Pi
  3. Датчик температуры Python и Raspberry Pi
  4. Датчик температуры и освещенности Raspberry Pi
  5. Датчик температуры Raspberry Pi
  6. Как проверить и откалибровать датчик влажности
  7. Как создать платформу для роботов Arduino + Raspberry Pi
  8. Как сделать стекловолокно
  9. Как сделать анимацию в разрезе в Solidworks
  10. Датчик температуры подшипника | детектор