Скачиваний:
10
Добавлен:
06.02.2025
Размер:
1.81 Mб
Скачать

4 Разработка алгоритма работы устройства

Рисунок 7 – Алгоритм работы

5 Отображение данных через последовательный монитор Arduino

IDE

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

Например: 115161, 79.05, 82.

Первое значение (115161): сырое значение сигнала от датчика (интенсивность света, отражённого от крови).

Второе значение (79.05): мгновенное значение пульса, вычисленное на основе изменений сигнала.

Третье значение (82): среднее значение ЧСС, вычисляемое на основе 10 измерений.

Рисунок 8 – Отображение данных в мониторе порта Arduino IDE

6 Анализ и визуализация данных с использованием MS Excel

Для обработки больших массивов данных по трем параметрам была использована программа для работы с электронными таблицами MS Excel. Чтобы упростить и ускорить работу с разрабатываемым устройством, в программу была включена надстройка Microsoft Data Streamer for Excel, позволяющая производить двухстороннюю передачу данных между программой и микроконтроллером в режиме реального времени. Далее с помощью надстройки была налажена потоковая передача, а также запись показаний датчиков, поступающих через COM-порт (рисунок ). Эти данные в дальнейшем пригодны для сохранения в CSV формате (файл Microsoft Excel, содержащий значения, разделенные запятыми) или непосредственного анализа в Excel. Данные поступали в три канала (CH1, CH2 и CH3) и записывались с привязкой ко времени. Каждому каналу соответствует определенный параметр:

-CH1: Интенсивность ИК-сигнала (пульсовая волна).

-CH2: Мгновенное значение частоты сердечных сокращений.

-CH3: Средняя ЧСС за определенный период времени.

Рисунок 9 – Запись данных в таблицы

На рисунке 10 показан график, на котором отображается динамика изменений ИК-сигнала. График показывает характерную пульсирующую форму волны, соответствующую сердечным сокращениям.

По горизонтальной оси отложено время (с), а по вертикальной – интенсивность сигнала.

Рисунок 10 – Визуализация пульсовой волны

График на рисунке 11, на котором показана мгновенная и средняя частота сердечных сокращений. Зелёная линия отражает изменения мгновенной ЧСС, а синяя линия показывает усредненное значение ЧСС. Этот график позволяет анализировать стабильность сердечных сокращений и выявлять отклонения.

Рисунок 11 – Визуализация ЧСС

Для эффективной записи и отображения данных был настроен интервал передачи 10 мс и ограничение по строкам данных 1000 записей, что обеспечивает точность и достаточный объем информации. Это отображено на рисунке 12.

Рисунок 12 – Настройки передачи данных

7 Передача данных через Bluetooth: отображение в мобильном приложении

На текущем этапе были реализованы беспроводная передача данных и их отображение на мобильном устройстве в приложении Bluetooth serial monitor с использованием интерфейса Bluetooth 4.2. Это позволяет пользователю в реальном времени видеть измеренные параметры пульса и ЧСС на экране смартфона без необходимости подключения устройства к компьютеру. Использование Bluetooth v4.2 гарантирует низкое энергопотребление, что увеличивает время автономной работы устройства.

Устройство автоматически обнаруживается при сканировании Bluetooth-соединений на смартфоне и отображается в списке как "Pulse monitoring device". Данные о пульсе и ИК-сигнале, полученные с датчика MAX30102, передаются через интерфейс Bluetooth. На экране мобильного устройства в приложении информация отображается в текстовом виде. Если палец не обнаружен на датчике, приложение выводит сообщение "Палец не обнаружен", что позволяет контролировать корректность измерений.

Рисунок 13 – Отображение данных в приложении смартфона

8 Итоги работы и заключение

В результате проделанной работы был разработан функциональный прототип устройства для мониторинга пульсовой волны и ЧСС. Использование микроконтроллера ESP32 с поддержкой беспроводной связи и датчика MAX30102 позволило создать энергоэффективное, компактное и мобильное устройство. Все полученные данные были обработаны, визуализированы и проанализированы с использованием современных программных инструментов. Была разработана структурная схема и электрическая принципиальная схема подключения датчика MAX30102 к микроконтроллеру ESP32 по интерфейсу I2C, обеспечивая стабильное взаимодействие компонентов. Проанализированы требования по питанию для датчика и микроконтроллера.

Также был настроен процесс приема и обработки данных через интерфейс I2C. Данные, полученные с датчика, включали: интенсивность ИК-сигнала (отражение пульсовой волны), мгновенное значение ЧСС, среднее значение ЧСС за определенный период. Данные были выведены на последовательный монитор среды разработки Arduino IDE для базового анализа. Проведена потоковая передача данных в программу MS Excel, где были построены графики пульсовой волны и частоты сердечных сокращений, наглядно показывающие динамику изменения параметров во времени. Было записано видео длительностью 40 секунд, демонстрирующее работу устройства и стабильность передачи данных. Данные были сохранены в формате CSV для дальнейшего анализа и использования в других программах. Реализована передача данных через интерфейс Bluetooth v4.2. Пользователь может в реальном времени наблюдать показатели устройства на мобильном приложении с возможностью мониторинга ЧСС и текущего состояния датчика.

Устройство обладает потенциалом для дальнейшего развития и оптимизации, что позволяет использовать его для мониторинга физиологических показателей человека в реальном времени.

Список использованных источников

1.Espressif Systems. ESP32-DevKitC User Guide [Электронный

ресурс].

URL:

https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32/esp32-devkitc/user_ guide.html (дата обращения: 01.12.2024).

2.IC Components. MAX30102 Module: Technical Details, Layout, and Circuit Guide [Электронный ресурс]. – URL: https://www.ic-components.ru/blog/max30102-module-technical-details-layout-and- circuit-guide.jsp (дата обращения: 01.12.2024).

3.Arduino. Arduino IDE User Manual [Электронный ресурс]. – URL: https://www.arduino.cc/en/Guide (дата обращения: 18.12.2024).

4.Хабр (Habr). Подключение датчика MAX30102 и вывод данных на ESP32 [Электронный ресурс]. – URL: https://habr.com/ru/post/ (дата обращения: 01.12.2024).

5.GitHub. MAX30102 Library for Arduino and ESP32 [Электронный ресурс]. – URL: https://github.com (дата обращения: 01.12.2024).

ПРИЛОЖЕНИЕ А

Код программы:

#include <BluetoothSerial.h> #include <Wire.h>

#include "MAX30105.h" #include "heartRate.h"

MAX30105 particleSensor; // Переменная класса для датчика

BluetoothSerial SerialBT; // Переменная класса для Bluetoooth устройства

const byte RATE_SIZE = 10; // Усреднение по 10 измерениям byte rates[RATE_SIZE]; // Массив значений ЧСС

byte rateSpot = 0; // Переменная задает позицию в массиве rates long lastBeat = 0; // Время отсчета с момента последнего серцебиения float beatsPerMinute; // Вводим переменную для посчета ЧСС

int beatAvg; // Переменная для хранения среднего ЧСС

void setup() {

Serial.begin(115200); // Скорость передачи данных SerialBT.begin("Pulse monitoring device"); // Имя Bluetooth устройства Serial.println("Инициализация...");

// Initialize sensor

if

(!particleSensor.begin(Wire, I2C_SPEED_FAST))

// I2C порт на частоте 400кГц

{

Serial.println("Датчик MAX30102 не обнаружен.

Проверьте подключение. ");

while (1);

}

Serial.println("Прижмите палец к датчику и держите.");

particleSensor.setup(); // Стандартная конфигурация датчика particleSensor.setPulseAmplitudeRed(0x0A); // Включили красный светодиод на

низкий уровень свечения для индикации работы датчика. particleSensor.setPulseAmplitudeGreen(0); // Выключили зеленый светодиод

}

void loop() {

long irValue = particleSensor.getIR(); // Получаем значение ИК

if (checkForBeat(irValue) == true) { // Если обнаружено серцебиение (перепад ИК сигнала)

long delta = millis() - lastBeat; // Вычисление промежутка между сердцебиениями

lastBeat = millis(); // Переназначение точки отсчета

beatsPerMinute = 60 / (delta / 1000.0); // Вычисление мгновенной ЧСС

if (beatsPerMinute < 255 && beatsPerMinute > 20) { // Фильтрация неадекватных данных ЧСС

rates[rateSpot++] = (byte)beatsPerMinute; // Заполнение массива показаний

ЧСС

// Ищем остаток от деления номера элемента на размер массива для заполнения массива по кругу

rateSpot %= RATE_SIZE;

beatAvg = 0; // Вычисление средней ЧСС for (byte x = 0 ; x < RATE_SIZE ; x++)

beatAvg += rates[x]; beatAvg /= RATE_SIZE;

}

}

// Передаем данные по Bluetooth SerialBT.print(irValue ); SerialBT.print(','); SerialBT.print(beatsPerMinute ); SerialBT.print(',');

SerialBT.println(beatAvg);

// Передаем данные в монитор порта

//Serial.print("IR="); Serial.print(irValue ); Serial.print(','); //Serial.print(", ЧСС ="); Serial.print(beatsPerMinute );

Serial.print(','); //Serial.print(", Среднее ЧСС =");

Serial.print(beatAvg );

// Уведомление пользователю о недостаточном контакте с датчиком

if (irValue < 50000){

Serial.print(" Палец не обнаружен"); SerialBT.println(" Палец не обнаружен");}

Serial.println();

}