Реализация трекинга сна через мобильное приложение
Трекинг сна в мобильном приложении упирается в аппаратные ограничения. Акселерометр телефона даёт лишь базовую классификацию «сон/бодрствование» с точностью фаз ниже 60%. Для медицинского класса необходимы носимые датчики, а их интеграция требует работы с HealthKit на iOS и Health Connect на Android. В этой статье разберём технические детали, алгоритмы и подводные камни на основе нашего опыта (10+ лет, более 50 проектов с трекингом здоровья). Свяжитесь с нами, чтобы обсудить ваш проект.
Как работает трекинг сна без носимых устройств?
Телефон на матрасе: акселерометр фиксирует движения тела. Задача — классифицировать эпохи. Мы используем запись на 10 Гц (оптимально для батареи). Каждые 30 секунд считаем активность как сумму модулей дельт ускорения. Если activity_count < порога — SLEEP, иначе WAKE. Порог подбирается калибровкой первые 3–7 ночей с обратной связью пользователя.
На одном проекте мы столкнулись с проблемой: алгоритм разбивал сессии при ночных пробуждениях пользователя. После объединения сессий с перерывом до 30 минут retention вырос на 15%. Это показывает важность учёта поведения пользователя.
Без ЧСС и температуры фазы сна (REM, глубокий, лёгкий) определяются с точностью <60%. Если продукт претендует на медицинский класс — нужен носимый датчик. Носимые датчики повышают точность фаз сна в 1.5 раза благодаря данным пульса и температуры.
Как работает умный будильник?
Умный будильник пробуждает в лёгкую фазу сна. В заданном временном окне приложение в фоне анализирует акселерометр. iOS: через HKCategorySample не реализовать, но можно использовать BackgroundTask. Android: используем AlarmManager.setAlarmClock() для гарантированного срабатывания в Doze mode. Алгоритм: каждые 30 секунд проверяем activity_count, если два последовательных отсчёта превышают порог — считаем, что пользователь в лёгкой фазе, и срабатывает будильник.
Почему носимые датчики точнее?
Apple Watch автоматически записывает сон через собственные алгоритмы — акселерометр, ЧСС, кожная температура (начиная с последних моделей). Результат — в HealthKit как HKCategoryValueSleepAnalysis. Android — через Health Connect:
let sleepType = HKObjectType.categoryType(forIdentifier: .sleepAnalysis)! let query = HKSampleQuery( sampleType: sleepType, predicate: HKQuery.predicateForSamples(withStart: startDate, end: endDate), limit: HKObjectQueryNoLimit, sortDescriptors: [NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: true)] ) { _, samples, _ in guard let samples = samples as? [HKCategorySample] else { return } samples.forEach { sample in switch sample.value { case HKCategoryValueSleepAnalysis.asleepCore.rawValue: // лёгкий case HKCategoryValueSleepAnalysis.asleepDeep.rawValue: // глубокий case HKCategoryValueSleepAnalysis.asleepREM.rawValue: // REM case HKCategoryValueSleepAnalysis.awake.rawValue: // пробуждение default: break } } } val response = healthConnectClient.readRecords( ReadRecordsRequest( recordType = SleepSessionRecord::class, timeRangeFilter = TimeRangeFilter.between(startTime, endTime) ) ) response.records.forEach { session -> session.stages.forEach { stage -> when (stage.stage) { SleepSessionRecord.STAGE_TYPE_DEEP -> { /* глубокий */ } SleepSessionRecord.STAGE_TYPE_REM -> { /* REM */ } SleepSessionRecord.STAGE_TYPE_LIGHT -> { /* лёгкий */ } SleepSessionRecord.STAGE_TYPE_AWAKE -> { /* пробуждение */ } } } } Что входит в работу?
При заказе под ключ вы получаете: разработку алгоритмов сбора и анализа данных с акселерометра, интеграцию HealthKit (iOS) и Health Connect (Android), умный будильник с окном пробуждения, панель статистики с графиками фаз сна, калибровочный модуль для первых ночей, документацию и обучение вашей команды. Финансовые затраты на разработку зависят от выбранного стека и объёма интеграций. Благодаря оптимизации алгоритмов, мы сокращаем время погружения на 20%, что снижает стоимость внедрения.
Детали калибровки
Калибровка порога activity_count проводится на основе первых 3–7 ночей. Пользователь подтверждает время сна и пробуждения, и алгоритм подстраивается под его индивидуальные паттерны движений.Сравнение подходов
| Параметр | Без носимого | С носимым |
|---|---|---|
| Точность фаз | <60% | ~85-90% |
| Источник данных | Акселерометр | ЧСС + акселерометр + температура |
| Требования к устройству | Любой смартфон | Носимый гаджет |
| Стоимость разработки | Ниже | Выше |
| Использование | Массовый продукт | Медицинский / премиум |
Типичные ошибки
Мы часто видим три распространённые ошибки. Первая — разрыв сна: пользователь встал ночью на 20 минут, алгоритм создаёт две отдельные сессии. Решение — объединять сессии, если перерыв менее 30 минут. Вторая — перевод времени: храните временные метки в UTC, локальное время — только для отображения, иначе статистика поедет при смене часового пояса. Третья — короткие сессии: отфильтровывайте «сон» короче 30 минут, чтобы исключить дневной отдых и ложные срабатывания.
Сроки и этапы
| Этап | Длительность |
|---|---|
| Аналитика и проектирование | 1-2 недели |
| Разработка алгоритмов и UI | 2-3 недели |
| Интеграция HealthKit/Health Connect | 1-2 недели |
| Тестирование и калибровка | 1-2 недели |
| Деплой и поддержка | 1 неделя |
Базовый трекер с акселерометром и будильником — 3–5 недель. С интеграцией носимых датчиков, фазами сна и продвинутой аналитикой — 6–10 недель.
Наши инженеры имеют 10+ лет опыта и реализовали более 50 проектов с HealthKit и Health Connect. Мы работаем с задачами любой сложности — от MVP до масштабируемого продукта. Гарантируем соблюдение сроков и качества.
Получите консультацию технического специалиста и оценку вашего проекта за 1 день. Закажите разработку трекинга сна — пишите, мы подберём оптимальное решение под ваш бюджет и сроки.







