ניטור דופק באפליקציות מובייל: PPG, BLE, HealthKit

ניטור דופק מדויק באפליקציות מובייל הוא אתגר: PPG דרך מצלמה סובל מחפצים, חיישני BLE מאבדים חיבור, והשילוב עם HealthKit ו-Health Connect דורש הגדרה מורכבת. אנחנו בונים פתרון ניטור דופק מלא, מקליטת האות ועד פרסום בחנות, ומבטיחים פעולה אמינה עם תמיכה מתמשכת. הצוות שלנו מטפל בכל התהליך: ביקורת, פיתוח, הטמעה ותמיכה.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
ניטור דופק באפליקציות מובייל: PPG, BLE, HealthKit
מורכב
~3-5 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

תארו לעצמכם שאתם משיקים אפליקציית כושר שמודדת דופק. PPG דרך מצלמה נותן ±15 פעימות לדקה – חפצי תנועה, סנוור, מגבלות קצב פריימים ב-iOS. חיישן BLE מאבד חיבור עקב ניתוח שגוי של מאפיין מדידת הדופק. HealthKit דורש הגדרת הרשאות מורכבת, ואפל דוחה פרסום עקב אי-עמידה בסעיף 5.1. אנחנו פותרים בעיות אלה תוך 2–4 שבועות במפתח מלא: מלכידת פריימים ועד פרסום בחנות. צרו קשר כדי לקבל תוכנית אינטגרציה מפורטת לפרויקט שלכם.

אילו בעיות אנחנו פותרים?

חוסר הדיוק של מדידת PPG הוא הכאב העיקרי: חפצי תנועה, שינויי תאורה, מגבלות פנס ב-iOS. אינטגרציית BLE גם היא לא טריוויאלית: ניתוח דגלים שגוי, ניתוח מרווחי RR מוביל לשגיאות HRV. HealthKit/Health Connect – סיבוכים עם הרשאות ואיסוף ברקע. אנחנו מכסים כל אחת מהשכבות האלה: מלכידת פריימים ועד פרסום.

חיישני BLE מדויקים פי 5–10 מ-PPG בסטיית תקן (±1 לעומת ±10 פעימות לדקה במנוחה). לאפליקציות שמכוונות לניטור ספורט או HRV – רק BLE.

איך אנחנו מיישמים PPG דרך מצלמה: שלב אחר שלב

  1. לכידת זרם וידאו: AVCaptureVideoDataOutputSampleBufferDelegate (iOS) או CameraX (Android). 30 פריימים לשנייה.
  2. חישוב ממוצע הערוץ הירוק: קחו אזור מרכזי – 1/3 מהממדים. הימנעו מסנוור.
  3. סינון: העבירו את האות דרך מסנן מעביר פס 0.67–3.33 הרץ (FFT או IIR).
  4. זיהוי פסגות: אלגוריתמים המבוססים על אוטוקורלציה או ניתוח חציית אפס.
  5. חישוב דופק: מספר פסגות ב-5 השניות האחרונות.
  6. הערכת HRV: אם נדרש – מדידת מרווחי RR (BLE טבעי, PPG עקיף).
חישוב מפורט של דופק ו-HRV

קצב דגימה 30 פריימים לשנייה → רזולוציית זמן 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) כדי להבטיח חיבור יציב ונתונים מדויקים. הזמינו בדיקה של האינטגרציה שלכם – קבלו דוח תוך יומיים.

קריאה מ-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 – 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 } } } (DanielGindi) או 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) (iOS 16+). באנדרואיד – Charts או Compose Canvas עם ציור מותאם אישית.

אזורי דופק מחושבים מהדופק המרבי (220 פחות גיל או נוסחת Karvonen עם דופק מנוחה):

אזור % מהמרבי צבע
1 – התאוששות 50–60% אפור
2 – בסיס אירובי 60–70% כחול
3 – אירובי 70–80% ירוק
4 – סף אנאירובי 80–90% כתום
5 – מרבי 90–100% אדום
נוסחת דופק מרבי

הנוסחה הנפוצה ביותר: 220 פחות גיל (גברים) או 226 פחות גיל (נשים). לחישוב מדויק יותר, נוסחת Karvonen: HRmax = 220 - גיל ללא אימון, לספורטאים – 205.8 - 0.685 * גיל.

מה כלול בפיתוח ניטור דופק במפתח מלא?

  • ניתוח דרישות ובחירת שיטה (מצלמה/BLE/פלטפורמה או שילוב)
  • יישום איסוף נתונים עם ניקוי וסינון
  • אלגוריתמי עיבוד (FFT, זיהוי פסגות, HRV)
  • ויזואליזציה (גרף, אזורים, סטטיסטיקות)
  • אינטגרציית HealthKit / Health Connect (קריאה וכתיבה)
  • מצב רקע והתראות
  • בדיקות על מכשירים וחיישנים אמיתיים (כולל Fitbit, Garmin וכו')
  • תיעוד ארכיטקטורה, הגדרת build, סיוע בהגשה לחנות

הניסיון והמדדים שלנו

יש לנו שנים רבות של ניסיון בפיתוח מובייל. השלמנו 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 שבועות

העלות של כל שלב מחושבת בנפרד. צרו קשר להערכת פרויקט מדויקת – קבלו תוכנית יישום שלב אחר שלב והערכת לוח זמנים תוך יומיים.

מקור: Photoplethysmogram ו-Bluetooth Heart Rate Profile.