Een stappenteller (pedometer) in mobiele apps is een software-hardwaremechanisme voor het tellen van stappen van de gebruiker op basis van gegevens van de accelerometer en het gyroscoop. Moderne smartphones gebruiken algoritmen voor machinelearning in combinatie met sensoren voor het nauwkeurig bepalen van lopen, rennen en andere vormen van fysieke activiteit. Volgens gegevens van Apple HealthKit Documentation, 2025 bereikt de nauwkeurigheid van het tellen van stappen op moderne apparaten 95–97% bij normaal lopen.
Belangrijkste punten
Stappenteller (pedometer) in mobiele apps is een functie die het aantal stappen van de gebruiker bepaalt op basis van gegevens van de ingebouwde bewegingssensoren van de smartphone. In tegenstelling tot mechanische stappentellers uit het verleden, gebruikt de mobiele stappenteller micro-elektromechanische sensoren (MEMS) en algoritmen voor digitale signaalverwerking voor het nauwkeurig tellen van locomoties. Moderne implementaties tellen niet alleen stappen, maar classificeren ook de activiteit: lopen, rennen, traplopen.
Integratie van de stappenteller in mobiele apparaten werd mogelijk dankzij de komst in 2013 van de M7-bewegingscoprocessor in de iPhone 5s, die continu gegevens van sensoren verzamelde met minimaal energieverbruik. Tegenwoordig hebben alle moderne smartphones hardware-ondersteuning voor het tellen van stappen op het niveau van een sensorhub — een dedicated chip die gegevens van inertiële sensoren verwerkt zonder de hoofdprocessor te wekken.
Het tellen van stappen op een smartphone is gebaseerd op analyse van accelerometersignalen, die de versnelling van het apparaat langs drie loodrechte assen (X, Y, Z) meten. Bij het lopen creëert elke stap een karakteristiek versnellingspatroon: eerst een piek omhoog bij het optillen van het been, dan een piek omlaag bij het landen. De stapfrequentie (cadans) is 100–130 stappen/min voor lopen en 150–180 stappen/min voor rennen, en de versnellingsamplitude is 2–6 m/s².
Het ruwe signaal van de accelerometer bevat ruis en hoogfrequente storingen, daarom is de eerste verwerkingsstap een laagdoorlaatfilter (low-pass filter) met een afsnijfrequentie van 3–5 Hz. Na filtering wordt de versnellingsvector berekend: a = sqrt(x² + y² + z²), die de versnelling gerelateerd aan beweging extraheert, onafhankelijk van de oriëntatie van het apparaat. Vervolgens detecteert het algoritme lokale maxima in het signaal — elk maximum komt overeen met één stap.
Om vals alarm te verminderen (bijvoorbeeld bij schudden in het vervoer) worden extra criteria toegepast: minimale stapamplitude (gewoonlijk >1,2 m/s²), minimaal interval tussen stappen (300–400 ms voor lopen) en controle van de periodiciteit van het signaal via autocorrelatie. Als de tijdsintervallen tussen pieken onregelmatig zijn, wordt de reeks gemarkeerd als willekeurige bewegingen en niet als stappen geteld.
Het basisalgoritme voor stapdetectie gebruikt de drempeldetectiemethode: het systeem zoekt naar momenten waarop het accelerometersignaal een ingestelde drempel overschrijdt en vervolgens terugkeert naar het rustniveau. Elke dergelijke gebeurtenis wordt beschouwd als een potentiële stap. Er zijn twee benaderingen: piekdetectie (peak detection) en nuldoorgang (zero-crossing). Piekdetectie registreert de maxima van het signaal, en zero-crossing — de momenten waarop het signaal de gemiddelde waarde passeert, wat minder afhankelijk is van de stapamplitude.
Moderne stap-telalgoritmen gebruiken een adaptieve drempel die zich automatisch aanpast aan de loopstijl van de gebruiker. Het systeem analyseert de variantie van het signaal over de laatste 2–3 seconden en berekent de dynamische drempel als de standaarddeviatie (RMS) vermenigvuldigd met een coëfficiënt. Dit maakt het mogelijk om stappen correct te tellen zowel bij een langzame wandeling als bij krachtig rennen zonder kruiskalibratie tussen activiteitstypen.
Moderne implementaties van de stappenteller gebruiken niet alleen piekdetectie, maar ook machinelearning voor de classificatie van bewegingspatronen. Neurale netwerkmodellen worden getraind op duizenden uren aan opnames van echte bewegingen uit verschillende scenario's: lopen op een vlakke ondergrond, traplopen, rennen, reizen met vervoer. Invoerkenmerken zijn de tijdreeksen van de accelerometer en het gyroscoop, en de uitvoer is de waarschijnlijkheid dat het huidige signaalsegment overeenkomt met menselijke locomotie.
Volgens gegevens van Google Activity Recognition-onderzoek bereiken modellen op basis van convolutionele neurale netwerken (CNN) een nauwkeurigheid van 98% bij het herkennen van lopen op testdatasets. Op Apple-apparaten wordt Core ML gebruikt met het Activity Classification-model, getraind op gegevens van meer dan 100.000 vrijwilligers. Geoptimaliseerde modellen werken direct op het apparaat (on-device inference), wat zorgt voor directe verwerking en het behoud van de privacy van de gebruiker.
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 bijwerken met het aantal stappen
DispatchQueue.main.async {
// self.stepsLabel.text = "\(steps) stappen"
}
}
}
func stopTracking() {
pedometer.stopUpdates()
}
}
Op iOS wordt voor toegang tot de stappenteller de klasse CMPedometer uit het Core Motion-framework gebruikt. CMPedometer biedt niet alleen het aantal stappen, maar ook de afgelegde afstand, het aantal verdiepingen (klimmen), het wandeltempo en de activiteitstijd. Gegevens zijn beschikbaar zowel in realtime (startUpdates) als voor elke willekeurige periode in het verleden (queryPedometerData). De bewegingscoprocessor (M-serie) verwerkt sensorgegevens op hardwareniveau, wat het energieverbruik met 80% vermindert in vergelijking met softwarematige verwerking.
Op Android wordt het werken met de stappenteller gerealiseerd via twee hardwaresensoren: TYPE_STEP_COUNTER (cumulatieve stappenteller sinds het opstarten) en TYPE_STEP_DETECTOR (genereren van een gebeurtenis bij elke stap). TYPE_STEP_COUNTER vereist geen kalibratie en verbruikt geen processorenergie — gegevens worden hardwarematig bijgewerkt op het niveau van de sensorhub. Voor toegang tot de verzamelde stapstatistieken per dag wordt de Google Fit API gebruikt met de registratie 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) {}
}
De nauwkeurigheid van de stappenteller hangt af van verschillende factoren: de locatie van de smartphone (in de hand, zak of tas), het type activiteit (lopen, rennen, traplopen) en de kwaliteit van de sensoren. Bij het dragen van de smartphone in een broekzak bedraagt de nauwkeurigheid 93–97%, in een tas of rugzak daalt deze tot 70–85%. De loopstijl van de gebruiker beïnvloedt ook de nauwkeurigheid: kleine stapjes met een kleine versnellingsamplitude geven meer fouten dan rustig lopen.
De belangrijkste beperkingen van mobiele stappentellers zijn: het onvermogen om stappen te tellen bij zeer langzame beweging (<1,5 km/u), vals alarm door reizen met vervoer, verminderde nauwkeurigheid bij hardlopen met lage snelheid (draf) en de invloed van handgebaren tijdens het praten. Om fouten te minimaliseren gebruiken moderne apps een combinatie van sensoren (accelerometer + gyroscoop + barometer) en machinelearning om artefacten weg te filteren. De barometer helpt bijvoorbeeld bij het bepalen van traplopen en hoogteverandering, waardoor valse stappen in de lift worden uitgesloten.
Veelgestelde vragen
Stappenteller in de telefoon gebruikt de accelerometer, die bij elke stap de versnelling registreert. Het algoritme analyseert de versnellingspieken langs drie assen, filtert ruis en bepaalt het aantal stappen. Moderne modellen gebruiken ook het gyroscoop en machinelearning voor het verhogen van de nauwkeurigheid en classificatie van activiteit.
Bij het dragen van de smartphone in een broekzak bereikt de nauwkeurigheid 95–97% bij normaal lopen. In een tas of rugzak daalt de nauwkeurigheid tot 70–85%. De loopstijl en het type oppervlak beïnvloeden ook de nauwkeurigheid — oneffen terrein kan fouten tot 10–15% veroorzaken.
Ja, de stappenteller werkt volledig autonoom zonder internetverbinding. Alle berekeningen worden op het apparaat uitgevoerd met behulp van ingebouwde sensoren. Internet is alleen nodig voor het synchroniseren van gegevens met clouddiensten van fitnessapps of voor het weergeven van een routekaart.
Verschillende apps gebruiken verschillende algoritmen voor het verwerken van sensorgegevens, drempels voor stapdetectie en filteringsmethoden. Sommige apps tellen stappen op basis van ruwe accelerometergegevens, andere via systeem-API's (TYPE_STEP_COUNTER), en het verschil in telling kan oplopen tot 10–15%.
Op Android gebruikt u voor toegang tot de stappenteller de TYPE_STEP_COUNTER-sensor via de Sensor API — deze geeft het cumulatieve aantal stappen sinds de laatste herstart van het apparaat. Voor toegang tot stappen van een specifieke dag integreert u de Google Fit API met het gegevenstype TYPE_STEP_COUNT_DELTA.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook