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

Измерение частоты пульса и SpO2 с помощью MAX30102

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

Arduino UNO
× 1
Adafruit OLED 128x32
× 1
Зуммер
× 1
Maxim Integrated MAX30102 высокочувствительный пульсоксиметр и датчик сердечного ритма для носимого здоровья
× 1

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

Введение

Привет, в этом руководстве мы соединим MAX30102:модуль пульсоксиметрии и монитора сердечного ритма с платой Arduino UNO, а затем создадим проект для измерения BPM, используя этот модуль + OLED-дисплей и зуммер.

BPM - это «удары в минуту», и они составляют около 65-75 во время отдыха для нормального человека, у атлетов может быть меньше этого, а SpO2 - это уровень насыщения кислородом, а для нормального человека он превышает 95%.

MAX30102 можно найти в разных модулях, у меня есть версия WAVGAT, это не проблема, если IC - MAX30102.

Компоненты

Вот что я собираюсь использовать

Тесты:

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

Что касается кода, который я сделал для OLED и Buzzer, это модифицированная версия примера «HeartRate», он просит вас приложить палец к датчику.

Сложив палец, оставайтесь спокойным некоторое время, пока не начнете слышать звуковые сигналы зуммера, синхронизированные с биением вашего сердца, или анимацию OLED, синхронизированную с ним, а затем вы сможете прочитать правильный BPM.

Примечание:в коде я на самом деле печатаю средний BPM, так как он показывает среднее значение 4 BPM, это более точно, просто подождите некоторое время.

Создавайте растровые изображения для OLED

Сердце (маленькое), которое вы видите, является растровым изображением, и каждый раз, когда датчик обнаруживает сердцебиение, мы на некоторое время переключаемся на другое сердечное (большое) растровое изображение, и создается впечатление, что сердце бьется вместе с звуковым сигналом зуммера.

Вот два растровых изображения в коде, которые мы вызываем позже в коде

Чтобы сделать это, ищите изображение (черное с белым фоном) для того, что вы хотите видеть на экране, просто не забывайте о размере, тот, который я использую, - 128x32 пикселей, а изображения меньше этого (32x32 px) и (24x21 px)

Загрузите LCD Assistant и откройте его (несколько шагов ниже)

А вот и ваши «цифры»

А вот как я это назвал в коде

  display.drawBitmap (5, 5, logo2_bmp, 24, 21, БЕЛЫЙ);  

Что означает

  display.drawBitmap (Начальная позиция x, Начальная позиция y, имя растрового изображения, Ширина, Высота, Цвет);  

И, как вы можете видеть в коде, один вызывается при обнаружении пальца, а другой - при обнаружении сердцебиения.

И сделайте то, что хотите.

Код

  • MAX_BPM_OLED_Buzzer.ino
MAX_BPM_OLED_Buzzer.ino Arduino
Изменено из библиотеки SparkFun MAX3010x
 / * Этот код работает с MAX30102 + 128x32 OLED i2c + Buzzer и Arduino UNO * Он отображает средний BPM на экране с анимацией и звуковым сигналом * каждый раз при обнаружении сердечного ритма * Это модифицированная версия примера библиотеки HeartRate. * Подробную информацию см. На сайте www.surtrtech.com или на канале SurtrTech на YouTube * / # include  // библиотеки OLED # include  #include  #include "MAX30105.h" // библиотека MAX3010x # include "heartRate.h" // алгоритм вычисления частоты пульсаMAX30105 particleSensor; const byte RATE_SIZE =4; // Увеличьте это для большего усреднения. 4 - хорошо. Байтовые ставки [RATE_SIZE]; // Массив сердечных сокращенийbyte rateSpot =0; long lastBeat =0; // Время, в которое произошел последний удар float beatsPerMinute; int beatAvg; #define SCREEN_WIDTH 128 // Ширина OLED-дисплея в пикселях # define SCREEN_HEIGHT 32 // Высота OLED-дисплея в пикселях #define OLED_RESET -1 // Сброс пин # (или -1, если используется общий вывод сброса Arduino) Отображение Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // Объявление отображаемого имени (отображения) static const unsigned char PROGMEM logo2_bmp [] ={0x03, 0xC0, 0xF0, 0x06, 0x71, 0x8C, 0x0C, 0x1B, 0x06, 0x18, 0x0E, 0x02, 0x10, 0x0C, 0x0C , // Logo2 и Logo3 - это два изображения BMP, которые отображаются на OLED при вызове 0x04, 0x01, 0x10, 0x04, 0x01, 0x10, 0x40, 0x01, 0x10, 0x40, 0x01, 0x10, 0xC0, 0x03, 0x08, 0x88,0x02, 0x08, 0xB8, 0x04, 0xFF, 0x37, 0x08, 0x01, 0x30, 0x18, 0x01, 0x90, 0x30, 0x00, 0xC0, 0x60,0x00, 0x60, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x00, 0x1 0x0E, 0x00, 0x00, 0x04, 0x00,}; статический константный символ без знака PROGMEM logo3_bmp [] ={0x01, 0xF0, 0x0F, 0x80, 0x06, 0x1C, 0x38, 0x60, 0x18, 0x06, 0x60, 0x01, 0x01, 0x01, 0x01 0x80, 0x08,0x20, 0x01, 0x80, 0x04, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0xC0, 0x00, 0x08, 0x03,0x80, 0x00, 0x08, 0x01, 0x00, 0x80 0x01, 0x80, 0x00, 0x1C, 0x01, 0x80, 0x00, 0x14, 0x00,0x80, 0x00, 0x14, 0x00, 0x80, 0x00, 0x14, 0x00, 0x40, 0x10, 0x12, 0x00, 0x40, 0x10, 0x12, 0x00, 0x7E, 0x1F, 0x23, 0xFE, 0x03, 0 x31, 0xA0, 0x04, 0x01, 0xA0, 0xA0, 0x0C, 0x00, 0xA0, 0xA0, 0x08,0x00, 0x60, 0xE0, 0x10, 0x00, 0x20, 0x60, 0x20, 0x06, 0x360, 0x0x, 0x0 0x40, 0xC0,0x01, 0x80, 0x01, 0x80, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x30, 0x0C, 0x00,0x00, 0x08, 0x10, 0x00, 0x60, 0x00, 0x00 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x01, 0x80, 0x00}; установка void () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Запускаем OLED-дисплей display.display (); задержка (3000); // Инициализируем датчик particleSensor.begin (Wire, I2C_SPEED_FAST); // Использовать порт I2C по умолчанию, скорость 400 кГц ParticleSensor.setup (); // Настраиваем датчик с настройками по умолчанию ParticleSensor.setPulseAmplitudeRed (0x0A); // Поверните красный светодиод на низкий уровень, чтобы указать, что датчик работает} void loop () {long irValue =particleSensor.getIR (); // Считывание значения IR позволит нам узнать, есть ли палец на датчике или нет // Также обнаруживается сердцебиение (irValue> 7000) {// Если обнаружен палец display.clearDisplay (); // Очистить дисплей display.drawBitmap (5, 5, logo2_bmp, 24, 21, БЕЛЫЙ); // Рисуем первое изображение в формате BMP (сердечко) display.setTextSize (2); // Рядом с ним отображается средний BPM, вы можете отобразить BPM, если хотите display.setTextColor (WHITE); display.setCursor (50,0); display.println («BPM»); display.setCursor (50,18); display.println (beatAvg); display.display (); if (checkForBeat (irValue) ==true) // Если обнаружено сердцебиение {display.clearDisplay (); // Очистить дисплей display.drawBitmap (0, 0, logo3_bmp, 32, 32, БЕЛЫЙ); // Рисуем второе изображение (большее сердце) display.setTextSize (2); // И все равно отображает средний BPM display.setTextColor (WHITE); display.setCursor (50,0); display.println ("BPM"); display.setCursor (50,18); display.println (beatAvg); display.display (); тон (3,1000); // И включите зуммер на 100 мс, вы можете уменьшить его, это будет лучше delay (100); noTone (3); // Отключить зуммер, чтобы получить эффект «бип» // Мы почувствовали удар! long delta =millis () - lastBeat; // Измерение длительности между двумя ударами lastBeat =millis (); beatsPerMinute =60 / (дельта / 1000,0); // Вычисление BPM if (beatsPerMinute <255 &&beatsPerMinute> 20) // Для вычисления среднего мы фиксируем некоторые значения (4), а затем выполняем математические вычисления для вычисления среднего {rate [rateSpot ++] =(byte) beatsPerMinute; // Сохраняем это показание в массиве rateSpot% =RATE_SIZE; // Оборачиваем переменную // Возьмем среднее значение показаний beatAvg =0; для (байт x =0; x  
Библиотека SparkFun MAX3010x
https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library
Adafruit SSD1306
https://github.com/adafruit/Adafruit_SSD1306
Библиотека Adafruit GFX
https://github.com/adafruit/Adafruit-GFX-Library

Схема

Оба модуля имеют интерфейс i²c, если вы используете 2-контактный зуммер (-) с GND и (+) с резистором, то D3

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

  1. Контроль доступа с помощью QR, RFID и проверки температуры
  2. Измерение температуры с помощью однопроводного датчика DS18B20 и Raspberry Pi
  3. Аэропоника с Raspberry Pi и датчиком влажности
  4. Удаленный монитор сердечного ритма
  5. Создание роботов с Raspberry Pi и Python
  6. Датчик Portenta и термопары (с MAX6675)
  7. Игра с гироскопом Arduino с MPU-6050
  8. Монитор сердечного ритма с использованием Интернета вещей
  9. Определение частоты пульса с помощью фоторезистора
  10. Visual Components и Matterport — новые возможности автоматизации с ProFeeder X