Akcelerometr v mobilních aplikacích: co to je, jak funguje a kde se používá

Autor: IT Sectr Publikováno: 2026-03-22 Doba čtení: 9 min

Akcelerometr v mobilních zařízeních je MEMS senzor měřící lineární zrychlení ve třech osách pro určení orientace a pohybu zařízení. Podle Google Android Sensors Guide (2025) je akcelerometr nejpoužívanějším senzorem v mobilních aplikacích. Technologie MEMS umožňuje umístit senzor do čipu o velikosti 1 mm, který spotřebovává méně než 1 mW energie.

Hlavní body

  • Akcelerometr — MEMS senzor měřící zrychlení v osách X, Y a Z v m/s² nebo g.
  • Princip fungování je založen na posunu mikroskopické hmoty působením zrychlení, zaznamenávaném kapacitními senzory.
  • Android poskytuje přístup přes SensorManager a SensorEventListener.
  • iOS používá CoreMotion s CMMotionManager pro získávání dat z akcelerometru.
  • Použití — určení orientace obrazovky, počítání kroků, hry, stabilizace obrazu.

Co je akcelerometr

Akcelerometr je mikroelektromechanický (MEMS) senzor měřící průmět zrychlení na tři vzájemně kolmé osy: X (horizontální, směřující doprava), Y (vertikální, směřující nahoru) a Z (kolmá k rovině obrazovky). V klidovém stavu akcelerometr ukazuje hodnotu 9.8 m/s² na ose Z — to je gravitační zrychlení směřující ke středu Země. Na základě této hodnoty systém určuje orientaci zařízení: pokud je hodnota na Z blízko 0 a na Y blízko -9.8 m/s², je zařízení otočeno horizontálně. Měřicí rozsah akcelerometru je obvykle ±2g, ±4g, ±8g nebo ±16g v závislosti na modelu čipu.

Fyzikální parametry akcelerometru

Moderní akcelerometry se vyznačují několika klíčovými parametry: citlivost (od 0.001 m/s²), vzorkovací frekvence (až 1000 Hz), měřicí rozsah a úroveň šumu. Do vlajkových zařízení se instalují senzory STMicroelectronics LSM6DSO nebo Bosch BMI270 s frekvencí až 1600 Hz a spotřebou nižší než 0.5 mW v aktivním režimu. Čím vyšší je vzorkovací frekvence, tím detailnější signál aplikace získává — pro hry je potřeba 200-400 Hz, pro počítání kroků stačí 10-50 Hz. Šum senzoru ovlivňuje přesnost měření a je obvykle kompenzován dolní propustí na úrovni operačního systému.

Princip fungování akcelerometru

MEMS akcelerometr uvnitř představuje mikroskopickou strukturu z křemíku: pohyblivá hmota (proof mass) je zavěšena na pružných nosnících (cantilevers) mezi pevnými elektrodami. Při zrychlení se hmota posouvá a mění kapacitu mezi pohyblivými a pevnými prvky — tato změna je měřena a převáděna na elektrický signál. Obvod s uzavřenou zpětnou vazbou (closed-loop) udržuje hmotu ve středové poloze pomocí elektrostatické síly, což zajišťuje linearitu měření v celém rozsahu. V otevřených systémech (open-loop) se hmota pohybuje volně a výpočty jsou jednodušší, ale přesnost je nižší. Podle údajů STMicroelectronics (2025) poskytují closed-loop akcelerometry přesnost až 0.001g s teplotním driftem nižším než 0.1 mg/°C.

Měřicí osy

Tři osy akcelerometru odpovídají třem rozměrům prostoru: X (náklon vlevo-vpravo), Y (nahoru-dolů) a Z (dopředu-dozadu vzhledem k obrazovce). Když zařízení leží na stole obrazovkou nahoru, vektor gravitačního zrychlení směřuje podél osy Z dolů s hodnotou 9.8 m/s². Při náklonu zařízení se průměty gravitace přerozdělují mezi osy — na základě těchto průmětů lze vypočítat úhel náklonu s přesností až 0.1 stupně. Pro určení pohybu bez vlivu gravitace se používá horní propust (high-pass filter), která odděluje dynamickou složku zrychlení (vlastní pohyb zařízení) od statické (gravitační síla).

Získávání dat z akcelerometru na Androidu

Na Androidu je přístup k akcelerometru realizován prostřednictvím třídy SensorManager a rozhraní SensorEventListener. Aplikace získá systémovou službu SENSOR_SERVICE, vyžádá senzor TYPE_ACCELEROMETER a zaregistruje posluchače s uvedením frekvence aktualizace. Systém volá onSensorChanged při každém novém měření s polem hodnot: values[0] = X, values[1] = Y, values[2] = Z. Níže je uveden úplný příklad čtení dat z akcelerometru v Kotlinu.

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]

        // Výpočet úhlu náklonu
        val pitch = Math.atan2(
            x.toDouble(),
            Math.sqrt(y.toDouble() * y + z.toDouble() * z)
        )
        // Aktualizace rozhraní s novým úhlem
        textViewAngle.text = "Náklon: ${Math.toDegrees(pitch)}°"
    }

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

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

V příkladu SensorManager.SENSOR_DELAY_GAME nastavuje frekvenci aktualizace ~50 Hz, optimální pro hry a interaktivní aplikace. Pro počítání kroků použijte SENSOR_DELAY_NORMAL (~5 Hz), pro přesná měření — SENSOR_DELAY_FASTEST (~200 Hz). V onSensorChanged obsahuje pole event.values aktuální údaje senzoru. Na základě hodnot X, Y, Z se vypočítá úhel náklonu (pitch) pomocí atan2 — to je základní vzorec pro určení orientace zařízení bez použití orientačního senzoru. Nezapomeňte zrušit registraci posluchače v onPause pro úsporu baterie.

Filtrace šumu

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

override fun onSensorChanged(event: SensorEvent) {
    // Dolní propust (LPF) pro oddělení gravitace
    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]

    // Odečtení gravitace — získáme lineární zrychlení
    linearAcceleration[0] = event.values[0] - gravity[0]
    linearAcceleration[1] = event.values[1] - gravity[1]
    linearAcceleration[2] = event.values[2] - gravity[2]
}

Dolní propust s koeficientem alpha odděluje gravitační složku (statický vektor), jejímž odečtením získáme čisté zrychlení zařízení (lineární zrychlení). To je nezbytné pro určení pohybu bez ohledu na orientaci — například pro detekci kroku, zatřesení nebo nárazu. Hodnota alpha 0.8 znamená, že filtr propouští ~20 % nového signálu a zachovává 80 % předchozího — dostatečné pro vyhlazení šumu bez výrazného zpoždění.

Získávání dat z akcelerometru na iOS

Na iOS je přístup k akcelerometru poskytován frameworkem Core Motion prostřednictvím třídy CMMotionManager. Aplikace vytvoří instanci manažera a zavolá startAccelerometerUpdates s uvedením fronty a handleru. Data jsou vracena jako CMAccelerometerData obsahující strukturu CMAcceleration s poli x, y a z. Níže je uveden příklad získávání dat z akcelerometru ve Swiftu s filtrací šumu.

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 }

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

    // Pokud magnitude > 2.5 g — detekováno zatřesení
    if magnitude > 2.5 {
        DispatchQueue.main.async {
            self.handleShake()
        }
    }
}

V příkladu je accelerometerUpdateInterval nastaven na 1/60 s (~60 Hz) — optimální pro plynulou animaci a hry. Metoda isAccelerometerAvailable kontroluje přítomnost senzoru v zařízení. Hodnoty zrychlení jsou vraceny v jednotkách g (kde 1 g = 9.8 m/s²). Vektor magnitude se vypočítá jako euklidovská norma tří složek — pokud hodnota přesáhne 2.5 g, je to interpretováno jako zatřesení zařízením (shake). Pro zastavení aktualizací zavolejte stopAccelerometerUpdates při opuštění obrazovky.

Scénáře použití

Akcelerometr se používá v širokém spektru mobilních aplikací. Nejzřejmějším scénářem je automatické otáčení obrazovky: systém přepíná mezi portrétní a krajinnou orientací na základě dat akcelerometru. Ve hrách slouží akcelerometr jako ovladač — náklon zařízení otáčí volantem nebo pohybuje postavou. Fitness aplikace počítají kroky na základě charakteristických špiček zrychlení při chůzi. Níže je uvedena tabulka s typickými scénáři a požadavky na senzor.

ScénářFrekvence (Hz)PřesnostFiltrace
Automatické otáčení obrazovky5-10NízkáLPF
Počítání kroků20-50StředníHPF + detektor špiček
Hry (závody)50-200VysokáKalibrace + LPF
Stabilizace kamery200-1000MaximálníKomplementární filtr
Rozpoznávání gest50-100StředníHPF + detektor prahu

Při implementaci akcelerometru je třeba vzít v úvahu, že zahřívání zařízení a stárnutí senzoru může ovlivnit přesnost údajů. Pro kritická měření (stabilizace videa, kompas) se doporučuje dodatečné použití gyroskopu a magnetometru v rámci integrace senzorů (sensor fusion).

Kalibrace a chyby

Akcelerometry podléhají několika typům chyb: posun nuly (bias) — když senzor v klidu ukazuje nenulovou hodnotu; chyba měřítka (scale factor error) — když se citlivost na různých osách liší; a měřicí šum (noise), snižující přesnost jednotlivého odečtu. Při výrobě jsou MEMS senzory kalibrovány, ale časem mohou parametry driftovat vlivem teploty a mechanického zatížení. Pro korekci v aplikaci lze implementovat jednoduchou kalibraci: v klidovém stavu zaznamenejte průměrnou hodnotu (posun) a odečítejte ji od všech následujících měření. Přesnější kalibrace vyžaduje rotaci zařízení kolem všech os — tato metoda se nazývá šestibodová kalibrace (six-point calibration) a dává chybu menší než 0.5%.

Často kladené otázky

Co je akcelerometr v telefonu?

Akcelerometr v chytrém telefonu je MEMS senzor o velikosti asi 1 mm, který měří zrychlení ve třech osách. Určuje orientaci zařízení (portrét nebo krajina), zatřesení, kroky a pohyb bez použití externích zdrojů.

Čím se akcelerometr liší od gyroskopu?

Akcelerometr měří lineární zrychlení (včetně gravitace), zatímco gyroskop měří úhlovou rychlost (rotaci). Akcelerometr určuje orientaci, gyroskop rotaci. Dohromady poskytují přesné sledování pohybu v prostoru (sensor fusion).

Jak získat data z akcelerometru na Androidu?

Použijte SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) pro získání senzoru, poté registerListener s SensorEventListener. V onSensorChanged obsahuje pole event.values hodnoty X, Y, Z v m/s². Zrušte registraci v onPause.

Jak detekovat zatřesení zařízením?

Vypočtěte magnitude = sqrt(x² + y² + z²). Pokud magnitude přesahuje 2-3 g (po filtraci gravitace), zařízení bylo zatřeseno. Pro iOS použijte CMMotionManager s prahem 2.5 g, pro Android — Sensor.TYPE_LINEAR_ACCELERATION s prahem 15 m/s².

Lze akcelerometr zkalibrovat programově?

Ano, pro jednoduchou kalibraci umístěte zařízení na rovný povrch, zaznamenejte průměrné hodnoty pro každou osu po dobu 2-3 sekund a odečítejte tyto hodnoty od všech následujících měření. To kompenzuje posun nuly (bias), ale ne chybu měřítka.

Shrnutí

  • Akcelerometr — MEMS senzor měření zrychlení v osách X, Y, Z založený na posunu mikroskopické hmoty.
  • Princip fungování — kapacitní MEMS s closed-loop zpětnou vazbou, přesnost až 0.001g.
  • Android poskytuje SensorManager s TYPE_ACCELEROMETER a SensorEventListener pro přístup k datům.
  • iOS používá Core Motion s CMMotionManager a startAccelerometerUpdates pro získávání dat.
  • Filtrace — dolní propust pro gravitaci a horní propust pro lineární zrychlení.
  • Použití — automatické otáčení obrazovky, počítání kroků, hry, stabilizace a rozpoznávání gest.
  • Doporučení — vyberte frekvenci aktualizace podle scénáře: pro kroky 20-50 Hz, pro hry 50-200 Hz, pro stabilizaci 200-1000 Hz.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také