گامشمار (pedometer) در برنامههای موبایل — یک مکانیزم نرمافزاری-سختافزاری برای شمارش گامهای کاربر بر اساس دادههای شتابسنج و ژیروسکوپ است. گوشیهای هوشمند مدرن از الگوریتمهای یادگیری ماشین در ترکیب با حسگرها برای تشخیص دقیق راه رفتن، دویدن و سایر انواع فعالیت بدنی استفاده میکنند. بر اساس دادههای Apple HealthKit Documentation, 2025، دقت شمارش گام در دستگاههای مدرن در راه رفتن عادی به ۹۵–۹۷٪ میرسد.
مهمترین نکات
گامشمار (pedometer) در برنامههای موبایل — تابعی است که تعداد گامهای کاربر را بر اساس دادههای دریافتی از حسگرهای حرکتی داخلی گوشی هوشمند تعیین میکند. بر خلاف گامشمارهای مکانیکی گذشته، گامشمار موبایل از حسگرهای میکروالکترومکانیکی (MEMS) و الگوریتمهای پردازش دیجیتال سیگنال برای شمارش دقیق حرکات استفاده میکند. پیادهسازیهای مدرن نه تنها گامها را میشمارند، بلکه فعالیت را طبقهبندی میکنند: راه رفتن، دویدن، بالا رفتن از پله.
یکپارچهسازی گامشمار در دستگاههای موبایل با ظهور پردازندهی حرکتی M7 در iPhone 5s در سال ۲۰۱۳ ممکن شد که به طور مداوم دادههای حسگرها را با حداقل مصرف انرژی جمعآوری میکرد. امروزه تمام گوشیهای هوشمند مدرن از شمارش گام در سطح هاب حسگر پشتیبانی سختافزاری دارند — یک تراشه اختصاصی که دادههای حسگرهای اینرسی را بدون بیدار کردن پردازنده اصلی پردازش میکند.
شمارش گام در گوشی هوشمند بر اساس تحلیل سیگنالهای شتابسنج است که شتاب دستگاه را در سه محور عمود بر هم (X، Y، Z) اندازهگیری میکند. هنگام راه رفتن، هر گام یک الگوی مشخص شتاب ایجاد میکند: ابتدا یک پیک رو به بالا هنگام بلند کردن پا، سپس یک پیک رو به پایین هنگام فرود. فرکانس گامها (کادنس) برای راه رفتن ۱۰۰–۱۳۰ گام/دقیقه و برای دویدن ۱۵۰–۱۸۰ گام/دقیقه و دامنه شتاب ۲–۶ متر/ثانیه² است.
سیگنال خام از شتابسنج حاوی نویز و تداخل فرکانس بالا است، بنابراین اولین مرحله پردازش — فیلتر پایینگذر (low-pass filter) با فرکانس قطع ۳–۵ هرتز است. پس از فیلتر، بردار شتاب محاسبه میشود: a = sqrt(x² + y² + z²) که شتاب مرتبط با حرکت را بدون توجه به جهت دستگاه استخراج میکند. سپس الگوریتم ماکزیممهای محلی در سیگنال را تشخیص میدهد — هر ماکزیمم مربوط به یک گام است.
برای کاهش تشخیصهای نادرست (مثلاً هنگام تکان خوردن در وسایل نقلیه) معیارهای اضافی اعمال میشوند: حداقل دامنه گام (معمولاً >۱٫۲ متر/ثانیه²)، حداقل فاصله بین گامها (۳۰۰–۴۰۰ میلیثانیه برای راه رفتن) و بررسی تناوب سیگنال از طریق خودهمبستگی. اگر فواصل زمانی بین پیکها نامنظم باشد، دنباله به عنوان حرکات تصادفی علامتگذاری شده و به عنوان گام محاسبه نمیشود.
الگوریتم پایه تشخیص گام از روش تشخیص آستانهای استفاده میکند: سیستم به دنبال لحظاتی میگردد که سیگنال شتابسنج از آستانه تعیینشده عبور کرده و سپس به سطح سکون بازمیگردد. هر چنین رویدادی یک گام بالقوه محسوب میشود. دو رویکرد وجود دارد: تشخیص پیک (peak detection) و عبور از صفر (zero-crossing). تشخیص پیک ماکزیممهای سیگنال را ثبت میکند، و zero-crossing — لحظات عبور سیگنال از مقدار میانگین که وابستگی کمتری به دامنه گام دارد.
الگوریتمهای مدرن شمارش گام از آستانه تطبیقی استفاده میکنند که به طور خودکار با سبک راه رفتن کاربر تنظیم میشود. سیستم واریانس سیگنال را در ۲–۳ ثانیه آخر تحلیل کرده و آستانه پویا را به عنوان انحراف معیار (RMS) ضربشده در ضریب محاسبه میکند. این امکان را میدهد که گامها را به درستی بشمارد هم در هنگام قدم زدن آهسته و هم در دویدن پرانرژی بدون کالیبراسیون متقابل بین انواع فعالیت.
پیادهسازیهای مدرن گامشمار نه تنها از تشخیص پیک، بلکه از یادگیری ماشین برای طبقهبندی الگوهای حرکتی استفاده میکنند. مدلهای شبکه عصبی بر روی هزاران ساعت ضبط حرکات واقعی از سناریوهای مختلف آموزش میبینند: راه رفتن روی سطح صاف، بالا رفتن از پله، دویدن، سفر با وسایل نقلیه. ویژگیهای ورودی سریهای زمانی شتابسنج و ژیروسکوپ هستند و خروجی — احتمال اینکه بخش فعلی سیگنال مربوط به حرکت انسان باشد.
بر اساس دادههای تحقیق Google Activity Recognition، مدلهای مبتنی بر شبکههای عصبی پیچشی (CNN) به دقت تشخیص راه رفتن ۹۸٪ در مجموعه دادههای آزمایشی میرسند. در دستگاههای Apple از Core ML با مدل Activity Classification استفاده میشود که بر روی دادههای بیش از ۱۰۰ هزار داوطلب آموزش دیده است. مدلهای بهینهشده مستقیماً روی دستگاه کار میکنند (استنتاج روی دستگاه)، که پردازش فوری و حفظ حریم خصوصی کاربر را تضمین میکند.
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) دادههای حسگرها را در سطح سختافزار پردازش میکند که مصرف انرژی را ۸۰٪ در مقایسه با پردازش نرمافزاری کاهش میدهد.
در 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) {}
}
دقت گامشمار به چند عامل بستگی دارد: محل قرارگیری گوشی هوشمند (در دست، جیب یا کیف)، نوع فعالیت (راه رفتن، دویدن، بالا رفتن از پله) و کیفیت حسگرها. هنگام حمل گوشی در جیب شلوار، دقت ۹۳–۹۷٪، در کیف یا کولهپشتی به ۷۰–۸۵٪ کاهش مییابد. سبک راه رفتن کاربر نیز بر دقت تأثیر میگذارد: راه رفتن ریز با دامنه شتاب کم خطاهای بیشتری نسبت به راه رفتن منظم ایجاد میکند.
محدودیتهای اصلی گامشمارهای موبایل عبارتند از: عدم امکان شمارش گام در حرکت بسیار آهسته (<۱٫۵ کیلومتر/ساعت)، تشخیصهای نادرست ناشی از سفر با وسایل نقلیه، کاهش دقت در دویدن با سرعت کم (دوی آهسته) و تأثیر حرکات دست هنگام صحبت. برای به حداقل رساندن خطاها، برنامههای مدرن از ترکیب حسگرها (شتابسنج + ژیروسکوپ + فشارسنج) و یادگیری ماشین برای حذف آرتیفکتها استفاده میکنند. فشارسنج، به عنوان مثال، به تعیین بالا رفتن از پله و تغییر ارتفاع کمک میکند و گامهای نادرست در آسانسور را حذف میکند.
سوالات متداول
گامشمار در تلفن از شتابسنج استفاده میکند که شتاب را در هر گام ثبت میکند. الگوریتم پیکهای شتاب را در سه محور تحلیل میکند، نویز را فیلتر کرده و تعداد گامها را تعیین میکند. مدلهای مدرن همچنین از ژیروسکوپ و یادگیری ماشین برای افزایش دقت و طبقهبندی فعالیت استفاده میکنند.
هنگام حمل گوشی در جیب شلوار، دقت در راه رفتن عادی به ۹۵–۹۷٪ میرسد. در کیف یا کولهپشتی دقت به ۷۰–۸۵٪ کاهش مییابد. سبک راه رفتن و نوع سطح نیز بر دقت تأثیر میگذارند — زمین ناهموار میتواند خطاهایی تا ۱۰–۱۵٪ ایجاد کند.
بله، گامشمار کاملاً مستقل بدون اتصال به اینترنت کار میکند. تمام محاسبات با استفاده از حسگرهای داخلی روی دستگاه انجام میشود. اینترنت فقط برای همگامسازی دادهها با سرویسهای ابری برنامههای تناسب اندام یا نمایش نقشه مسیر ممکن است مورد نیاز باشد.
برنامههای مختلف از الگوریتمهای متفاوت پردازش دادههای حسگرها، آستانههای تشخیص گام و روشهای فیلتراسیون استفاده میکنند. برخی برنامهها گامها را بر اساس دادههای خام شتابسنج میشمارند، برخی دیگر — از طریق API سیستم (TYPE_STEP_COUNTER)، و تفاوت در شمارش میتواند به ۱۰–۱۵٪ برسد.
در Android برای دسترسی به گامشمار از حسگر TYPE_STEP_COUNTER از طریق Sensor API استفاده کنید — این حسگر تعداد تجمعی گامها را از آخرین راهاندازی مجدد دستگاه ارائه میدهد. برای دسترسی به گامهای یک روز خاص، Google Fit API را با نوع داده TYPE_STEP_COUNT_DELTA یکپارچه کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید