Core Motion: özü, hareket sensörleri ve veri işleme

Yazar: IT Sectr Yayınlanma: 2026-03-25 Okuma süresi: 8 dk

Core Motion framework'ü, Apple cihazlarında ivmeölçer, jiroskop, manyetometre ve pedometre verilerine erişim sağlayan bir iOS sistem bileşenidir. Apple Developer Documentation, 2025'e göre, framework sensörlerin ham verilerini işler ve bunları anlaşılır metrikler — ivme, açısal hız, yön ve adım sayısına dönüştürür. Tüm hareket sensörleri için tek bir API, geliştiricilerin pedometreler, fitness uygulamaları ve cihaz eğme kontrollü oyunlar oluşturmasına olanak tanır.

Önemli Noktalar

  • Core Motion — iPhone ve iPad'in hareket sensörlerinden veri işlemek için Apple framework'ü.
  • CMMotionManager — ivmeölçer, jiroskop ve manyetometreye erişim için merkezi sınıf.
  • CMAltimeter — göreceli yükseklik ve basınç değişimi verilerini almak için sınıf.
  • CMPedometer — adım sayısı, kat edilen mesafe ve hareket hızını saymak için sınıf.
  • CMDeviceMotion — yerçekimi filtrelemesiyle birleştirilmiş veriler (userAcceleration).

Core Motion Nedir?

Core Motion, cihazın hareket sensörleriyle çalışmak için iOS 4'te tanıtılan bir Apple sistem framework'üdür. İvmeölçer, jiroskop, manyetometre ve pedometreye erişim için birleşik bir arayüz sağlayarak geliştiriciyi düşük seviyede donanım sürücüleriyle çalışma zorunluluğundan kurtarır.

Core Motion'ın temel avantajı, verilerin donanım filtrelemesidir. Framework, ivmeölçer ve jiroskop okumalarını otomatik olarak birleştirerek yerçekimi bileşeni olmadan saf userAcceleration'ı hesaplar ve ayrıca cihazın uzaydaki yönünü kuaterniyonlar ve Euler açıları şeklinde sağlar.

Apple WWDC 2023'e göre, Core Motion App Store'daki fitness uygulamalarının %80'inden fazlasında kullanılmaktadır. Framework, güç tüketimi için optimize edilmiştir — abone olmadığında sensör yoklama frekansı otomatik olarak düşer ve cihazın pil ömrünü uzatır.

Önemli bir mimari özellik, ana A serisi işlemciden bağımsız olarak hareket sensörü verilerini işleyen M serisi yardımcı işlemcinin (Motion coprocessor) kullanılmasıdır. M7 çipinden (iPhone 5S) başlayarak, yardımcı işlemci sürekli olarak ivmeölçer ve jiroskop verilerini toplar ve CMPedometer ile CMAltimeter'ın 1 mW'den az tüketimle kilitli ekranda arka planda çalışmasına olanak tanır. Bu, donanım izolasyonu sayesinde mümkün olmuştur: yardımcı işlemcinin kendi kalıcı olmayan belleği ve ana sistemden bağımsız veri yolu vardır.

Core Motion Mimarisi

Core Motion mimarisi, CMMotionManager aracılığıyla tekil nesne modeli (singleton) üzerine kurulmuştur. Uygulama, yöneticinin tek bir örneğini alır ve bu sayede güncelleme frekansını yapılandırır, her sensör türü için veri toplamayı başlatır veya durdurur. Veriler, belirtilen aralıkta closure blokları aracılığıyla gelir.

Framework, veri alımında iki mod kullanır: pull (startAccelerometerUpdates ile aktif yoklama) ve push (startAccelerometerUpdatesToQueue ile pasif alma). Push modu, UI uygulamaları için tercih edilir çünkü veriler ana iş parçacığını bloke etmeden belirtilen kuyruğa teslim edilir.

swift
import CoreMotion

let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 0.1

guard motionManager
    .isAccelerometerAvailable else { return }

motionManager.startAccelerometerUpdates(
    to: OperationQueue.current()!
) { data, _ in
    guard let accel = data?.acceleration else { return }
    print("X: \(accel.x), Y: \(accel.y), Z: \(accel.z)")
}

Core Motion Sensörleri

Core Motion dört sensör kategorisine erişim sağlar: ivmeölçer üç eksen boyunca doğrusal ivmeyi ölçer, jiroskop açısal dönüş hızını ölçer ve manyetometre pusula için manyetik alan gücünü ölçer. Dördüncü kategori, tüm sensörlerden filtrelenmiş okumaları içeren birleşik CMDeviceMotion verileridir.

CMDeviceMotion geliştirme için en değerli sınıftır. userAcceleration (yerçekimsiz ivme), rotationRate (dönüş hızı), magneticField (manyetik alan vektörü) ve attitude (kuaterniyon veya Euler açıları olarak cihaz yönü) sağlar. Attitude'ı hesaplamak için Core Motion, tamamlayıcı filtreye benzer bir algoritma kullanarak jiroskop ve ivmeölçerin sensör füzyonunu yapar.

Manyetometre, jiroskop sürüklenme düzeltmesi için kullanılır. Saf bir jiroskop, zamanla sıcaklık sürüklenmesi ve gürültü nedeniyle hata biriktirir — manyetometre ve ivmeölçer bu hatayı düzelterek statik konumda 1–2 dereceye kadar yön doğruluğu sağlar.

swift
guard motionManager
    .isDeviceMotionAvailable else { return }

motionManager.deviceMotionUpdateInterval = 1.0 // 1 Hz

motionManager.startDeviceMotionUpdates(
    using: .xArbitraryZVertical,
    to: OperationQueue.current()!
) { motion, _ in
    guard let attitude = motion?.attitude else { return }
    print("Roll: \(attitude.roll)")
    print("Pitch: \(attitude.pitch)")
    print("Yaw: \(attitude.yaw)")
}

Pedometre ve Altimetre

CMPedometer — adım sayısı, kat edilen mesafe ve hareket temposunu saymak için sınıftır. M serisi hareket yardımcı işlemcisinde (M7/M8/M9/M10/M11) donanım işleme ile ivmeölçer verilerini kullanır. Bu, minimum güç tüketimiyle arka planda çalışmasına olanak tanır — sürekli 8 saatlik takipte yaklaşık %1 pil.

CMAltimeter — iPhone 6 ve sonrasında bulunan barometreye dayalı olarak göreceli yüksekliği belirlemek için sınıftır. Başlangıç noktasına göre yükseklik değişimini yaklaşık 1 metre doğrulukla gösterir. Fitness uygulamalarında kat saymak ve navigasyon uygulamalarında yükseklik değişimlerini belirlemek için kullanılır.

CMPedometer verileri, mevcut okumalar için en fazla 5 saniye gecikmeyle kullanılabilir. Geçmiş veriler için, queryPedometerData aracılığıyla 7 güne kadar veri alınabilir. Pedometre otomatik olarak yürüme, koşma ve bisiklete binmeyi tanır — bu aktivite türleri, türe göre filtreleme ile queryPedometerData aracılığıyla kullanılabilir.

Doğruluk ve Sınırlamalar

CMPedometer'ın doğruluğu normal yürüyüşte yaklaşık %95 olup koşuda %90'a düşer. Doğruluk şunlardan etkilenir: telefonun cepte veya sırtta konumu, ayakkabı türü ve yüzey. Apple, açık havada mesafe belirleme için Core Location ile birlikte CMPedometer kullanılmasını önerir — GPS daha doğru mesafe sağlarken Core Motion adım sayımını yönetir.

swift
let pedometer = CMPedometer()

guard CMPedometer
    .isStepCountingAvailable() else { return }

pedometer.startUpdates(from: Date()) { data, _ in
    guard let pedData = pedometerData else { return }
    print("Adımlar: \(pedData.numberOfSteps)")
    print("Mesafe: \(pedData.distance)")
}

// Altimetre erişimi
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
    to: OperationQueue.current()!
) { data, _ in
    print("Yükseklik: \(data?.relativeAltitude)")
}

Core Motion'ın Uygulamaya Entegrasyonu

Core Motion entegrasyonu özel izinler veya entitlement gerektirmez — sadece framework içe aktarımını ekleyin ve bir CMMotionManager örneği oluşturun. Ancak, iOS 11'den itibaren CMPedometer için CMStepCounter aracılığıyla veya sistem izin diyaloğu ile CMPedometer kullanarak yetkilendirme gerekir.

Entegrasyon süreci şunları içerir: CMMotionManager oluşturma, isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable ile sensör kullanılabilirliğini kontrol etme, güncelleme aralığını ayarlama ve veri toplamayı başlatma. Verilere ihtiyaç kalmadığında stopAccelerometerUpdates ile güncellemeleri durdurmak önemlidir — bu güç tüketimi için kritiktir.

Arka plan işlemi için CMPedometer ve CMAltimeter ek yapılandırma gerektirmez — hareket yardımcı işlemcisini kullanırlar. CMMotionManager için arka plan işlemi mevcut değildir — veriler yalnızca uygulama etkin ve ön plandayken toplanır. CMPedometer için tek koşul, iOS'tan arka plan güncellemeleri aboneliğini başlatmak için uygulamanın kurulumdan sonra kullanıcı tarafından en az bir kez başlatılmış olmasıdır.

Güç Tüketimi Optimizasyonu

Core Motion uyarlanabilir yoklama frekansını destekler: uygulama gerçek zamanlı veriye ihtiyaç duymuyorsa, 100 Hz yerine 1–5 Hz aralığı ayarlamak yeterlidir. Fitness uygulamaları için optimum frekans, CMMotionManager için 10 Hz ve CMPedometer için 1 Hz'dir. Apple, doğru çalışma için gereken minimum frekansa düşürmeyi önerir.

Eğme kontrollü oyunlar için yumuşak yanıt sağlamak amacıyla 60–100 Hz frekans gereklidir. Bu durumda, ayrı bir kuyrukla startDeviceMotionUpdates kullanmak ve verileri mümkün olduğunca hızlı işlemek önemlidir. Apple'a göre, 60 Hz, 30 Hz'den yaklaşık 2 kat daha fazla güç tüketir.

Core Motion ile çalışırken cihaz uyumluluğunu dikkate almak önemlidir: jiroskop iPhone 3GS ve 1. nesil iPad'de bulunmaz, manyetometre hücresel modülü olmayan tüm iPad'lerde bulunmaz. Sensör kullanılabilirliğini kontrol etmek için CMMotionManager sınıfının statik yöntemleri isAccelerometerAvailable, isGyroAvailable ve isDeviceMotionAvailable kullanılır. Simülatörde Core Motion test verileri döndürür — gerçek bir sensörde hata ayıklama için her zaman fiziksel bir Apple cihazı gereklidir.

swift
// Fitness uygulaması için optimum ayar
motionManager.deviceMotionUpdateInterval = 0.1 // 10 Hz

motionManager.startDeviceMotionUpdates(
    to: .main
) { [weak self] motion, error in
    guard let self = self,
          let motion = motion else { return }

    if motion.userAcceleration.magnitude() > 2.0 {
        self.detectedSignificantMovement()
    }
}

Sıkça Sorulan Sorular

Core Motion iPad ve iPod touch'ta çalışır mı?

Evet, Core Motion gerekli sensörlere sahip tüm Apple cihazlarında çalışır. İvmeölçer tüm iPhone, iPad ve iPod touch'ta bulunur. Jiroskop tüm iPhone 4 ve sonrası, iPad 2 ve sonrasında bulunur. Manyetometre yalnızca iPhone'da bulunur, iPad'de bulunmaz. Barometre iPhone 6 ve sonrasında bulunur.

Core Motion pil ömrünü nasıl etkiler?

Pil üzerindeki etki yoklama frekansına bağlıdır. 100 Hz'de Core Motion saatte yaklaşık %5–7 pil tüketir. 10 Hz'de — saatte yaklaşık %1–2. Hareket yardımcı işlemcisindeki CMPedometer, 8 saatlik çalışmada %1'den az tüketir. Apple, veri gerekmediğinde güncellemeleri durdurmayı önerir.

Core Motion bir pedometre oluşturmak için kullanılabilir mi?

Evet, CMPedometer ivmeölçerin ham verilerini işlemeden pedometre için hazır bir çözüm sunar. Sınıf, yürüyüşte yaklaşık %95 ve koşuda %90 doğrulukla adımları otomatik olarak tanır. Özel bir adım dedektörü için kendi algoritmanızla CMMotionManager kullanabilirsiniz.

Core Motion, Android'deki hareket framework'ünden nasıl farklıdır?

Core Motion sistem düzeyinde iOS'a entegre edilmiştir ve düşük enerjili işleme için M serisi yardımcı işlemci kullanır. Android, donanım sürücülerine doğrudan erişimle SensorManager kullanır ancak özel bir yardımcı işlemciye sahip değildir, bu da arka plan takibi sırasında güç tüketimini artırır.

CMPedometer için özel bir izin gerekli mi?

iOS 11 ve sonrasında CMPedometer için kullanıcı izni gereklidir. İstek, CMPedometer oluşturulurken otomatik olarak yapılır ve bir sistem diyaloğu görüntüler. Info.plist'e, uygulamanın hareket verilerine neden erişmesi gerektiğini açıklayan NSMotionUsageDescription anahtarı eklenmelidir.

Özet

  • Core Motion ivmeölçer, jiroskop ve manyetometre ile çalışmak için iOS sistem framework'üdür.
  • CMMotionManager tüm cihaz hareket sensörlerine erişim sağlayan merkezi sınıftır.
  • CMDeviceMotion filtrelenmiş veriler sağlar — userAcceleration, attitude ve rotationRate.
  • CMPedometer minimum güç tüketimiyle adım sayımı için M serisi yardımcı işlemci kullanır.
  • CMAltimeter barometre kullanarak 1 metreye kadar doğrulukla yükseklik değişimini ölçer.
  • Entegrasyon entitlement gerektirmez, ancak CMPedometer NSMotionUsageDescription gerektirir.
  • M7–M11 yardımcı işlemci 1 mW'den az güç tüketimiyle arka plan veri toplamayı sağlar.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun