Мониторинг пульса в мобильном приложении: PPG, BLE, HealthKit

Представьте: вы запускаете фитнес-приложение, измеряющее пульс. PPG через камеру выдаёт ±15 уд/мин — артефакты от движения, блики, ограничения частоты кадров на iOS. BLE-датчик теряет соединение из-за неверного парсинга Heart Rate Measurement characteristic. HealthKit требует сложной настройки разре

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Мониторинг пульса в мобильном приложении: PPG, BLE, HealthKit
Сложный
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

Представьте: вы запускаете фитнес-приложение, измеряющее пульс. PPG через камеру выдаёт ±15 уд/мин — артефакты от движения, блики, ограничения частоты кадров на iOS. BLE-датчик теряет соединение из-за неверного парсинга Heart Rate Measurement characteristic. HealthKit требует сложной настройки разрешений, и Apple отклоняет публикацию из-за несоответствия Section 5.1. Мы решаем эти проблемы за 2–4 недели под ключ: от захвата кадра до публикации в сторах. Свяжитесь с нами — получите детальный план интеграции вашего проекта.

Какие проблемы решаем?

Неточность PPG-измерения — основная боль: артефакты движения, изменение освещения, ограничения вспышки на iOS. BLE-интеграция тоже не тривиальна: неверный парсинг флагов, RR-интервалов ведёт к ошибкам HRV. HealthKit/Health Connect — сложности с авторизацией и фоновым сбором. Мы закрываем каждый из этих слоёв: от захвата кадра до публикации.

BLE-датчики точнее PPG в 5–10 раз по стандартному отклонению (±1 против ±10 уд/мин в покое). Для приложений с претензией на спортивный мониторинг или HRV — только BLE.

Как мы реализуем PPG через камеру: пошагово

  1. Захват видеопотока: AVCaptureVideoDataOutputSampleBufferDelegate (iOS) или CameraX (Android). Частота 30 fps.
  2. Вычисление среднего зелёного канала: берём центральную область кадра — 1/3 от размеров. Избегаем бликов.
  3. Фильтрация: пропускаем сигнал через полосовой фильтр 0.67–3.33 Гц (FFT или IIR).
  4. Детекция пиков: алгоритмы на основе автокорреляции или анализа перехода через ноль.
  5. Расчёт ЧСС: количество пиков за последние 5 секунд.
  6. Оценка HRV: если требуется — измеряем RR-интервалы (в BLE это native, в PPG — непрямая оценка).
Детальный расчёт ЧСС и HRV

Частота дискретизации 30 fps => временное разрешение 33 мс. Для ЧСС 180 уд/мин (3 Гц) требуется минимум 6 Гц (теорема Найквиста). Мы используем FFT с окном Ханна длиной 5 секунд (150 точек). Для HRV измеряем SDNN и RMSSD; на PPG они менее точны, чем на BLE.

Почему BLE точнее PPG?

Стандартный профиль Bluetooth LE для датчиков пульса (Polar H10, Wahoo TICKR, Garmin HRM):

  • Service UUID: 0x180D (Heart Rate)
  • Characteristic UUID: 0x2A37 (Heart Rate Measurement)

Данные приходят через Notification. Первый байт — флаги: бит 0 определяет формат (UINT8 или UINT16), бит 4 — наличие RR-интервалов.

override fun onCharacteristicChanged( gatt: BluetoothGatt, characteristic: BluetoothGattCharacteristic, value: ByteArray ) { val flag = value[0].toInt() val isUint16 = flag and 0x01 != 0 val heartRate = if (isUint16) { ((value[2].toInt() and 0xFF) shl 8) or (value[1].toInt() and 0xFF) } else { value[1].toInt() and 0xFF } // RR-интервалы (если есть) — для HRV if (flag and 0x10 != 0) { var offset = if (flag and 0x08 != 0) 4 else 3 // пропускаем энергозатраты если есть while (offset + 1 < value.size) { val rrRaw = ((value[offset + 1].toInt() and 0xFF) shl 8) or (value[offset].toInt() and 0xFF) val rrMs = rrRaw * 1000 / 1024 // перевод из 1/1024 с в миллисекунды rrIntervals.add(rrMs) offset += 2 } } } 

RR-интервалы — основа для расчёта HRV (Heart Rate Variability). Если продукт претендует на стресс-мониторинг или восстановление — без RR не обойтись.

Как тестировать BLE-интеграцию пульса?

Типичные ошибки: некорректная обработка флагов, отсутствие переподключения при разрыве, неверный парсинг RR-интервалов. Мы автоматизируем тестирование на 20+ моделях датчиков (Polar, Wahoo, Garmin, Scosche), чтобы гарантировать стабильное соединение и точные данные. Закажите тестирование вашей интеграции — получите отчёт за 2 дня.

Чтение из HealthKit / Health Connect

Для приложений, которые не занимаются прямым измерением, а только отображают данные:

let query = HKAnchoredObjectQuery( type: HKQuantityType(.heartRate), predicate: nil, anchor: lastAnchor, limit: HKObjectQueryNoLimit ) { _, samples, _, newAnchor, _ in self.lastAnchor = newAnchor let bpmValues = (samples as? [HKQuantitySample])?.map { $0.quantity.doubleValue(for: HKUnit(from: "count/min")) } ?? [] } healthStore.execute(query) 

Данные приходят с источников: Apple Watch Series 4+ даёт ЧСС каждые 5–15 минут в покое и каждую секунду во время тренировки.

Визуализация

Для графика ЧСС в реальном времени: кольцевой буфер последних N значений, обновление раз в секунду. На iOS — Charts (DanielGindi) или Swift Charts (iOS 16+). На Android — MPAndroidChart или Compose Canvas с кастомным рисованием.

Зоны ЧСС рассчитываются от максимального пульса (220 минус возраст или по формуле Кервонена с учётом пульса покоя):

Зона % от макс Цвет
1 — восстановление 50–60% Серый
2 — аэробная база 60–70% Синий
3 — аэробная 70–80% Зелёный
4 — анаэробный порог 80–90% Оранжевый
5 — максимальная 90–100% Красный
Формула расчета максимального пульса

Наиболее распространенная формула: 220 минус возраст (для мужчин) или 226 минус возраст (для женщин). Для более точного расчета используется формула Кервонена: ЧССмакс = 220 - возраст для неподготовленных, а для спортсменов — 205.8 - 0.685 * возраст.

Что входит в разработку мониторинга пульса под ключ?

  • Анализ требований и выбор метода (камера/BLE/платформа или комбинация)
  • Реализация сбора данных с очисткой и фильтрацией
  • Алгоритмы обработки (FFT, пик-детекция, HRV)
  • Визуализация (график, зоны, статистика)
  • Интеграция с HealthKit / Health Connect (чтение и запись)
  • Работа с фоновым режимом и уведомлениями
  • Тестирование на реальных устройствах и датчиках (включая Fitbit, Garmin и др.)
  • Документация архитектуры, конфигурация сборки, помощь с публикацией в сторах

Наш опыт и метрики

Имеем многолетний опыт в мобильной разработке. Выполнили 50+ проектов с мониторингом пульса, интегрировали HealthKit в 30 приложений. В портфолио — интеграции с Polar, Wahoo, Garmin, Fitbit, а также HealthKit и Health Connect. Гарантируем стабильное BLE-соединение на 20+ моделях датчиков. Все решения проходят ревью App Store и Google Play без отклонений. Экономия бюджета за счёт оптимизации алгоритмов — обсуждается индивидуально. Получите консультацию инженера и предварительную смету.

Ориентировочные сроки

Этап Срок
PPG-измерение через камеру (с алгоритмами) 2–3 недели
Bluetooth GATT-интеграция 1–2 недели
HealthKit/Health Connect + визуализация 5–8 дней
Полный цикл под ключ (все методы) от 4 недель

Стоимость каждого этапа рассчитывается индивидуально. Свяжитесь с нами для точной оценки вашего проекта — получите пошаговый план реализации и расчет сроков за 2 дня.

Источник: Photoplethysmogram и Bluetooth Heart Rate Profile.