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
// Обновление 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 км/ч), ложные срабатывания от поездки в транспорте, снижение точности при беге на низкой скорости (трусца) и влияние жестикуляции при разговоре. Для минимизации ошибок современные приложения используют комбинацию сенсоров (акселерометр + гироскоп + барометр) и машинное обучение для отсеивания артефактов. Барометр, например, помогает определять подъём по лестнице и изменение высоты, исключая ложные шаги на лифте.
Часто задаваемые вопросы
Шагомер в телефоне использует акселерометр, фиксирующий ускорение при каждом шаге. Алгоритм анализирует пики ускорения по трём осям, фильтрует шумы и определяет количество шагов. Современные модели также используют гироскоп и машинное обучение для повышения точности и классификации активности.
При ношении смартфона в кармане брюк точность достигает 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 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также