Pedometer (крокомір) у мобільних додатках — це програмно-апаратний механізм підрахунку кроків користувача на основі даних акселерометра та гіроскопа. Сучасні смартфони використовують алгоритми машинного навчання в поєднанні з сенсорами для точного визначення ходьби, бігу та інших видів фізичної активності. Згідно з Apple HealthKit Documentation, 2025, точність підрахунку кроків на сучасних пристроях досягає 95–97% при нормальній ходьбі.
Головне
Крокомір (pedometer) у мобільних додатках — це функція, що визначає кількість кроків користувача на основі даних, що надходять із вбудованих датчиків руху смартфона. На відміну від механічних крокомірів минулого, мобільний pedometer використовує мікроелектромеханічні сенсори (MEMS) та алгоритми цифрової обробки сигналів для точного підрахунку локомоцій. Сучасні реалізації не просто рахують кроки, але й класифікують активність: ходьба, біг, підйом сходами.
Інтеграція крокоміра в мобільні пристрої стала можливою завдяки появі в 2013 році співпроцесора руху M7 в iPhone 5s, який безперервно збирав дані з датчиків при мінімальному енергоспоживанні. Сьогодні всі сучасні смартфони мають апаратну підтримку підрахунку кроків на рівні сенсорного хаба — виділеного чіпа, що обробляє дані інерційних датчиків без пробудження основного процесора.
Підрахунок кроків на смартфоні базується на аналізі сигналів акселерометра, який вимірює прискорення пристрою по трьох перпендикулярних осях (X, Y, Z). При ходьбі кожен крок створює характерний патерн прискорення: спочатку пік вгору при підйомі ноги, потім пік вниз при приземленні. Частота кроків (каденс) становить 100–130 кроків/хв для ходьби та 150–180 кроків/хв для бігу, а амплітуда прискорення — 2–6 м/с².
Сирий сигнал з акселерометра містить шуми та високочастотні перешкоди, тому перший етап обробки — фільтрація низьких частот (low-pass filter) з частотою зрізу 3–5 Гц. Після фільтрації обчислюється вектор прискорення: a = sqrt(x² + y² + z²), що виділяє прискорення, пов'язане з рухом, незалежно від орієнтації пристрою. Потім алгоритм виявляє локальні максимуми в сигналі — кожен максимум відповідає одному кроку.
Для зменшення хибних спрацьовувань (наприклад, при трясці в транспорті) застосовуються додаткові критерії: мінімальна амплітуда кроку (зазвичай >1,2 м/с²), мінімальний інтервал між кроками (300–400 мс для ходьби) та перевірка періодичності сигналу через автокореляцію. Якщо часові інтервали між піками нерегулярні, послідовність маркується як випадкові рухи та не зараховується як кроки.
Базовий алгоритм детекції кроків використовує метод порогового виявлення: система шукає моменти, коли сигнал акселерометра перевищує заданий поріг і потім повертається до рівня спокою. Кожна така подія вважається потенційним кроком. Існують два підходи: детекція піків (peak detection) та перетин нуля (zero-crossing). Детекція піків фіксує максимуми сигналу, а zero-crossing — моменти переходу сигналу через середнє значення, що менше залежить від амплітуди кроку.
Сучасні алгоритми підрахунку кроків використовують адаптивний поріг, який автоматично підлаштовується під стиль ходьби користувача. Система аналізує дисперсію сигналу за останні 2–3 секунди та обчислює динамічний поріг як середньоквадратичне відхилення (RMS), помножене на коефіцієнт. Це дозволяє коректно рахувати кроки як при повільній прогулянці, так і при енергійному бігу без перехресного калібрування між видами активності.
Сучасні реалізації крокоміра використовують не лише детекцію піків, а й машинне навчання для класифікації патернів руху. Нейромережеві моделі навчаються на тисячах годин записів реальних рухів з різних сценаріїв: ходьба по рівній поверхні, підйом сходами, біг, їзда в транспорті. Вхідними ознаками слугують часові ряди акселерометра та гіроскопа, а виходом — ймовірність того, що поточний сегмент сигналу відповідає локомоції людини.
За даними дослідження Google Activity Recognition, моделі на основі згорткових нейромереж (CNN) досягають точності розпізнавання ходьби 98% на контрольних наборах даних. На пристроях Apple використовується Core ML з моделлю Activity Classification, навченою на даних понад 100 тисяч добровольців. Оптимізовані моделі працюють безпосередньо на пристрої (on-device inference), що забезпечує миттєву обробку та збереження приватності користувача.
import CoreMotion
class PedometerObserver {
private let pedometer = CMPedometer()
func startTracking() {
guard CMPedometer.isStepCountingAvailable() else { return }
pedometer.startUpdates(from: Date()) { data, error in
guard let data = data else { return }
let steps = data.numberOfSteps.intValue
let distance = data.distance?.doubleValue
let floorsAscended = data.floorsAscended?.intValue
// Оновлення інтерфейсу з кількістю кроків
DispatchQueue.main.async {
// self.stepsLabel.text = "\(steps) кроків"
}
}
}
func stopTracking() {
pedometer.stopUpdates()
}
}
На iOS для доступу до крокоміра використовується клас CMPedometer з фреймворку Core Motion. CMPedometer надає не лише кількість кроків, але й пройдену відстань, кількість поверхів (підйомів), темп ходьби та час активності. Дані доступні як у реальному часі (startUpdates), так і за довільний період у минулому (queryPedometerData). Співпроцесор руху (M-серії) обробляє дані датчиків апаратно, що знижує енергоспоживання на 80% порівняно з програмною обробкою.
На Android робота з крокоміром реалізована через два апаратні датчики: TYPE_STEP_COUNTER (кумулятивний лічильник кроків з моменту завантаження) та TYPE_STEP_DETECTOR (генерація події на кожен крок). TYPE_STEP_COUNTER не потребує калібрування та не споживає енергію процесора — дані оновлюються апаратно на рівні сенсорного хаба. Для доступу до накопиченої статистики кроків за день використовується Google Fit API із записом DataType.TYPE_STEP_COUNT_DELTA.
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
class StepCounter(
private val sensorManager: SensorManager
) : SensorEventListener {
private var totalSteps = 0
private var previousSteps = -1
fun startListening() {
val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
sensor?.let {
sensorManager.registerListener(this, it, SensorManager.SENSOR_DELAY_NORMAL)
}
}
override fun onSensorChanged(event: SensorEvent) {
if (previousSteps < 0) {
previousSteps = event.values[0].toInt()
}
val currentSteps = event.values[0].toInt()
totalSteps = currentSteps - previousSteps
}
fun getStepCount(): Int = totalSteps
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {}
}
Точність крокоміра залежить від кількох факторів: розташування смартфона (в руці, кишені чи сумці), типу активності (ходьба, біг, підйом сходами) та якості сенсорів. При носінні смартфона в кишені штанів точність становить 93–97%, у сумці чи рюкзаку падає до 70–85%. На точність також впливає стиль ходьби користувача: дріботлива хода з малою амплітудою прискорень дає більше помилок, ніж розмірена ходьба.
Основні обмеження мобільних крокомірів включають: неможливість підрахунку кроків при дуже повільному русі (<1,5 км/год), хибні спрацьовування від поїздки в транспорті, зниження точності при бігу на низькій швидкості (підтюпцем) та вплив жестикуляції при розмові. Для мінімізації помилок сучасні додатки використовують комбінацію сенсорів (акселерометр + гіроскоп + барометр) та машинне навчання для відсіювання артефактів. Барометр, наприклад, допомагає визначати підйом сходами та зміну висоти, виключаючи хибні кроки в ліфті.
Часті запитання
Крокомір у телефоні використовує акселерометр, що фіксує прискорення при кожному кроці. Алгоритм аналізує піки прискорення по трьох осях, фільтрує шуми та визначає кількість кроків. Сучасні моделі також використовують гіроскоп та машинне навчання для підвищення точності та класифікації активності.
При носінні смартфона в кишені штанів точність досягає 95–97% при звичайній ходьбі. У сумці чи рюкзаку точність знижується до 70–85%. На точність впливає також стиль ходьби та тип поверхні — нерівний рельєф може давати похибки до 10–15%.
Так, крокомір працює повністю автономно без підключення до інтернету. Всі обчислення виконуються на пристрої з використанням вбудованих датчиків. Інтернет може знадобитися лише для синхронізації даних з хмарними сервісами фітнес-додатків або для відображення карти маршруту.
Різні додатки використовують різні алгоритми обробки даних сенсорів, пороги детекції кроків та методи фільтрації. Деякі додатки рахують кроки на основі сирих даних акселерометра, інші — через системні API (TYPE_STEP_COUNTER), і різниця в підрахунках може досягати 10–15%.
На Android для доступу до крокоміра використовуйте датчик TYPE_STEP_COUNTER через Sensor API — він надає кумулятивну кількість кроків з моменту останнього перезавантаження пристрою. Для доступу до кроків за конкретний день інтегруйте Google Fit API з типом даних TYPE_STEP_COUNT_DELTA.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також