Моніторинг пульсу у мобільному додатку: PPG, BLE, HealthKit

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

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, 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.