Инструменты пользователя

Инструменты сайта


max30100

Информация

MAX30100 представляет собой интегрированную пульсоксиметрию и датчик для измерения сердечного ритма. Он сочетает в себе два светодиода, фотоприемник, оптимизированную оптику и малошумную аналоговую обработку сигналов для обнаружения пульсовой оксиметрии и сигналов сердечного ритма.

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

Характеристики MAX30100

  • Потребляет очень низкую мощность (работает от 1,8 В и 3,3 В)
  • Ультранизкий ток выключения (0,7 мкА)
  • Возможность быстрого вывода данных
  • Полный импульсный оксиметр и датчик сердечного ритма
  • Интегрированные светодиоды, фотодатчик и высокопроизводительный аналоговый интерфейс
  • Маленькая (5.6мм x 2.8мм x 1.2мм) 14-контактная оптически улучшенная система в упаковке
  • Работа с ультранизким энергопотреблением увеличивает срок службы батареи
  • Программируемая частота дискретизации и светодиодный ток для экономии электроэнергии
  • Улучшенная функциональность повышает производительность измерений

Требуемые компоненты для проекта

Для нашего проекта нужно совсем немного деталей:

  • Плата Arduino
  • MAX301001 монитор частоты сердечных сокращений
  • Провода перемычки
  • Макетная плата

Схема подключения:

Итак, переходим к принципиальной схема соединения Ардуино и max30100 монитора частоты сердечных сокращений. Воспользуйтесь картинкой выше.

  • Arduino → MAX30100
  • 3V3 → VIN
  • GND → GND
  • A4 → SDA
  • A5 → SCL

Скетч для Arduino

Для того чтобы всё полноценно работало нужно ниже скачать и установить библиотеку для монитора:

max30100.zip

#include <MAX30100.h>
#include <MAX30100_BeatDetector.h>
#include <MAX30100_Filters.h>
#include <MAX30100_PulseOximeter.h>
#include <MAX30100_Registers.h>
#include <MAX30100_SpO2Calculator.h>
#include <Wire.h>

#define REPORTING_PERIOD_MS     500

PulseOximeter pox;
 
const int numReadings=10;
float filterweight=0.5;
uint32_t tsLastReport = 0;
uint32_t last_beat=0;
int readIndex=0;
int average_beat=0;
int average_SpO2=0;
bool calculation_complete=false;
bool calculating=false;
bool initialized=false;
byte beat=0;
 
 
void onBeatDetected() //Calls back when pulse is detected
{
  viewBeat();
  last_beat=millis();
}
 
void viewBeat() 
{
 
  if (beat==0) {
   Serial.print("_");
    beat=1;
  } 
  else
  {
   Serial.print("^");
    beat=0;
  }
}
 
void initial_display() 
{
  if (not initialized) 
  {
    viewBeat();
  Serial.print(" MAX30100 Pulse Oximeter Test");
  Serial.println("******************************************");
    Serial.println("Place place your finger on the sensor");
  Serial.println("********************************************");  
    initialized=true;
  }
}
 
void display_calculating(int j){
 
  viewBeat();
  Serial.println("Measuring"); 
  for (int i=0;i<=j;i++) {
    Serial.print(". ");
  }
}
 
void display_values()
{
  Serial.print(average_beat);
  Serial.print("| Bpm ");
  Serial.print("| SpO2 ");
  Serial.print(average_SpO2);
  Serial.print("%"); 
}
 
void calculate_average(int beat, int SpO2) 
{
  if (readIndex==numReadings) {
    calculation_complete=true;
    calculating=false;
    initialized=false;
    readIndex=0;
    display_values();
  }
 
  if (not calculation_complete and beat>30 and beat<220 and SpO2>50) {
    average_beat = filterweight * (beat) + (1 - filterweight ) * average_beat;
    average_SpO2 = filterweight * (SpO2) + (1 - filterweight ) * average_SpO2;
    readIndex++;
    display_calculating(readIndex);
  }
}
 
void setup()
{
    Serial.begin(115200);
    pox.begin();
    pox.setOnBeatDetectedCallback(onBeatDetected);
}
 
 
void loop()
{
 
    pox.update(); 
    if ((millis() - tsLastReport > REPORTING_PERIOD_MS) and (not calculation_complete)) {
        calculate_average(pox.getHeartRate(),pox.getSpO2());
        tsLastReport = millis();
    }
    if ((millis()-last_beat>10000)) {
      calculation_complete=false;
      average_beat=0;
      average_SpO2=0;
      initial_display();
    }
}

Что на выходе

Откройте последовательный монитор, и вы увидите что-то подобное, если коснуться датчика:

Частота сердечных сокращений: 39.42bpm / SpO2: 93% Beat! Beat! Частота сердечных сокращений: 62,35bpm / SpO2: 93% Beat! Частота сердечных сокращений: 64,70bpm / SpO2: 93% Beat! Частота сердечных сокращений: 72.40bpm / SpO2: 93% Beat! Частота сердечных сокращений: 68,71bpm / SpO2: 93% Beat! Частота сердечных сокращений: 76,62bpm / SpO2: 93% Beat! Частота сердечных сокращений: 54,73bpm / SpO2: 93%

max30100.txt · Последнее изменение: 2021/01/28 14:38 — admin

Инструменты страницы