Педометърът (крачкомер) в мобилните приложения е програмно-хардуерен механизъм за броене на крачките на потребителя на база данни от акселерометър и жироскоп. Съвременните смартфони използват алгоритми за машинно самообучение в комбинация със сензори за точно определяне на ходене, бягане и други видове физическа активност. Според данни от Apple HealthKit Documentation, 2025, точността на броене на крачки на съвременните устройства достига 95–97% при нормално ходене.
Основни точки
Крачкомер (педометър) в мобилните приложения е функция, която определя броя на крачките на потребителя на база данни, постъпващи от вградените сензори за движение на смартфона. За разлика от механичните крачкомери от миналото, мобилният педометър използва микроелектромеханични сензори (MEMS) и алгоритми за цифрова обработка на сигнали за точно броене на движения. Съвременните реализации не само броят крачки, но и класифицират активността: ходене, бягане, катерене по стълби.
Интеграцията на крачкомера в мобилни устройства стана възможна благодарение на появата през 2013 г. на копроцесора за движение M7 в iPhone 5s, който непрекъснато събираше данни от сензори с минимална консумация на енергия. Днес всички съвременни смартфони имат хардуерна поддръжка за броене на крачки на ниво сензорен хъб — специален чип, обработващ данни от инерциални сензори без събуждане на главния процесор.
Броенето на крачки на смартфон се основава на анализ на сигналите на акселерометъра, който измерва ускорението на устройството по три перпендикулярни оси (X, Y, Z). При ходене всяка крачка създава характерен модел на ускорение: първо пик нагоре при повдигане на крака, след това пик надолу при приземяване. Честотата на крачките (каданс) е 100–130 крачки/мин за ходене и 150–180 крачки/мин за бягане, а амплитудата на ускорение — 2–6 m/s².
Суровият сигнал от акселерометъра съдържа шум и високочестотни смущения, затова първият етап на обработка е нискочестотен филтър (low-pass filter) с гранична честота 3–5 Hz. След филтриране се изчислява векторът на ускорение: a = sqrt(x² + y² + z²), който извлича ускорението, свързано с движение, независимо от ориентацията на устройството. След това алгоритъмът открива локални максимуми в сигнала — всеки максимум съответства на една крачка.
За намаляване на фалшивите сигнали (например при разклащане в транспорт) се прилагат допълнителни критерии: минимална амплитуда на крачката (обикновено >1,2 m/s²), минимален интервал между крачките (300–400 ms за ходене) и проверка на периодичността на сигнала чрез автокорелация. Ако времевите интервали между пиковете са нерегулярни, последователността се маркира като случайни движения и не се брои като крачки.
Основният алгоритъм за детекция на крачки използва метода на прагово откриване: системата търси моменти, когато сигналът на акселерометъра надвишава зададен праг и след това се връща към ниво на покой. Всяко такова събитие се счита за потенциална крачка. Съществуват два подхода: детекция на пикове (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
// Актуализиране на UI с броя крачки
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 km/h), фалшиви сигнали от пътуване с транспорт, намаляване на точността при бягане с ниска скорост (джогинг) и влияние на жестикулацията при говорене. За минимизиране на грешките съвременните приложения използват комбинация от сензори (акселерометър + жироскоп + барометър) и машинно самообучение за отстраняване на артефакти. Барометърът, например, помага за определяне на катерене по стълби и промяна на височина, като изключва фалшиви крачки в асансьора.
Често задавани въпроси
Крачкомерът в телефона използва акселерометър, който регистрира ускорение при всяка крачка. Алгоритъмът анализира пиковете на ускорение по три оси, филтрира шума и определя броя на крачките. Съвременните модели също използват жироскоп и машинно самообучение за повишаване на точността и класификация на активността.
При носене на смартфона в джоб на панталон точността достига 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също