IDZ
.pdf
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();
}
