В этом проекте мы будем использовать интерфейсный датчик пульсоксиметра MAX30100 с Arduino, который может измерять содержание кислорода в крови и частоту сердечных сокращений и отображать это на ЖК-дисплее 16×2. Концентрация кислорода в крови, обозначаемая как SpO2, измеряется в процентах, а частота сердечных сокращений / пульса измеряется в BPM (ударах в минуту). MAX30100 – это прекрасное решение для пульсоксиметрии и создания пульсометра.

Как работает пульсоксиметр? Кислород поступает в легкие, а затем попадает в кровь. Кровь переносит кислород к различным органам нашего тела. Основным способом переноса кислорода в нашей крови является гемоглобин. Во время считывания пульсовой оксиметрии небольшое зажимное устройство помещается на палец, ушную раковину или носок.

Маленькие лучи света проходят через кровь в пальце, измеряя количество кислорода. Это достигается путем измерения изменений в поглощении света в кислородсодержащей или дезоксигенированной крови.

Здесь-то нам и пригодится датчика пульсоксиметра, такой как MAX30100. Это датчик представляет собой интегрированный датчик для пульсоксиметрии и создания пульсометра. Он объединяет два светодиода, фотодетектор, оптимизированную оптику и обработку аналогового сигнала с низким уровнем шума для обнаружения сигналов пульса и сердечного ритма. Он работает от источников питания 1,8 В и 3,3 В и может быть отключен с помощью программного обеспечения с незначительным током в режиме ожидания, что позволяет источнику питания всегда оставаться подключенным.

Устройство имеет два светодиода: один излучает красный свет, другой излучает инфракрасный свет. Для частоты пульса нужен только инфракрасный свет. И красный свет, и инфракрасный свет используются для измерения уровня кислорода в крови.
Когда сердце накачивает кровь, происходит увеличение насыщенной кислородом крови в результате увеличения количества крови. Когда сердце расслабляется, объем насыщенной кислородом крови также уменьшается. Зная время между увеличением и уменьшением насыщенной кислородом крови, определяют частоту пульса.
Оказывается, насыщенная кислородом кровь поглощает больше инфракрасного света и пропускает больше красного света, в то время как деоксигенированная кровь поглощает красный свет и пропускает больше инфракрасного света. Это основная функция MAX30100: он считывает уровни поглощения для обоих источников света и сохраняет их в буфере, который может быть считан через I2C.
Теперь давайте подключим датчик пульсоксиметра MAX30100 к Arduino и отобразим значение в последовательном мониторе. Итак, принципиальная схема и подключение приведена далее.

Подключите Vin-контакт MAX30100 к Arduino 5V или 3.3V, GND к GND. Подключите I2C Pin, SCL и SDA MAX30100 к A5 и A4 платы Arduino.

Исходный код программы для сопряжения пульсоксиметра MAX30100 с Arduino приведен далее. Этот код будет отображать значение в последовательном мониторе. Скопируйте этот код и загрузите его на Arduino. Файлы библиотеки можно скачать по адресу https://drive.google.com/open?id=15w7Hp_Lg7FVVQoou1A56JgNDZADBuN15.
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#define REPORTING_PERIOD_MS 1000
PulseOximeter pox;
uint32_t tsLastReport = 0;
void onBeatDetected()
{
Serial.println("Beat!");
}
void setup()
{
Serial.begin(115200);
Serial.print("Initializing pulse oximeter..");
if (!pox.begin()) {
Serial.println("FAILED");
for(;;);
} else {
Serial.println("SUCCESS");
}
pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
pox.setOnBeatDetectedCallback(onBeatDetected);
}
void loop()
{
pox.update();
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
Serial.print("Heart rate:");
Serial.print(pox.getHeartRate());
Serial.print("bpm / SpO2:");
Serial.print(pox.getSpO2());
Serial.println("%");
tsLastReport = millis();
}
}
После загрузки кода вы можете положить палец на датчик MAX30100 и открыть монитор последовательного порта, чтобы увидеть значения, как показано на следующем изображении.

Теперь давайте используем ЖК-дисплей 16X2 вместо последовательного монитора, чтобы увидеть значения BPM и SpO2. Соберите схему, как показано далее.

Подключите Vin-контакт MAX30100 к Arduino 5V или 3.3V, GND к GND. Подключите контакт I2C, SCL и SDA MAX30100 к A5 и A4 Arduino. Аналогичным образом подключите вывод LCD 1, 5, 16 к GND Arduino и от 2, 15 до 5 В VCC. Аналогичным образом подключите вывод 4, 6, 11, 12, 13, 14 ЖКД к выводу 13, 12, 11, 10, 9, 8 Arduino. Используйте потенциометр 10K на выводе 3 ЖК-дисплея, чтобы отрегулировать контрастность ЖК-дисплея.

Исходный код программы:
#include <LiquidCrystal.h>
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
#define REPORTING_PERIOD_MS 1000
PulseOximeter pox;
uint32_t tsLastReport = 0;
void onBeatDetected()
{
Serial.println("Beat!");
}
void setup()
{
Serial.begin(115200);
Serial.print("Initializing pulse oximeter..");
lcd.begin(16,2);
lcd.print("Initializing...");
delay(3000);
lcd.clear();
if (!pox.begin()) {
Serial.println("FAILED");
for(;;);
} else {
Serial.println("SUCCESS");
}
pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
pox.setOnBeatDetectedCallback(onBeatDetected);
}
void loop()
{
pox.update();
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
Serial.print("Heart rate:");
Serial.print(pox.getHeartRate());
Serial.print("bpm / SpO2:");
Serial.print(pox.getSpO2());
Serial.println("%");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("BPM : ");
lcd.print(pox.getHeartRate());
lcd.setCursor(0,1);
lcd.print("SpO2: ");
lcd.print(pox.getSpO2());
lcd.print("%");
tsLastReport = millis();
}
}
После загрузки кода вы можете положить палец на датчик MAX30100, и на ЖК-дисплее начнут отображаться процентное содержание кислорода и количество ударов в минуту (BPM).

© digitrode.ru