Pedometr (krokomierz) w aplikacjach mobilnych — to programowo-sprzętowy mechanizm zliczania kroków użytkownika na podstawie danych z akcelerometru i żyroskopu. Nowoczesne smartfony wykorzystują algorytmy uczenia maszynowego w połączeniu z czujnikami do dokładnego określania chodzenia, biegania i innych rodzajów aktywności fizycznej. Według danych Apple HealthKit Documentation, 2025, dokładność zliczania kroków na nowoczesnych urządzeniach osiąga 95–97% przy normalnym chodzeniu.
Najważniejsze
Krokomierz (pedometr) w aplikacjach mobilnych — to funkcja określająca liczbę kroków użytkownika na podstawie danych pochodzących z wbudowanych czujników ruchu smartfona. W przeciwieństwie do mechanicznych krokomierzy z przeszłości, mobilny pedometr wykorzystuje mikroelektromechaniczne czujniki (MEMS) i algorytmy cyfrowego przetwarzania sygnałów do dokładnego zliczania lokomocji. Nowoczesne implementacje nie tylko liczą kroki, ale także klasyfikują aktywność: chodzenie, bieganie, wchodzenie po schodach.
Integracja krokomierza w urządzeniach mobilnych stała się możliwa dzięki pojawieniu się w 2013 roku koprocesora ruchu M7 w iPhone 5s, który nieprzerwanie zbierał dane z czujników przy minimalnym zużyciu energii. Dziś wszystkie nowoczesne smartfony mają sprzętowe wsparcie zliczania kroków na poziomie hubu czujników — wydzielonego układu przetwarzającego dane z czujników inercyjnych bez budzenia głównego procesora.
Zliczanie kroków na smartfonie opiera się na analizie sygnałów akcelerometru, który mierzy przyspieszenie urządzenia w trzech prostopadłych osiach (X, Y, Z). Podczas chodzenia każdy krok tworzy charakterystyczny wzór przyspieszenia: najpierw szczyt w górę przy unoszeniu nogi, następnie szczyt w dół przy lądowaniu. Częstotliwość kroków (kadencja) wynosi 100–130 kroków/min dla chodzenia i 150–180 kroków/min dla biegania, a amplituda przyspieszenia — 2–6 m/s².
Surowy sygnał z akcelerometru zawiera szumy i zakłócenia wysokoczęstotliwościowe, dlatego pierwszym etapem przetwarzania jest filtracja dolnoprzepustowa (low-pass filter) z częstotliwością odcięcia 3–5 Hz. Po filtracji obliczany jest wektor przyspieszenia: a = sqrt(x² + y² + z²), który wyodrębnia przyspieszenie związane z ruchem, niezależnie od orientacji urządzenia. Następnie algorytm wykrywa lokalne maksima w sygnale — każde maksimum odpowiada jednemu krokowi.
W celu zmniejszenia fałszywych alarmów (np. podczas potrząsania w transporcie) stosuje się dodatkowe kryteria: minimalna amplituda kroku (zwykle >1,2 m/s²), minimalny odstęp między krokami (300–400 ms dla chodzenia) oraz sprawdzanie periodyczności sygnału poprzez autokorelację. Jeśli odstępy czasowe między pikami są nieregularne, sekwencja jest oznaczana jako ruchy przypadkowe i nie jest liczona jako kroki.
Podstawowy algorytm wykrywania kroków wykorzystuje metodę detekcji progowej: system szuka momentów, gdy sygnał akcelerometru przekracza zadany próg, a następnie wraca do poziomu spoczynku. Każde takie zdarzenie jest uznawane za potencjalny krok. Istnieją dwa podejścia: detekcja pików (peak detection) i przejście przez zero (zero-crossing). Detekcja pików rejestruje maksima sygnału, a zero-crossing — momenty przejścia sygnału przez wartość średnią, co mniej zależy od amplitudy kroku.
Nowoczesne algorytmy zliczania kroków wykorzystują próg adaptacyjny, który automatycznie dostosowuje się do stylu chodzenia użytkownika. System analizuje wariancję sygnału z ostatnich 2–3 sekund i oblicza dynamiczny próg jako odchylenie standardowe (RMS) pomnożone przez współczynnik. Pozwala to poprawnie liczyć kroki zarówno podczas powolnego spaceru, jak i energicznego biegu bez krzyżowej kalibracji między rodzajami aktywności.
Nowoczesne implementacje krokomierza wykorzystują nie tylko detekcję pików, ale także uczenie maszynowe do klasyfikacji wzorców ruchu. Modele sieci neuronowych są trenowane na tysiącach godzin nagrań rzeczywistych ruchów z różnych scenariuszy: chodzenie po równej powierzchni, wchodzenie po schodach, bieganie, jazda środkami transportu. Cechami wejściowymi są szeregi czasowe akcelerometru i żyroskopu, a wyjściem — prawdopodobieństwo, że bieżący segment sygnału odpowiada lokomocji człowieka.
Według danych badania Google Activity Recognition, modele oparte na sieciach splotowych (CNN) osiągają dokładność rozpoznawania chodzenia na poziomie 98% na zestawach testowych. Na urządzeniach Apple używany jest Core ML z modelem Activity Classification, wytrenowanym na danych ponad 100 tysięcy ochotników. Zoptymalizowane modele działają bezpośrednio na urządzeniu (wnioskowanie na urządzeniu), co zapewnia błyskawiczne przetwarzanie i zachowanie prywatności użytkownika.
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
// Aktualizacja UI o liczbę kroków
DispatchQueue.main.async {
// self.stepsLabel.text = "\(steps) kroków"
}
}
}
func stopTracking() {
pedometer.stopUpdates()
}
}
Na iOS do dostępu do krokomierza używana jest klasa CMPedometer z frameworku Core Motion. CMPedometer dostarcza nie tylko liczbę kroków, ale także przebytą odległość, liczbę pięter (wzniesień), tempo chodzenia i czas aktywności. Dane są dostępne zarówno w czasie rzeczywistym (startUpdates), jak i za dowolny okres w przeszłości (queryPedometerData). Koprocesor ruchu (serii M) przetwarza dane czujników sprzętowo, co zmniejsza zużycie energii o 80% w porównaniu z przetwarzaniem programowym.
Na Androidzie praca z krokomierzem jest zrealizowana przez dwa czujniki sprzętowe: TYPE_STEP_COUNTER (skumulowany licznik kroków od momentu uruchomienia) i TYPE_STEP_DETECTOR (generowanie zdarzenia na każdy krok). TYPE_STEP_COUNTER nie wymaga kalibracji i nie zużywa energii procesora — dane są aktualizowane sprzętowo na poziomie hubu czujników. Do dostępu do zebranej statystyki kroków za dany dzień używany jest Google Fit API z zapisem 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) {}
}
Dokładność krokomierza zależy od kilku czynników: umiejscowienia smartfona (w ręku, kieszeni lub torbie), rodzaju aktywności (chodzenie, bieganie, wchodzenie po schodach) i jakości czujników. Przy noszeniu smartfona w kieszeni spodni dokładność wynosi 93–97%, w torbie lub plecaku spada do 70–85%. Na dokładność wpływa również styl chodzenia użytkownika: drobny krok z małą amplitudą przyspieszeń daje więcej błędów niż miarowe chodzenie.
Główne ograniczenia mobilnych krokomierzy obejmują: niemożność zliczania kroków przy bardzo wolnym ruchu (<1,5 km/h), fałszywe alarmy podczas jazdy środkami transportu, spadek dokładności przy biegu z niską prędkością (trucht) oraz wpływ gestykulacji podczas rozmowy. W celu minimalizacji błędów nowoczesne aplikacje wykorzystują kombinację czujników (akcelerometr + żyroskop + barometr) i uczenie maszynowe do odrzucania artefaktów. Barometr na przykład pomaga określać wchodzenie po schodach i zmianę wysokości, wykluczając fałszywe kroki w windzie.
Często zadawane pytania
Krokomierz w telefonie wykorzystuje akcelerometr, rejestrujący przyspieszenie przy każdym kroku. Algorytm analizuje szczyty przyspieszenia w trzech osiach, filtruje szumy i określa liczbę kroków. Nowoczesne modele wykorzystują również żyroskop i uczenie maszynowe w celu zwiększenia dokładności i klasyfikacji aktywności.
Podczas noszenia smartfona w kieszeni spodni dokładność osiąga 95–97% przy zwykłym chodzeniu. W torbie lub plecaku dokładność spada do 70–85%. Na dokładność wpływa również styl chodzenia i rodzaj powierzchni — nierówny teren może powodować błędy do 10–15%.
Tak, krokomierz działa całkowicie autonomicznie bez połączenia z internetem. Wszystkie obliczenia są wykonywane na urządzeniu z wykorzystaniem wbudowanych czujników. Internet może być potrzebny tylko do synchronizacji danych z chmurowymi usługami aplikacji fitness lub do wyświetlenia mapy trasy.
Różne aplikacje używają różnych algorytmów przetwarzania danych czujników, progów detekcji kroków i metod filtracji. Niektóre aplikacje liczą kroki na podstawie surowych danych akcelerometru, inne — przez systemowe API (TYPE_STEP_COUNTER), a różnica w zliczeniach może sięgać 10–15%.
Na Androidzie do dostępu do krokomierza użyj czujnika TYPE_STEP_COUNTER przez Sensor API — dostarcza on skumulowaną liczbę kroków od momentu ostatniego restartu urządzenia. Aby uzyskać dostęp do kroków za konkretny dzień, zintegruj Google Fit API z typem danych TYPE_STEP_COUNT_DELTA.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również