Accelerometrul în aplicațiile mobile: ce este, cum funcționează și unde se aplică

Autor: IT Sectr Publicat: 2026-03-22 Timp de citire: 9 min

Accelerometrul în dispozitivele mobile este un senzor MEMS care măsoară accelerația liniară pe trei axe pentru determinarea orientării și mișcării dispozitivului. Conform Google Android Sensors Guide (2025), accelerometrul este cel mai utilizat senzor în aplicațiile mobile. Tehnologia MEMS permite amplasarea senzorului într-un cip de 1 mm, consumând mai puțin de 1 mW de energie.

Principalele puncte

  • Accelerometrul — senzor MEMS care măsoară accelerația pe axele X, Y și Z în m/s² sau g.
  • Principiul de funcționare se bazează pe deplasarea unei mase microscopice sub acțiunea accelerației, înregistrată de senzorii capacitivi.
  • Android oferă acces prin SensorManager și SensorEventListener.
  • iOS utilizează CoreMotion cu CMMotionManager pentru obținerea datelor de la accelerometru.
  • Aplicare — determinarea orientării ecranului, numărarea pașilor, jocuri, stabilizarea imaginii.

Ce este accelerometrul

Accelerometrul este un senzor microelectromecanic (MEMS) care măsoară proiecția accelerației pe trei axe reciproc perpendiculare: X (orizontală, orientată spre dreapta), Y (verticală, orientată în sus) și Z (perpendiculară pe planul ecranului). În stare de repaus, accelerometrul arată valoarea 9.8 m/s² pe axa Z — aceasta este accelerația gravitațională orientată spre centrul Pământului. Pe baza acestei valori, sistemul determină orientarea dispozitivului: dacă valoarea pe Z este aproape de 0, iar pe Y de -9.8 m/s², dispozitivul este rotit orizontal. Domeniul de măsurare al accelerometrului este de obicei ±2g, ±4g, ±8g sau ±16g, în funcție de modelul cipului.

Parametrii fizici ai accelerometrului

Accelerometrele moderne se caracterizează prin câțiva parametri cheie: sensibilitate (de la 0.001 m/s²), frecvența de eșantionare (până la 1000 Hz), domeniul de măsurare și nivelul de zgomot. Pe dispozitivele flagship sunt instalate senzori STMicroelectronics LSM6DSO sau Bosch BMI270 cu frecvență de până la 1600 Hz și consum mai mic de 0.5 mW în modul activ. Cu cât frecvența de eșantionare este mai mare, cu atât semnalul primit de aplicație este mai detaliat — pentru jocuri sunt necesari 200-400 Hz, pentru numărarea pașilor sunt suficienți 10-50 Hz. Zgomotul senzorului afectează precizia măsurătorilor și este de obicei compensat printr-un filtru trece-jos la nivelul sistemului de operare.

Principiul de funcționare al accelerometrului

Accelerometrul MEMS reprezintă în interior o structură microscopică din siliciu: o masă mobilă (proof mass) este suspendată pe grinzi elastice (cantilevers) între electrozi fixi. La accelerare, masa se deplasează, modificând capacitatea dintre elementele mobile și fixe — această modificare este măsurată și convertită într-un semnal electric. Circuitul cu buclă de reacție închisă (closed-loop) menține masa în poziția centrală prin forță electrostatică, asigurând liniaritatea măsurării pe întregul domeniu. În sistemele deschise (open-loop), masa se mișcă liber, iar calculele sunt mai simple, dar precizia este mai mică. Conform datelor STMicroelectronics (2025), accelerometrele closed-loop asigură o precizie de până la 0.001g cu o derivă termică mai mică de 0.1 mg/°C.

Axele de măsurare

Trei axe ale accelerometrului corespund celor trei dimensiuni ale spațiului: X (înclinare stânga-dreapta), Y (sus-jos) și Z (față-spate față de ecran). Când dispozitivul stă pe masă cu ecranul în sus, vectorul accelerației gravitaționale este orientat de-a lungul axei Z în jos cu valoarea 9.8 m/s². La înclinarea dispozitivului, proiecțiile gravitației se redistribuie între axe — pe baza acestor proiecții se poate calcula unghiul de înclinare cu o precizie de până la 0.1 grade. Pentru determinarea mișcării fără influența gravitației se folosește un filtru trece-sus (high-pass filter) care separă componenta dinamică a accelerației (mișcarea proprie a dispozitivului) de cea statică (forța gravitațională).

Obținerea datelor de la accelerometru pe Android

Pe Android, accesul la accelerometru se realizează prin clasa SensorManager și interfața SensorEventListener. Aplicația primește serviciul de sistem SENSOR_SERVICE, solicită senzorul TYPE_ACCELEROMETER și înregistrează un ascultător specificând frecvența de actualizare. Sistemul apelează onSensorChanged la fiecare nouă măsurare cu o matrice de valori: values[0] = X, values[1] = Y, values[2] = Z. Mai jos este un exemplu complet de citire a datelor de la accelerometru în Kotlin.

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]

        // Calcularea unghiului de înclinare
        val pitch = Math.atan2(
            x.toDouble(),
            Math.sqrt(y.toDouble() * y + z.toDouble() * z)
        )
        // Actualizarea interfeței cu noul unghi
        textViewAngle.text = "Înclinare: ${Math.toDegrees(pitch)}°"
    }

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

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

În exemplu, SensorManager.SENSOR_DELAY_GAME setează frecvența de actualizare de ~50 Hz, optimă pentru jocuri și aplicații interactive. Pentru numărarea pașilor, utilizați SENSOR_DELAY_NORMAL (~5 Hz), pentru măsurători precise — SENSOR_DELAY_FASTEST (~200 Hz). În onSensorChanged, matricea event.values conține citirile curente ale senzorului. Pe baza valorilor X, Y, Z se calculează unghiul de înclinare (pitch) folosind atan2 — aceasta este formula de bază pentru determinarea orientării dispozitivului fără a utiliza senzorul de orientare. Nu uitați să anulați înregistrarea ascultătorului în onPause pentru a economisi bateria.

Filtrarea zgomotului

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

override fun onSensorChanged(event: SensorEvent) {
    // Filtrul trece-jos (LPF) pentru separarea gravitației
    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]

    // Scăderea gravitației — obținem accelerația liniară
    linearAcceleration[0] = event.values[0] - gravity[0]
    linearAcceleration[1] = event.values[1] - gravity[1]
    linearAcceleration[2] = event.values[2] - gravity[2]
}

Filtrul trece-jos cu coeficientul alpha separă componenta gravitațională (vectorul static), a cărei scădere oferă accelerația pură a dispozitivului (accelerația liniară). Acest lucru este necesar pentru determinarea mișcării fără a ține cont de orientare — de exemplu, pentru detectarea unui pas, scuturării sau impactului. Valoarea alpha de 0.8 înseamnă că filtrul lasă să treacă ~20% din noul semnal și păstrează 80% din cel anterior — suficient pentru netezirea zgomotului fără o întârziere semnificativă.

Obținerea datelor de la accelerometru pe iOS

Pe iOS, accesul la accelerometru este oferit de framework-ul Core Motion prin clasa CMMotionManager. Aplicația creează o instanță a managerului și apelează startAccelerometerUpdates specificând coada și handler-ul. Datele sunt returnate sub formă de CMAccelerometerData care conține structura CMAcceleration cu câmpurile x, y și z. Mai jos este un exemplu de obținere a datelor de la accelerometru în Swift cu filtrarea zgomotului.

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 }

    // Valori în g (1 g = 9.8 m/s²)
    let magnitude = sqrt(
        acceleration.x * acceleration.x +
        acceleration.y * acceleration.y +
        acceleration.z * acceleration.z
    )

    // Dacă magnitude > 2.5 g — scuturare detectată
    if magnitude > 2.5 {
        DispatchQueue.main.async {
            self.handleShake()
        }
    }
}

În exemplu, accelerometerUpdateInterval este setat la 1/60 sec (~60 Hz) — optim pentru animație fluidă și jocuri. Metoda isAccelerometerAvailable verifică prezența senzorului pe dispozitiv. Valorile accelerației sunt returnate în unități g (unde 1 g = 9.8 m/s²). Vectorul magnitude este calculat ca normă euclidiană a celor trei componente — dacă valoarea depășește 2.5 g, aceasta este interpretată ca o scuturare a dispozitivului (shake). Pentru a opri actualizările, trebuie apelat stopAccelerometerUpdates la părăsirea ecranului.

Scenarii de utilizare

Accelerometrul este utilizat într-o gamă largă de aplicații mobile. Cel mai evident scenariu este rotirea automată a ecranului: sistemul comută între orientarea portret și peisaj pe baza datelor accelerometrului. În jocuri, accelerometrul servește ca controller — înclinarea dispozitivului rotește volanul sau mișcă personajul. Aplicațiile de fitness numără pașii pe baza vârfurilor caracteristice de accelerație la mers. Mai jos este un tabel cu scenarii tipice și cerințele față de senzor.

ScenariuFrecvență (Hz)PrecizieFiltrare
Rotirea automată a ecranului5-10ScăzutăLPF
Numărarea pașilor20-50MedieHPF + detector de vârfuri
Jocuri (curse)50-200RidicatăCalibrare + LPF
Stabilizarea camerei200-1000MaximăFiltru complementar
Recunoașterea gesturilor50-100MedieHPF + detector de prag

La implementarea accelerometrului trebuie să se țină cont că încălzirea dispozitivului și îmbătrânirea senzorului pot afecta precizia citirilor. Pentru măsurători critice (stabilizare video, busolă) se recomandă utilizarea suplimentară a giroscopului și magnetometrului în cadrul integrării senzorilor (sensor fusion).

Calibrare și erori

Accelerometrele sunt supuse mai multor tipuri de erori: decalajul de zero (bias) — când senzorul arată o valoare diferită de zero în repaus; eroarea factorului de scară (scale factor error) — când sensibilitatea pe diferite axe diferă; și zgomotul de măsurare (noise), care reduce precizia unei singure citiri. La producție, senzorii MEMS sunt calibrați, dar în timp parametrii pot devia din cauza temperaturii și a sarcinilor mecanice. Pentru corecție în aplicație se poate implementa o calibrare simplă: în stare de repaus se înregistrează valoarea medie (decalajul) și se scade din toate măsurătorile ulterioare. O calibrare mai precisă necesită rotirea dispozitivului în jurul tuturor axelor — această metodă se numește calibrare în șase puncte (six-point calibration) și oferă o eroare mai mică de 0.5%.

Întrebări frecvente

Ce este accelerometrul în telefon?

Accelerometrul din smartphone este un senzor MEMS de aproximativ 1 mm care măsoară accelerația pe trei axe. Determină orientarea dispozitivului (portret sau peisaj), scuturarea, pașii și mișcarea fără a utiliza surse externe.

Cu ce se deosebește accelerometrul de giroscop?

Accelerometrul măsoară accelerația liniară (inclusiv gravitația), iar giroscopul — viteza unghiulară (rotația). Accelerometrul determină orientarea, giroscopul — rotația. Împreună asigură urmărirea precisă a mișcării în spațiu (sensor fusion).

Cum se obțin datele de la accelerometru pe Android?

Utilizați SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) pentru a obține senzorul, apoi registerListener cu SensorEventListener. În onSensorChanged, matricea event.values conține valorile X, Y, Z în m/s². Nu uitați să anulați înregistrarea în onPause.

Cum se detectează scuturarea dispozitivului?

Calculați magnitude = sqrt(x² + y² + z²). Dacă magnitude depășește 2-3 g (după filtrarea gravitației), dispozitivul a fost scuturat. Pentru iOS utilizați CMMotionManager cu pragul de 2.5 g, pentru Android — Sensor.TYPE_LINEAR_ACCELERATION cu pragul de 15 m/s².

Se poate calibra accelerometrul programatic?

Da, pentru o calibrare simplă plasați dispozitivul pe o suprafață plană, înregistrați citirile medii pentru fiecare axă timp de 2-3 secunde și scădeți aceste valori din toate măsurătorile ulterioare. Aceasta compensează decalajul de zero (bias), dar nu eroarea de scară.

Rezumat

  • Accelerometrul — senzor MEMS care măsoară accelerația pe axele X, Y, Z, bazat pe deplasarea masei microscopice.
  • Principiul de funcționare — MEMS capacitiv cu buclă closed-loop, precizie de până la 0.001g.
  • Android oferă SensorManager cu TYPE_ACCELEROMETER și SensorEventListener pentru acces la date.
  • iOS utilizează Core Motion cu CMMotionManager și startAccelerometerUpdates pentru obținerea datelor.
  • Filtrarea — filtru trece-jos pentru gravitație și trece-sus pentru accelerația liniară.
  • Aplicare — rotirea automată a ecranului, numărarea pașilor, jocuri, stabilizare și recunoaștere a gesturilor.
  • Recomandare — alegeți frecvența de actualizare în funcție de scenariu: pentru pași 20-50 Hz, pentru jocuri 50-200 Hz, pentru stabilizare 200-1000 Hz.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și