Mobil ilovalarda akselerometr: bu nima, qanday ishlaydi va qayerda qo'llaniladi

Muallif: IT Sectr Nashr etilgan: 2026-03-22 O'qish vaqti: 9 daq

Mobil qurilmalardagi akselerometr — bu uch o'q bo'ylab chiziqli tezlanishni o'lchaydigan, qurilmaning orientatsiyasi va harakatini aniqlash uchun mo'ljallangan MEMS sensoridir. Google Android Sensors Guide (2025) ma'lumotlariga ko'ra, akselerometr mobil ilovalarda eng ko'p ishlatiladigan sensordir. MEMS texnologiyasi sensorini 1 mm o'lchamdagi, 1 mVt dan kam energiya sarflaydigan chipga joylashtirish imkonini beradi.

Asosiy fikrlar

  • Akselerometr — X, Y va Z o'qlari bo'ylab tezlanishni m/s² yoki g da o'lchaydigan MEMS sensori.
  • Ishlash prinsipi tezlanish ta'sirida mikroskopik massaning siljishiga asoslangan bo'lib, sig'im sensorlari tomonidan qayd etiladi.
  • Android SensorManager va SensorEventListener orqali kirishni ta'minlaydi.
  • iOS akselerometr ma'lumotlarini olish uchun CoreMotion va CMMotionManager dan foydalanadi.
  • Qo'llanilishi — ekran orientatsiyasini aniqlash, qadam sanash, o'yinlar, tasvirni barqarorlashtirish.

Akselerometr nima

Akselerometr — bu uchta o'zaro perpendikulyar o'q: X (o'ngga yo'naltirilgan gorizontal), Y (yuqoriga yo'naltirilgan vertikal) va Z (ekran tekisligiga perpendikulyar) bo'ylab tezlanish proyeksiyasini o'lchaydigan mikroelektromexanik (MEMS) sensoridir. Tinch holatda akselerometr Z o'qi bo'ylab 9.8 m/s² qiymatini ko'rsatadi — bu Yer markaziga yo'naltirilgan tortishish tezlanishidir. Tizim ushbu qiymat asosida qurilmaning orientatsiyasini aniqlaydi: agar Z bo'ylab qiymat 0 ga, Y bo'ylab -9.8 m/s² ga yaqin bo'lsa, qurilma gorizontal aylantirilgan. Akselerometrning o'lchash diapazoni chip modeliga qarab odatda ±2g, ±4g, ±8g yoki ±16g ni tashkil qiladi.

Akselerometrning fizik parametrlari

Zamonaviy akselerometrlar bir nechta asosiy parametrlar bilan tavsiflanadi: sezgirlik (0.001 m/s² dan), tanlab olish chastotasi (1000 Hz gacha), o'lchash diapazoni va shovqin darajasi. Flagman qurilmalarda chastotasi 1600 Hz gacha va faol rejimda quvvat sarfi 0.5 mVt dan kam bo'lgan STMicroelectronics LSM6DSO yoki Bosch BMI270 sensorlari o'rnatiladi. Tanlab olish chastotasi qanchalik yuqori bo'lsa, ilova shunchalik batafsil signal oladi — o'yinlar uchun 200-400 Hz talab qilinadi, qadam sanash uchun 10-50 Hz yetarli. Sensor shovqini o'lchash aniqligiga ta'sir qiladi va odatda operatsion tizim darajasida past chastotali filtr bilan kompensatsiya qilinadi.

Akselerometrning ishlash prinsipi

MEMS akselerometr ichki qismi kremniydan tayyorlangan mikroskopik strukturadan iborat: harakatlanuvchi massa (proof mass) qo'zg'almas elektrodlar orasidagi elastik to'sinlar (cantilevers) ga osilgan. Tezlanish paytida massa siljib, harakatlanuvchi va qo'zg'almas elementlar orasidagi sig'imni o'zgartiradi — bu o'zgarish o'lchanadi va elektr signaliga aylantiriladi. Yopiq qayta aloqa zanjiri (closed-loop) elektrostatik kuch yordamida massani markaziy holatda ushlab turadi, bu butun diapazonda o'lchashning chiziqliligini ta'minlaydi. Ochiq tizimlarda (open-loop) massa erkin harakatlanadi va hisob-kitoblar soddaroq, ammo aniqlik pastroq. STMicroelectronics (2025) ma'lumotlariga ko'ra, closed-loop akselerometrlar 0.1 mg/°C dan kam harorat drifti bilan 0.001g gacha aniqlikni ta'minlaydi.

O'lchash o'qlari

Uch o'q akselerometrning fazodagi uch o'lchamga mos keladi: X (chap-o'ng egilish), Y (yuqori-past) va Z (ekranga nisbatan oldinga-orqaga). Qurilma ekrani yuqoriga qaragan holda stol ustida yotganda, tortishish tezlanish vektori Z o'qi bo'ylab pastga 9.8 m/s² qiymati bilan yo'naladi. Qurilma egilganda tortishish proyeksiyalari o'qlar o'rtasida taqsimlanadi — bu proyeksiyalar asosida egilish burchagini 0.1 daraja aniqlik bilan hisoblash mumkin. Tortishish ta'sirisiz harakatni aniqlash uchun yuqori chastotali filtr (high-pass filter) ishlatiladi, u tezlanishning dinamik komponentini (qurilmaning o'z harakati) statik komponentdan (tortishish kuchi) ajratadi.

Android-da akselerometrdan ma'lumot olish

Android da akselerometrga kirish SensorManager sinfi va SensorEventListener interfeysi orqali amalga oshiriladi. Ilova SENSOR_SERVICE tizim xizmatini oladi, TYPE_ACCELEROMETER sensorini so'raydi va yangilanish chastotasini ko'rsatgan holda tinglovchini ro'yxatdan o'tkazadi. Tizim har bir yangi o'lchashda qiymatlar massivi bilan onSensorChanged ni chaqiradi: values[0] = X, values[1] = Y, values[2] = Z. Quyida Kotlin tilida akselerometrdan ma'lumot o'qishning to'liq namunasi keltirilgan.

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]

        // Egilish burchagini hisoblash
        val pitch = Math.atan2(
            x.toDouble(),
            Math.sqrt(y.toDouble() * y + z.toDouble() * z)
        )
        // Interfeysni yangi burchak bilan yangilash
        textViewAngle.text = "Nishablik: ${Math.toDegrees(pitch)}°"
    }

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

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

Misolda SensorManager.SENSOR_DELAY_GAME o'yinlar va interaktiv ilovalar uchun optimal bo'lgan ~50 Hz yangilanish chastotasini o'rnatadi. Qadam sanash uchun SENSOR_DELAY_NORMAL (~5 Hz), aniq o'lchashlar uchun SENSOR_DELAY_FASTEST (~200 Hz) dan foydalaning. onSensorChanged da event.values massivi sensorning joriy ko'rsatkichlarini o'z ichiga oladi. X, Y, Z qiymatlari asosida atan2 yordamida egilish burchagi (pitch) hisoblanadi — bu orientatsiya sensoridan foydalanmasdan qurilma orientatsiyasini aniqlashning asosiy formulasidir. Batareyani tejash uchun onPause da tinglovchi ro'yxatdan o'tkazilishini bekor qilishni unutmang.

Shovqinni filtrlash

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

override fun onSensorChanged(event: SensorEvent) {
    // Past chastotali filtr (LPF) tortishishni ajratish uchun
    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]

    // Tortishishni ayirish — chiziqli tezlanishni olamiz
    linearAcceleration[0] = event.values[0] - gravity[0]
    linearAcceleration[1] = event.values[1] - gravity[1]
    linearAcceleration[2] = event.values[2] - gravity[2]
}

Alpha koeffitsienti bilan past chastotali filtr tortishish komponentini (statik vektor) ajratadi, uni ayirish qurilmaning sof tezlanishini (chiziqli tezlanish) beradi. Bu orientatsiyani hisobga olmagan holda harakatni aniqlash uchun zarur — masalan, qadam, silkinish yoki zarbani aniqlash uchun. Alpha qiymati 0.8 filtr yangi signalning ~20% ini o'tkazib, oldingisining 80% ini saqlashini anglatadi — bu sezilarli kechikishsiz shovqinni tekislash uchun yetarli.

iOS-da akselerometrdan ma'lumot olish

iOS da akselerometrga kirish Core Motion frameworki orqali CMMotionManager sinfi tomonidan ta'minlanadi. Ilova menejerning nusxasini yaratadi va startAccelerometerUpdates ni navbat va handlerni ko'rsatgan holda chaqiradi. Ma'lumotlar x, y va z maydonlariga ega CMAcceleration strukturasini o'z ichiga olgan CMAccelerometerData shaklida qaytariladi. Quyida Swift tilida shovqin filtrlash bilan akselerometrdan ma'lumot olish namunasi keltirilgan.

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 dagi qiymatlar (1 g = 9.8 m/s²)
    let magnitude = sqrt(
        acceleration.x * acceleration.x +
        acceleration.y * acceleration.y +
        acceleration.z * acceleration.z
    )

    // Agar magnitude > 2.5 g bo'lsa — silkinish aniqlandi
    if magnitude > 2.5 {
        DispatchQueue.main.async {
            self.handleShake()
        }
    }
}

Misolda accelerometerUpdateInterval 1/60 s (~60 Hz) ga o'rnatilgan — silliq animatsiya va o'yinlar uchun optimal. isAccelerometerAvailable metodi qurilmada sensor mavjudligini tekshiradi. Tezlanish qiymatlari g birliklarida qaytariladi (1 g = 9.8 m/s²). Magnitude vektori uch komponentning Evklid normasi sifatida hisoblanadi — agar qiymat 2.5 g dan oshsa, bu qurilmaning silkinishi (shake) sifatida talqin qilinadi. Yangilanishlarni to'xtatish uchun ekrandan chiqishda albatta stopAccelerometerUpdates chaqirilishi kerak.

Foydalanish stsenariylari

Akselerometr mobil ilovalarning keng spektrida qo'llaniladi. Eng aniq stsenariy — ekranning avtomatik aylanishi: tizim akselerometr ma'lumotlari asosida portret va landshaft orientatsiyasini almashtiradi. O'yinlarda akselerometr boshqaruv vositasi sifatida xizmat qiladi — qurilmani egish rulni aylantiradi yoki personajni harakatlantiradi. Fitness ilovalari yurish paytida tezlanishning xarakterli cho'qqilari asosida qadamlarni hisoblaydi. Quyida odatiy stsenariylar va sensor talablari bilan jadval keltirilgan.

StsenariyChastota (Hz)AniqlikFiltrlash
Ekranning avtomatik aylanishi5-10PastLPF
Qadam sanash20-50O'rtaHPF + cho'qqi detektori
O'yinlar (poyga)50-200YuqoriKalibrlash + LPF
Kamera barqarorlashtirish200-1000MaksimalKomplementar filtr
Ishora aniqlash50-100O'rtaHPF + chegara detektori

Akselerometr ni tatbiq qilishda qurilmaning qizishi va sensorning eskirishi ko'rsatkichlarning aniqligiga ta'sir qilishi mumkinligini hisobga olish kerak. Kritik o'lchashlar uchun (video barqarorlashtirish, kompas) sensor integratsiyasi (sensor fusion) doirasida qo'shimcha ravishda giroskop va magnitometrdan foydalanish tavsiya etiladi.

Kalibrlash va xatolar

Akselerometrlar bir necha turdagi xatolarga duchor bo'ladi: nol siljishi (bias) — sensor tinch holatda noldan farqli qiymat ko'rsatganda; masshtab koeffitsienti xatosi (scale factor error) — turli o'qlar bo'ylab sezgirlik farq qilganda; va o'lchash shovqini (noise) — bitta o'lchash aniqligini pasaytiradi. Ishlab chiqarishda MEMS sensorlari kalibrlanadi, ammo vaqt o'tishi bilan parametrlar harorat va mexanik yuklanishlar tufayli o'zgarishi mumkin. Ilovada tuzatish uchun oddiy kalibrlash amalga oshirilishi mumkin: tinch holatda o'rtacha qiymatni (siljish) yozib oling va uni barcha keyingi o'lchashlardan ayiring. Aniqroq kalibrlash qurilmani barcha o'qlar atrofida aylantirishni talab qiladi — bu usul olti nuqtali kalibrlash (six-point calibration) deb ataladi va 0.5% dan kam xato beradi.

Tez-tez so'raladigan savollar

Telefonda akselerometr nima?

Akselerometr smartfonda — uch o'q bo'ylab tezlanishni o'lchaydigan, taxminan 1 mm o'lchamdagi MEMS sensoridir. Qurilmaning orientatsiyasini (portret yoki landshaft), silkinishni, qadamlarni va harakatni tashqi manbalarsiz aniqlaydi.

Akselerometr giroskopdan nima bilan farq qiladi?

Akselerometr chiziqli tezlanishni (tortishishni o'z ichiga olgan holda), giroskop esa burchak tezligini (aylanishni) o'lchaydi. Akselerometr orientatsiyani, giroskop aylanishni aniqlaydi. Birgalikda ular fazoda harakatning aniq kuzatilishini ta'minlaydi (sensor fusion).

Android da akselerometrdan ma'lumotni qanday olish mumkin?

SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) yordamida sensor oling, so'ngra registerListener ni SensorEventListener bilan ro'yxatdan o'tkazing. onSensorChanged da event.values massivi X, Y, Z qiymatlarini m/s² da o'z ichiga oladi. onPause da ro'yxatdan o'tkazishni bekor qilishni unutmang.

Qurilmaning silkinishini qanday aniqlash mumkin?

Magnitude = sqrt(x² + y² + z²) hisoblang. Agar magnitude 2-3 g dan oshsa (tortishish filtrlashidan keyin), qurilma silkitilgan. iOS uchun CMMotionManager dan 2.5 g chegarasi bilan, Android uchun Sensor.TYPE_LINEAR_ACCELERATION dan 15 m/s² chegarasi bilan foydalaning.

Akselerometrni dasturiy ravishda kalibrlash mumkinmi?

Ha, oddiy kalibrlash uchun qurilmani tekis yuzaga qo'ying, har bir o'q bo'ylab 2-3 soniya davomida o'rtacha ko'rsatkichlarni yozib oling va bu qiymatlarni barcha keyingi o'lchashlardan ayiring. Bu nol siljishini (bias) kompensatsiya qiladi, ammo masshtab xatosini emas.

Xulosa

  • Akselerometr — mikroskopik massa siljishiga asoslangan, X, Y, Z o'qlari bo'ylab tezlanishni o'lchaydigan MEMS sensori.
  • Ishlash prinsipi — closed-loop qayta aloqali sig'imli MEMS, aniqlik 0.001g gacha.
  • Android ma'lumotlarga kirish uchun SensorManager va TYPE_ACCELEROMETER bilan SensorEventListener ni ta'minlaydi.
  • iOS ma'lumot olish uchun Core Motion bilan CMMotionManager va startAccelerometerUpdates dan foydalanadi.
  • Filtrlash — tortishish uchun past chastotali filtr va chiziqli tezlanish uchun yuqori chastotali filtr.
  • Qo'llanilishi — ekranning avtomatik aylanishi, qadam sanash, o'yinlar, barqarorlashtirish va ishora aniqlash.
  • Tavsiya — yangilanish chastotasini stsenariyga qarab tanlang: qadamlar uchun 20-50 Hz, o'yinlar uchun 50-200 Hz, stabilizatsiya uchun 200-1000 Hz.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing