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 — üç 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.
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.
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.
Üç 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ə 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.
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.
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 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.
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.
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.
| Ssenari | Tezlik (Hz) | Dəqiqlik | Filtrləmə |
|---|---|---|---|
| Ekranın avtomatik fırlanması | 5-10 | Aşağı | LPF |
| Addım sayma | 20-50 | Orta | HPF + pik detektoru |
| Oyunlar (yarış) | 50-200 | Yüksək | Kalibr + LPF |
| Kamera sabitləşdirməsi | 200-1000 | Maksimal | Komplementar filtr |
| İşarə tanıma | 50-100 | Orta | HPF + 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.
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
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 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).
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.
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.
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ə
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.
Həm də oxuyun