Accelerometer i mobila applikationer: vad det är, hur det fungerar och var det används

Författare: IT Sectr Publicerad: 2026-03-22 Lästid: 9 min

Accelerometern i mobila enheter är en MEMS-sensor som mäter linjär acceleration längs tre axlar för att bestämma enhetens orientering och rörelse. Enligt Google Android Sensors Guide (2025) är accelerometern den mest använda sensorn i mobila applikationer. MEMS-teknik gör det möjligt att placera sensorn i ett chip som är 1 mm stort och förbrukar mindre än 1 mW energi.

Huvudpunkter

  • Accelerometer — MEMS-sensor som mäter acceleration längs X-, Y- och Z-axlarna i m/s² eller g.
  • Funktionsprincip bygger på förskjutning av en mikroskopisk massa under acceleration, registrerad av kapacitiva sensorer.
  • Android ger åtkomst via SensorManager och SensorEventListener.
  • iOS använder CoreMotion med CMMotionManager för att hämta data från accelerometern.
  • Tillämpning — bestämning av skärmorientering, stegräkning, spel, bildstabilisering.

Vad är en accelerometer

Accelerometer är en mikroelektromekanisk (MEMS) sensor som mäter accelerationens projektion på tre inbördes vinkelräta axlar: X (horisontell, riktad åt höger), Y (vertikal, riktad uppåt) och Z (vinkelrät mot skärmens plan). I vila visar accelerometern värdet 9.8 m/s² på Z-axeln — detta är gravitationsaccelerationen riktad mot jordens centrum. Baserat på detta värde bestämmer systemet enhetens orientering: om värdet på Z är nära 0 och på Y är nära -9.8 m/s², är enheten roterad horisontellt. Accelerometerns mätområde är vanligtvis ±2g, ±4g, ±8g eller ±16g beroende på chipmodell.

Accelerometerns fysikaliska parametrar

Moderna accelerometrar kännetecknas av flera nyckelparametrar: känslighet (från 0.001 m/s²), samplingsfrekvens (upp till 1000 Hz), mätområde och brusnivå. I flaggskeppsenheter installeras sensorer från STMicroelectronics LSM6DSO eller Bosch BMI270 med frekvens upp till 1600 Hz och strömförbrukning under 0.5 mW i aktivt läge. Ju högre samplingsfrekvens, desto mer detaljerad signal får applikationen — för spel krävs 200-400 Hz, för stegräkning räcker 10-50 Hz. Sensorbrus påverkar mätnoggrannheten och kompenseras vanligtvis med ett lågpassfilter på operativsystemsnivå.

Accelerometerns funktionsprincip

MEMS-accelerometern består invändigt av en mikroskopisk struktur av kisel: en rörlig massa (proof mass) är upphängd på elastiska balkar (cantilevers) mellan fasta elektroder. Vid acceleration förskjuts massan och ändrar kapacitansen mellan rörliga och fasta element — denna förändring mäts och omvandlas till en elektrisk signal. Kretsen med sluten återkoppling (closed-loop) håller massan i mittläget med hjälp av elektrostatisk kraft, vilket garanterar linjäritet över hela mätområdet. I öppna system (open-loop) rör sig massan fritt och beräkningarna är enklare, men noggrannheten är lägre. Enligt STMicroelectronics (2025) ger closed-loop-accelerometrar en noggrannhet på upp till 0.001g med termisk drift under 0.1 mg/°C.

Mätaxlar

Tre axlar hos accelerometern motsvarar rymdens tre dimensioner: X (vänster-höger lutning), Y (upp-ner) och Z (framåt-bakåt i förhållande till skärmen). När enheten ligger på bordet med skärmen uppåt, är gravitationsaccelerationsvektorn riktad längs Z-axeln nedåt med värdet 9.8 m/s². När enheten lutas omfördelas gravitationsprojektionerna mellan axlarna — baserat på dessa projektioner kan lutningsvinkeln beräknas med en noggrannhet på upp till 0.1 grad. För att bestämma rörelse utan påverkan av gravitation används ett högpassfilter (high-pass filter) som separerar accelerationens dynamiska komponent (enhetens egen rörelse) från den statiska komponenten (gravitationskraft).

Hämta data från accelerometern på Android

På Android nås accelerometern via klassen SensorManager och gränssnittet SensorEventListener. Applikationen hämtar systemtjänsten SENSOR_SERVICE, begär sensorn TYPE_ACCELEROMETER och registrerar en lyssnare med angiven uppdateringsfrekvens. Systemet anropar onSensorChanged vid varje ny mätning med en värdeuppsättning: values[0] = X, values[1] = Y, values[2] = Z. Nedan finns ett fullständigt exempel på avläsning av data från accelerometern i 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]

        // Beräkning av lutningsvinkel
        val pitch = Math.atan2(
            x.toDouble(),
            Math.sqrt(y.toDouble() * y + z.toDouble() * z)
        )
        // Uppdatering av gränssnitt med ny vinkel
        textViewAngle.text = "Lutning: ${Math.toDegrees(pitch)}°"
    }

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

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

I exemplet ställer SensorManager.SENSOR_DELAY_GAME in uppdateringsfrekvensen till ~50 Hz, optimal för spel och interaktiva applikationer. För stegräkning använd SENSOR_DELAY_NORMAL (~5 Hz), för precis mätning — SENSOR_DELAY_FASTEST (~200 Hz). I onSensorChanged innehåller arrayen event.values sensorns aktuella avläsningar. Baserat på X-, Y-, Z-värdena beräknas lutningsvinkeln (pitch) med atan2 — detta är den grundläggande formeln för att bestämma enhetens orientering utan att använda en orienteringssensor. Glöm inte att avregistrera lyssnaren i onPause för att spara batteri.

Brusfiltrering

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

override fun onSensorChanged(event: SensorEvent) {
    // Lågpassfilter (LPF) för att separera gravitation
    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]

    // Subtraktion av gravitation — vi får linjär acceleration
    linearAcceleration[0] = event.values[0] - gravity[0]
    linearAcceleration[1] = event.values[1] - gravity[1]
    linearAcceleration[2] = event.values[2] - gravity[2]
}

Lågpassfiltret med koefficienten alpha separerar gravitationskomponenten (statisk vektor), vars subtraktion ger enhetens rena acceleration (linjär acceleration). Detta är nödvändigt för att bestämma rörelse utan hänsyn till orientering — till exempel för detektering av steg, skakning eller stöt. Ett alpha-värde på 0.8 innebär att filtret släpper igenom ~20% av den nya signalen och behåller 80% av den föregående — tillräckligt för att jämna ut brus utan betydande fördröjning.

Hämta data från accelerometern på iOS

På iOS tillhandahålls åtkomst till accelerometern av ramverket Core Motion via klassen CMMotionManager. Applikationen skapar en instans av hanteraren och anropar startAccelerometerUpdates med angiven kö och hanterare. Data returneras som CMAccelerometerData som innehåller strukturen CMAcceleration med fälten x, y och z. Nedan finns ett exempel på att hämta data från accelerometern i Swift med brusfiltrering.

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 }

    // Värden i g (1 g = 9.8 m/s²)
    let magnitude = sqrt(
        acceleration.x * acceleration.x +
        acceleration.y * acceleration.y +
        acceleration.z * acceleration.z
    )

    // Om magnitude > 2.5 g — skakning upptäckt
    if magnitude > 2.5 {
        DispatchQueue.main.async {
            self.handleShake()
        }
    }
}

I exemplet är accelerometerUpdateInterval inställt på 1/60 s (~60 Hz) — optimalt för mjuk animering och spel. Metoden isAccelerometerAvailable kontrollerar om sensorn finns på enheten. Accelerationsvärden returneras i enheter av g (där 1 g = 9.8 m/s²). Vektorn magnitude beräknas som euklidisk norm av de tre komponenterna — om värdet överstiger 2.5 g tolkas detta som en skakning av enheten (shake). För att stoppa uppdateringar, anropa stopAccelerometerUpdates när du lämnar skärmen.

Användningsscenarier

Accelerometern används inom ett brett spektrum av mobila applikationer. Det mest uppenbara scenariot är automatisk skärmrotation: systemet växlar mellan porträtt- och landskapsorientering baserat på accelerometerdata. I spel fungerar accelerometern som kontroll — lutning av enheten vrider ratten eller flyttar karaktären. Fitnessapplikationer räknar steg baserat på karakteristiska accelerationspikar vid gång. Nedan finns en tabell med typiska scenarier och sensorkrav.

ScenarioFrekvens (Hz)NoggrannhetFiltrering
Automatisk skärmrotation5-10LågLPF
Stegräkning20-50MedelHPF + toppdetektor
Spel (racing)50-200HögKalibrering + LPF
Kamerastabilisering200-1000MaximalKomplementärt filter
Gestigenkänning50-100MedelHPF + tröskeldetektor

Vid implementering av accelerometern måste man ta hänsyn till att uppvärmning av enheten och åldrande av sensorn kan påverka avläsningarnas noggrannhet. För kritiska mätningar (videostabilisering, kompass) rekommenderas ytterligare användning av gyroskop och magnetometer inom ramen för sensorintegration (sensor fusion).

Kalibrering och fel

Accelerometrar är utsatta för flera typer av fel: nollpunktsförskjutning (bias) — när sensorn visar ett värde som inte är noll i vila; skalfaktor fel (scale factor error) — när känsligheten på olika axlar skiljer sig; och mätbrus (noise), som minskar noggrannheten hos en enskild avläsning. Vid tillverkning kalibreras MEMS-sensorer, men med tiden kan parametrar driva på grund av temperatur och mekanisk belastning. För korrigering i applikationen kan en enkel kalibrering implementeras: i vila, registrera medelvärdet (förskjutningen) och subtrahera det från alla efterföljande mätningar. En mer noggrann kalibrering kräver rotation av enheten runt alla axlar — denna metod kallas sexpunktskalibrering (six-point calibration) och ger ett fel på mindre än 0.5%.

Vanliga frågor

Vad är en accelerometer i telefonen?

Accelerometer i en smartphone är en MEMS-sensor på cirka 1 mm som mäter acceleration längs tre axlar. Den bestämmer enhetens orientering (porträtt eller landskap), skakning, steg och rörelse utan externa källor.

Vad är skillnaden mellan en accelerometer och ett gyroskop?

Accelerometern mäter linjär acceleration (inklusive gravitation), medan gyroskopet mäter vinkelhastighet (rotation). Accelerometern bestämmer orientering, gyroskopet bestämmer rotation. Tillsammans ger de exakt rörelsespårning i rymden (sensor fusion).

Hur hämtar jag data från accelerometern på Android?

Använd SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) för att få sensorn, sedan registerListener med SensorEventListener. I onSensorChanged innehåller arrayen event.values X-, Y-, Z-värdena i m/s². Avregistrera i onPause.

Hur upptäcker jag skakning av enheten?

Beräkna magnitude = sqrt(x² + y² + z²). Om magnitude överstiger 2-3 g (efter gravitationsfiltrering) har enheten skakats. För iOS använd CMMotionManager med tröskel 2.5 g, för Android — Sensor.TYPE_LINEAR_ACCELERATION med tröskel 15 m/s².

Kan en accelerometer kalibreras programmatiskt?

Ja, för en enkel kalibrering placera enheten på en plan yta, registrera genomsnittsavläsningarna för varje axel under 2-3 sekunder och subtrahera dessa värden från alla efterföljande mätningar. Detta kompenserar nollpunktsförskjutning (bias), men inte skalningsfelet.

Sammanfattning

  • Accelerometer — MEMS-sensor för mätning av acceleration längs X-, Y-, Z-axlarna baserad på förskjutning av mikroskopisk massa.
  • Funktionsprincip — kapacitiv MEMS med closed-loop-återkoppling, noggrannhet upp till 0.001g.
  • Android tillhandahåller SensorManager med TYPE_ACCELEROMETER och SensorEventListener för dataåtkomst.
  • iOS använder Core Motion med CMMotionManager och startAccelerometerUpdates för datahämtning.
  • Filtrering — lågpassfilter för gravitation och högpassfilter för linjär acceleration.
  • Tillämpning — automatisk skärmrotation, stegräkning, spel, stabilisering och gestigenkänning.
  • Rekommendation — välj uppdateringsfrekvens efter scenario: för steg 20-50 Hz, för spel 50-200 Hz, för stabilisering 200-1000 Hz.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också