چرا داده های سنسور در برنامه های تناسب اندام اهمیت دارد

دستگاه های مدرن iOS یک آرایه از سنسورها را که می توانند حرکت، مکان و حتی ضربان قلب را تشخیص دهند، ترکیب این سنسورها به یک برنامه ردیابی تناسب اندام، داده های سخت افزاری خام را به معیارهای معنی دار مانند شمارش گام، فاصله سفر، کالری سوخته و نقشه های تناسب اندام، با استفاده از برنامه های سنسور پاسخگو (FLT:0Core Motion [F:1 و F:2] تغییر مکان یابی (F3) می تواند بازخوردهای دقیق را ایجاد کند و بازخوردهای حرکتی را ایجاد کند.

سنسور های کلیدی موجود در دستگاه های iOS

قبل از غواصی در کد، مهم است که بدانید چه سنسور هایی در اختیار شما قرار دارند:

  • شتاب سنج [FLT 1] - نیروهای شتاب سنج را اندازه گیری می کند، برای تشخیص گام و جهت گیری استفاده می شود.
  • ژیروسکوپ - چرخش را اندازه گیری می کند، به طبقه بندی فعالیت و تشخیص سقوط کمک می کند.
  • [[۱] [۱۰] [۱۰] [۱۰] [۱۰] [۱۰]] [۱۰]]] [۱۰] [۱]] [۱۰]] [۱۰]] [۱۰]] [۱]] [۱۰]] [۱]]]- مکان دقیق، سرعت و مسیر را فراهم می کند.
  • [[۱] [۱۰] [[۱۰]]] [FLT: ۱] [۱]]] - جهت یابی قطب نما، مفید برای ویژگی های ناوبری.
  • بارومتر - تغییرات ارتفاع را اندازه گیری می کند، که برای شمارش کف و افزایش ارتفاع استفاده می شود.
  • سنسور ضربان قلب - در دسترس از طریق اپل Watch یا دستگاه های بلوتوث شخص ثالث، یکپارچه از طریق HealthKit یا Core بلوتوث.

هر سنسور نیاز به چارچوب های خاص دارد: حرکت اصلی برای شتاب سنج، ژیروسکوپ و مغناطیسومتر؛ مکان اصلی برای GPS و بارومتر؛ HealthKit برای ضربان قلب و سایر داده های بهداشتی.

تنظیم محیط توسعه خود را

با نصب Xcode (در دسترس از فروشگاه App Mac) و ایجاد یک پروژه جدید iOS شروع کنید. App قالب و اطمینان حاصل کنید که یک حساب توسعه دهنده اپل برای تست در دستگاه های واقعی سنسور داده ها اغلب به سخت افزار واقعی نیاز دارد؛ شبیه ساز ها پشتیبانی سنسور محدود دارند (به عنوان مثال، هیچ GPS ارتفاع، هیچ سر و صدای واقعی).

در پروژه Xcode شما قابلیت های لازم را در زیر (FLT:0) تقویت وamp فعال کنید؛ قابلیت ها

  • خدمات ثبت نام برای نظارت بر GPS و منطقه.
  • HealthKit اگر قصد دارید داده های بهداشتی را بخوانید / بنویسید.
  • حالت های Background - بررسی "به روز رسانی های ثبت نام" و "Audio، AirPlay و تصویر در تصویر" اگر بازخورد صوتی مورد نیاز است.

به عنوان مثال، گزینه های مناسب و مناسب را اضافه کنید.

درخواست مجوز راه راست

کاربران به طور فزاینده ای آگاه هستند.همیشه اجازه های درخواست در نقطه ای که در آن ویژگی در واقع مورد نیاز است، نه در راه اندازی، برای مجوز مکان، استفاده از CLLocationManager :

import CoreLocation

let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()

برای داده های متحرک، از ]CMMotionManager [ استفاده کنید، توجه داشته باشید که داده های متحرک نیازی به مجوز صریح کاربر ندارند (این دستگاه را به عنوان واسطه دستگاه در نظر گرفته می شود)، اما هنوز باید توضیح دهید که چرا شما به آن در سیاست حفظ حریم خصوصی خود نیاز دارید.

اجرای مجموعه داده های سنسور

جمع آوری داده ها هسته برنامه تناسب اندام شما است که در زیر ما مجموعه حرکت و مکان را پوشش می دهیم.

Accelerometer و Gyroscope داده ها با Core Motion

از استفاده کنید تا به روز رسانی را شروع کنید، فاصله ای را انتخاب کنید که دقت و عمر باتری را متعادل کند، برای شمارش گام، 1/50 ثانیه (20 متر) معمول است، اما برای به روز رسانی UI، 1/10 ثانیه کافی است.

import CoreMotion

let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 0.1
motionManager.startAccelerometerUpdates(to: .main) { (data, error) in
 guard let accelData = data else { return }
 // Use accelData.acceleration.x, .y, .z
}

برای ژیروسکوپ و مغناطیس سنج، روش های مشابه وجود دارد: و اگر شما نیاز به نگرش دستگاه (تراژد نسبت به گرانش)، استفاده از که ترکیبی از شتاب سنج، ژیروسکوپ، و داده های مغناطیسومتر.

GPS و داده های موقعیت مکانی با Core Location

در این میان، یک بار دیگر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر تنظیم شده است.

locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.distanceFilter = 5 // meters
locationManager.startUpdatingLocation()

استفاده از روش نمایندگی (FLT 11) برای پردازش مختصات جدید.استفاده از [FLT:horizontalAccuracy [ اموال برای فیلتر کردن خواندن کیفیت پایین.

پردازش داده های سنسور به معیارهای کاربردی

داده های سنسور خام پر سر و صدا است. مراحل پردازش معمولا شامل فیلترینگ، کالیبراسیون و محاسبه است.

شمارش مرحله از Accelerometer

استفاده از یک الگوریتم تشخیص اوج در اندازه شتاب.یک رویکرد مشترک برای محاسبه هنجار Euclidean (x2+y2+z2)، یک فیلتر با حرکت بالا برای حذف گرانش، سپس تشخیص قله ها بالاتر از آستانه برای تولید، در نظر گرفتن استفاده از اپل ساخته شده (FLT0CMPedometer[۱۰] که برای حذف گرانش ۱:۱ و بدون نیاز به شناسایی خود، فراهم می کند.

if CMPedometer.isStepCountingAvailable() {
 var pedometer = CMPedometer()
 pedometer.startUpdates(from: Date()) { (data, error) in
 if let steps = data?.numberOfSteps {
 // update UI
 }
 }
}

در این میان، |CMPedometer]] می تواند فاصله، سرعت و کف را افزایش دهد.

طبقه بندی فعالیت

از [FLT:]CMMotionActivityManager [FLT 1] برای طبقه بندی خودکار حالت حرکت کاربر (پیاده روی، دویدن، دوچرخه سواری، ثابت) استفاده کنید، این امر نیاز به الگوریتم های تشخیص جداگانه را کاهش می دهد و زمینه سطح بالایی را فراهم می کند.

let activityManager = CMMotionActivityManager()
activityManager.startActivityUpdates(to: .main) { (activity) in
 if activity?.walking == true {
 // treat as walking
 } else if activity?.running == true {
 // treat as running
 }
}

فاصله و سرعت از GPS

فاصله بین نقاط متوالی مکان با استفاده از راه (از: روش در CLLocation. Sumage برای به دست آوردن کل فاصله در دسترس است (FLT:14 اموال (m / S) فیلتر کردن سرعت های غیر محتمل (به عنوان مثال، >؛ 30 متر / یا برای فعالیت انسان).

نمایش داده ها: نمودارها و نقشه ها

بازخورد بصری کاربران را با انگیزه نگه می دارد، برای نقشه های مسیر، استفاده از MMapView و ایجاد یک پلی خط اتصال ضبط مختصات ضبط شده برای معیارهای عملکرد، استفاده از .2] FLT:3 [FLT3] (یک کتابخانه منبع باز محبوب) و یا اپل Swi Charts [F]، سرعت متوسط (شکل 16)

import MapKit

let polyline = MKPolyline(coordinates: &coordinates, count: coordinates.count)
mapView.addOverlay(polyline)

اگر از طریق HealthKit یا Bluetooth به هم متصل شده اید، یک نمودار زمان واقعی را با استفاده از یک دید (FLT:0WK InterfaceGraphic یا SwiftUI Chart] نمایش دهید.

مدیریت به روز رسانی های پس زمینه

برنامه های تناسب اندام اغلب نیاز به جمع آوری داده ها در هنگام برنامه در پس زمینه فعال (FLT:0) حالت های پس زمینه و انتخاب "به روز رسانی های ثبت نام" برای مکان پس زمینه مداوم، استفاده از [FLT16] برای نظارت قابل توجه (کمتر، باتری دوستانه)، استفاده کنید (FLT 17).

برای داده های متحرک، به روز رسانی های پس زمینه محدود هستند.سیستم ممکن است به روز رسانی حرکت را تنها در حالی که برنامه در پیش زمینه یا مدت کوتاهی پس از به روز رسانی مکان است، برای بهبود قابلیت اطمینان، در نظر گرفتن استفاده از CLActivityType تنظیم شده برای اشاره به سیستم است که داده های محل مربوط به تمرین است.

ذخیره سازی داده ها و ادغام HealthKit

ذخیره سازی اطلاعات به طور مداوم

  • داده های هسته ای [FLT 1 ] برای اشیاء پیچیده و روابط خوب است.
  • [[۱] [۱۰] [۱۰] [۱۰] [۱] [۱]] - کنترل مستقیم SQL [۳]
  • [[۱] [۱۰] [۱] [۱۰] [۱] [۱]] [۳]] [۳] [۳] [۳]] [۳] [۳]] [۳] [۳] [۳] [۳]] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [
  • HealthKit - مخزن مرکزی اپل برای داده های بهداشتی.

برای ادغام HealthKit، ابتدا مجوز درخواست برای نوشتن داده های تمرینی و خواندن نمونه های مربوطه ( ضربان قلب، فاصله) سپس ایجاد یک HKWorkout شی و ذخیره آن را:

let healthStore = HKHealthStore()
let workout = HKWorkout(activityType: .running, start: startDate, end: endDate, duration: duration, totalEnergyBurned: energy, totalDistance: distance, metadata: nil)
healthStore.save(workout) { (success, error) in
 // handle
}

خواندن نمونه های ضربان قلب در طول تمرین می تواند به طور همزمان با استفاده از HKAnchoredObjectQuery یا HKOb]Query انجام شود.

بهینه سازی عمر باتری و عملکرد

استفاده مداوم از سنسور باتری را تخلیه می کند.

  • فواصل به روز رسانی - استفاده از فرکانس پایین تر برای به روز رسانی UI، تنها در صورت نیاز بالاتر است.
  • از فیلتر فاصله استفاده کنید برای GPS، تنظیم کنید به یک مقدار معقول (به عنوان مثال، 10 متر).
  • هنگامی که ثابت است، استفاده کنید ] ] برای تشخیص دوره های ثابت و توقف به روز رسانی GPS.
  • به روز رسانی های استنتاج شده - در iOS 6+، شما می توانید به روز رسانی مکان برای صرفه جویی در قدرت با استفاده از .
  • پردازش - جمع آوری داده ها در حافظه و نوشتن به طور دوره ای (به عنوان مثال، هر 10 دقیقه).

تست و Debugging Sensor Data

تست بر روی یک شبیه ساز محدود است.همیشه در دستگاه های واقعی برای اندازه گیری دقیق (ccelerometer، GPS و داده های ضربان قلب) تست از Xcode's Simulate Location ویژگی پیش زمینه برای آزمایش مسیرهای درایو آزاد، شما می توانید از حرکت (FLT:2Core Motion) استفاده کنید ابزار ضدعفونی کننده در زمان خواندن دستگاه را قادر می سازد تا با روش های اصلاح شده توسط پردازش فایل های پردازش شده توسط فایل های پردازش شده توسط فایل های پردازش شده در تنظیمات فایل های فایل های فایل های فایل های فایل های فایل های فایل های فایل های پردازش شده توسط فایل های فایل های پردازش شده توسط فایل های فایل های فایل های فایل های فایل های فایل های فایل های فایل های فایل های فایل های فایل های فایل های فایل های فایل های فایل های پردازش شده را بررسی کنید.

تجربه کاربری و ذهنیت حریم خصوصی

حریم خصوصی حیاتی است. دنبال کردن دستورالعمل های بررسی فروشگاه اپل و حفظ یک سیاست حریم خصوصی روشن است.هرگز داده های سنسور بدون رضایت صریح به اشتراک نگذارید.استفاده در پردازش دستگاه در صورت امکان برای تجزیه و تحلیل، ناشناس و جمع آوری.

تجربه کاربری باید شامل:

  • صفحه نمایش که استفاده از سنسور و مزایای آن را توضیح می دهد.
  • بازخورد زمان واقعی در طول تمرین (نشانه هایaudio، بازخورد های مشکوک).
  • توانایی بررسی، ویرایش و حذف داده های تمرین
  • عملکرد آفلاین – ذخیره داده ها به صورت محلی و همگام سازی زمانی که شبکه در دسترس است.

افزایش آینده

اضافه کردن:

  • در این میان، با استفاده از ، Apple Watch [FLT 1 ] برای ضربان قلب و پیگیری تمرین، ادغام می شود.
  • مدل های یادگیری ماشین (Core ML) برای تشخیص فعالیت های پیشرفته.
  • ویژگی های اجتماعی (رهبران، چالش ها) با استفاده از CloudKit
  • در این راستا، از طریق استفاده از |ARKit]] استفاده می شود.

نتیجه گیری

ساخت یک برنامه ردیابی تناسب اندام با ادغام داده های سنسور در iOS یک چالش ارزشمند است. [] با استفاده از Core Motion، Core Location و HealthKit، شما می توانید یک برنامه ایجاد کنید که بینش دقیق و قابل اجرا را در حالی که به حریم خصوصی کاربر احترام می گذارد، تمرکز بر کد تمیز، بهره وری باتری و یک تجربه کاربر یکپارچه است. شروع با گام کوچک شمارش و مکان، سپس گسترش ضربان قلب و تجزیه و تحلیل پیشرفته برای اسناد رسمی [F: