Mobil tətbiqlərdə akselerometr: bu nədir, necə işləyir və harada tətbiq olunur

Müəllif: IT Sectr Dərc olunub: 2026-03-22 Oxuma vaxtı: 9 dəq

Mobil cihazlarda akselerometr — üç ox boyunca xətti sürətlənməni ölçən, cihazın oriyentasiyasını və hərəkətini təyin edən MEMS sensorudur. Google Android Sensors Guide (2025) məlumatlarına görə, akselerometr mobil tətbiqlərdə ən çox istifadə olunan sensordur. MEMS texnologiyası sensoru 1 mm ölçülü, 1 mW-dan az enerji sərf edən çipdə yerləşdirməyə imkan verir.

Əsas məqamlar

  • Akselerometr — X, Y və Z oxları üzrə sürətlənməni m/s² və ya g ilə ölçən MEMS sensoru.
  • İş prinsipi sürətlənmənin təsiri altında mikroskopik kütlənin yerdəyişməsinə əsaslanır və tutum sensorları ilə qeydə alınır.
  • Android SensorManager və SensorEventListener vasitəsilə giriş təmin edir.
  • iOS akselerometr məlumatlarını əldə etmək üçün CoreMotion və CMMotionManager istifadə edir.
  • Tətbiq — ekran oriyentasiyasının təyini, addım sayma, oyunlar, görüntü sabitləşdirməsi.

Akselerometr nədir

Akselerometr — üç qarşılıqlı perpendikulyar oxa: X (sağa yönəlmiş üfüqi), Y (yuxarı yönəlmiş şaquli) və Z (ekran müstəvisinə perpendikulyar) sürətlənmənin proyeksiyasını ölçən mikroelektromexaniki (MEMS) sensordur. Sakit vəziyyətdə akselerometr Z oxu üzrə 9.8 m/s² dəyər göstərir — bu, Yer mərkəzinə yönəlmiş cazibə sürətlənməsidir. Sistem bu dəyərə əsasən cihazın oriyentasiyasını təyin edir: Z üzrə dəyər 0-a, Y üzrə -9.8 m/s²-yə yaxındırsa, cihaz üfüqi vəziyyətdədir. Akselerometrin ölçmə diapazonu çip modelindən asılı olaraq adətən ±2g, ±4g, ±8g və ya ±16g təşkil edir.

Akselerometrin fiziki parametrləri

Müasir akselerometrlər bir neçə əsas parametrlə xarakterizə olunur: həssaslıq (0.001 m/s²-dən), seçmə tezliyi (1000 Hz-ə qədər), ölçmə diapazonu və səs-küy səviyyəsi. Flaqman cihazlarda tezliyi 1600 Hz-ə qədər və aktiv rejimdə enerji sərfiyyatı 0.5 mW-dan az olan STMicroelectronics LSM6DSO və ya Bosch BMI270 sensorları quraşdırılır. Seçmə tezliyi nə qədər yüksək olsa, tətbiq bir o qədər detallı siqnal alır — oyunlar üçün 200-400 Hz tələb olunur, addım saymaq üçün 10-50 Hz kifayətdir. Sensor səs-küyü ölçmə dəqiqliyinə təsir edir və adətən əməliyyat sistemi səviyyəsində aşağı keçid filtri ilə kompensasiya olunur.

Akselerometrin iş prinsipi

MEMS akselerometr daxildə silisiumdan mikroskopik strukturdan ibarətdir: hərəkətli kütlə (proof mass) sabit elektrodlar arasında elastik tir (cantilever) üzərində asılıb. Sürətlənmə zamanı kütlə yerdəyişərək hərəkətli və sabit elementlər arasında tutumu dəyişir — bu dəyişiklik ölçülür və elektrik siqnalına çevrilir. Qapalı əks əlaqə dövrəsi (closed-loop) elektrostatik qüvvə ilə kütləni mərkəzi vəziyyətdə saxlayır ki, bu da bütün diapazonda ölçmənin xəttiliyini təmin edir. Açıq sistemlərdə (open-loop) kütlə sərbəst hərəkət edir və hesablamalar daha sadədir, lakin dəqiqlik aşağıdır. STMicroelectronics (2025) məlumatlarına görə, closed-loop akselerometrlər 0.1 mq/°C-dən az temperatur dreyfi ilə 0.001g dəqiqliyi təmin edir.

Ölçmə oxları

Üç ox akselerometrin üç ölçüyə uyğundur: X (sol-sağ əyilmə), Y (yuxarı-aşağı) və Z (ekrana nisbətən irəli-geri). Cihaz ekranı yuxarı olmaqla stolun üzərində uzandıqda, cazibə sürətlənmə vektoru Z oxu boyunca aşağıya doğru 9.8 m/s² dəyəri ilə yönəlir. Cihaz əyildikdə cazibə proyeksiyaları oxlar arasında paylanır — bu proyeksiyalara əsasən əyilmə bucağını 0.1 dərəcə dəqiqliklə hesablamaq olar. Cazibənin təsiri olmadan hərəkəti təyin etmək üçün qravitasiya filtrindən (high-pass filter) istifadə olunur ki, bu da sürətlənmənin dinamik komponentini (cihazın öz hərəkəti) statik komponentdən (cazibə qüvvəsi) ayırır.

Android-də akselerometrdən məlumat əldə etmə

Android-də akselerometrə giriş SensorManager sinfi və SensorEventListener interfeysi vasitəsilə həyata keçirilir. Tətbiq SENSOR_SERVICE sistem xidmətini alır, TYPE_ACCELEROMETER sensorunu tələb edir və yenilənmə tezliyini göstərərək dinləyicini qeydiyyatdan keçirir. Sistem hər yeni ölçmədə dəyərlər massivi ilə onSensorChanged-i çağırır: values[0] = X, values[1] = Y, values[2] = Z. Aşağıda Kotlin dilində akselerometrdən məlumat oxumağın tam nümunəsi verilmişdir.

kotlin
val sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
val accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)

val sensorEventListener = object : SensorEventListener {
    override fun onSensorChanged(event: SensorEvent) {
        val x = event.values[0]
        val y = event.values[1]
        val z = event.values[2]

        // Mail bucağının hesablanması
        val pitch = Math.atan2(
            x.toDouble(),
            Math.sqrt(y.toDouble() * y + z.toDouble() * z)
        )
        // İnterfeysin yeni bucaqla yenilənməsi
        textViewAngle.text = "Meyillik: ${Math.toDegrees(pitch)}°"
    }

    override fun onAccuracyChanged(
        sensor: Sensor, accuracy: Int
    ) { }
}

sensorManager.registerListener(
    sensorEventListener,
    accelerometer,
    SensorManager.SENSOR_DELAY_GAME
)

Nümunədə SensorManager.SENSOR_DELAY_GAME oyunlar və interaktiv tətbiqlər üçün optimal olan ~50 Hz yenilənmə tezliyini təyin edir. Addım saymaq üçün SENSOR_DELAY_NORMAL (~5 Hz), dəqiq ölçmələr üçün SENSOR_DELAY_FASTEST (~200 Hz) istifadə edin. onSensorChanged-də event.values massivi sensorun cari göstəricilərini ehtiva edir. X, Y, Z dəyərləri əsasında atan2 vasitəsilə əyilmə bucağı (pitch) hesablanır — bu, oriyentasiya sensorundan istifadə etmədən cihazın oriyentasiyasını təyin etmək üçün əsas düsturdur. Batareyaya qənaət etmək üçün onPause-da dinləyicinin qeydiyyatını ləğv etməyi unutmayın.

Səs-küyün filtrasiyası

kotlin
private val alpha = 0.8f
private val gravity = FloatArray(3)
private val linearAcceleration = FloatArray(3)

override fun onSensorChanged(event: SensorEvent) {
    // Aşağı keçid filtri (LPF) cazibə qüvvəsini ayırmaq üçün
    gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0]
    gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1]
    gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2]

    // Cazibə qüvvəsinin çıxılması — xətti sürətlənmə əldə edirik
    linearAcceleration[0] = event.values[0] - gravity[0]
    linearAcceleration[1] = event.values[1] - gravity[1]
    linearAcceleration[2] = event.values[2] - gravity[2]
}

Alpha əmsalı ilə aşağı keçid filtri cazibə komponentini (statik vektor) ayırır, onun çıxılması cihazın təmiz sürətlənməsini (xətti sürətlənmə) verir. Bu, oriyentasiya nəzərə alınmadan hərəkəti təyin etmək üçün lazımdır — məsələn, addım, silkələnmə və ya zərbənin aşkarlanması üçün. Alpha dəyəri 0.8 o deməkdir ki, filtr yeni siqnalın ~20%-ni buraxır və əvvəlkinin 80%-ni saxlayır — bu, əhəmiyyətli gecikmə olmadan səs-küyü hamarlaşdırmaq üçün kifayətdir.

iOS-da akselerometrdən məlumat əldə etmə

iOS-da akselerometrə giriş Core Motion çərçivəsi vasitəsilə CMMotionManager sinfi tərəfindən təmin edilir. Tətbiq menecerin nüsxəsini yaradır və startAccelerometerUpdates-i növbə və handler göstərərək çağırır. Məlumatlar x, y və z sahələri olan CMAcceleration strukturunu ehtiva edən CMAccelerometerData şəklində qaytarılır. Aşağıda Swift dilində səs-küy filtrasiyası ilə akselerometrdən məlumat əldə etmə nümunəsi verilmişdir.

swift
import CoreMotion

let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 1.0 / 60.0

guard motionManager.isAccelerometerAvailable else { return }

motionManager.startAccelerometerUpdates(to: OperationQueue.current!) {
    data, error in

    guard let acceleration = data?.acceleration,
          error == nil else { return }

    // g ilə dəyərlər (1 g = 9.8 m/s²)
    let magnitude = sqrt(
        acceleration.x * acceleration.x +
        acceleration.y * acceleration.y +
        acceleration.z * acceleration.z
    )

    // Əgər magnitude > 2.5 g olarsa — silkələnmə aşkar edildi
    if magnitude > 2.5 {
        DispatchQueue.main.async {
            self.handleShake()
        }
    }
}

Nümunədə accelerometerUpdateInterval 1/60 saniyə (~60 Hz) təyin edilmişdir — hamar animasiya və oyunlar üçün optimaldır. isAccelerometerAvailable metodu cihazda sensorun mövcudluğunu yoxlayır. Sürətlənmə dəyərləri g vahidində qaytarılır (1 g = 9.8 m/s²). Magnitude vektoru üç komponentin Evklid norması kimi hesablanır — dəyər 2.5 g-dən çox olarsa, bu, cihazın silkələnməsi (shake) kimi interpretasiya olunur. Yeniləmələri dayandırmaq üçün ekrandan çıxarkən mütləq stopAccelerometerUpdates çağırılmalıdır.

İstifadə ssenariləri

Akselerometr mobil tətbiqlərin geniş spektrində istifadə olunur. Ən bariz ssenari — ekranın avtomatik fırlanmasıdır: sistem akselerometr məlumatları əsasında portret və landşaft oriyentasiyasını dəyişir. Oyunlarda akselerometr idarəetmə vasitəsi kimi xidmət edir — cihazı əymək sükəni çevirir və ya personajı hərəkət etdirir. Fitnes tətbiqləri yerimə zamanı xarakterik sürətlənmə piklləri əsasında addımları sayır. Aşağıda tipik ssenarilər və sensor tələbləri ilə cədvəl verilmişdir.

SsenariTezlik (Hz)DəqiqlikFiltrləmə
Ekranın avtomatik fırlanması5-10AşağıLPF
Addım sayma20-50OrtaHPF + pik detektoru
Oyunlar (yarış)50-200YüksəkKalibr + LPF
Kamera sabitləşdirməsi200-1000MaksimalKomplementar filtr
İşarə tanıma50-100OrtaHPF + hədd detektoru

Akselerometr tətbiq edərkən nəzərə almaq lazımdır ki, cihazın qızması və sensorun köhnəlməsi göstəricilərin dəqiqliyinə təsir edə bilər. Kritik ölçmələr üçün (video sabitləşdirmə, kompas) sensor inteqrasiyası (sensor fusion) çərçivəsində əlavə olaraq giroskop və maqnitometrdən istifadə etmək tövsiyə olunur.

Kalibrləşdirmə və xətalar

Akselerometrlər bir neçə növ xətaya məruz qalır: sıfır yerdəyişməsi (bias) — sensor sakit vəziyyətdə sıfırdan fərqli dəyər göstərdikdə; miqyas əmsalı xətası (scale factor error) — müxtəlif oxlar üzrə həssaslıq fərqli olduqda; və ölçmə səs-küyü (noise) — tək ölçmənin dəqiqliyini azaldır. İstehsalda MEMS sensorları kalibrlənir, lakin zaman keçdikcə temperatur və mexaniki yüklənmələr səbəbindən parametrlər dəyişə bilər. Tətbiqdə korreksiya üçün sadə kalibrləşdirmə həyata keçirilə bilər: sakit vəziyyətdə orta dəyəri (yerdəyişmə) qeyd edin və onu bütün sonrakı ölçmələrdən çıxarın. Daha dəqiq kalibrləşdirmə cihazın bütün oxlar ətrafında fırlanmasını tələb edir — bu üsul altı nöqtəli kalibrləşdirmə (six-point calibration) adlanır və 0.5%-dən az xəta verir.

Tez-tez verilən suallar

Telefonda akselerometr nədir?

Akselerometr smartfonda — üç ox üzrə sürətlənməni ölçən, təxminən 1 mm ölçülü MEMS sensorudur. O, cihazın oriyentasiyasını (portret və ya landşaft), silkələnməni, addımları və hərəkəti xarici mənbələr olmadan təyin edir.

Akselerometr giroskopdan nə ilə fərqlənir?

Akselerometr xətti sürətlənməni (cazibə daxil olmaqla), giroskop isə bucaq sürətini (fırlanma) ölçür. Akselerometr oriyentasiyanı, giroskop isə fırlanmanı təyin edir. Birlikdə onlar fəzada hərəkətin dəqiq izlənməsini təmin edir (sensor fusion).

Android-də akselerometrdən məlumatı necə əldə etmək olar?

SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) istifadə edərək sensoru əldə edin, sonra registerListener-i SensorEventListener ilə qeydiyyatdan keçirin. onSensorChanged-də event.values massivi X, Y, Z dəyərlərini m/s² ilə ehtiva edir. onPause-da qeydiyyatı ləğv etməyi unutmayın.

Cihazın silkələnməsini necə təyin etmək olar?

Magnitude = sqrt(x² + y² + z²) hesablayın. Magnitude 2-3 g-dən çox olarsa (cazibə filtrasiyasından sonra), cihaz silkələnmişdir. iOS üçün CMMotionManager-dən 2.5 g həddi ilə, Android üçün Sensor.TYPE_LINEAR_ACCELERATION-dən 15 m/s² həddi ilə istifadə edin.

Akselerometri proqramlı şəkildə kalibrləmək olarmı?

Bəli, sadə kalibrləşdirmə üçün cihazı düz səthə qoyun, hər ox üzrə 2-3 saniyə ərzində orta göstəriciləri qeyd edin və bu dəyərləri bütün sonrakı ölçmələrdən çıxarın. Bu, sıfır yerdəyişməsini (bias) kompensasiya edir, lakin miqyas xətasını yox.

Nəticə

  • Akselerometr — mikroskopik kütlənin yerdəyişməsinə əsaslanan, X, Y, Z oxları üzrə sürətlənməni ölçən MEMS sensoru.
  • İş prinsipi — closed-loop əks əlaqəli tutumlu MEMS, dəqiqlik 0.001g-ə qədər.
  • Android məlumatlara giriş üçün SensorManager və TYPE_ACCELEROMETER ilə SensorEventListener təmin edir.
  • iOS məlumat əldə etmək üçün Core Motion ilə CMMotionManager və startAccelerometerUpdates istifadə edir.
  • Filtrləmə — cazibə üçün aşağı keçid filtri və xətti sürətlənmə üçün yuxarı keçid filtri.
  • Tətbiq — ekranın avtomatik fırlanması, addım sayma, oyunlar, sabitləşdirmə və işarə tanıma.
  • Tövsiyə — yenilənmə tezliyini ssenariyə uyğun seçin: addımlar üçün 20-50 Hz, oyunlar üçün 50-200 Hz, stabilizasiya üçün 200-1000 Hz.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun