Acelerômetro em aplicativos móveis: o que é, como funciona e onde é usado

Autor: IT Sectr Publicado: 2026-03-22 Tempo de leitura: 9 min

Um acelerômetro em dispositivos móveis é um sensor MEMS que mede a aceleração linear em três eixos para determinar a orientação e o movimento do dispositivo. De acordo com o Google Android Sensors Guide (2025), o acelerômetro é o sensor mais utilizado em aplicativos móveis. A tecnologia MEMS permite colocar o sensor em um chip de 1 mm consumindo menos de 1 mW de energia.

Pontos principais

  • Acelerômetro — sensor MEMS que mede aceleração nos eixos X, Y e Z em m/s² ou g.
  • Princípio de funcionamento baseado no deslocamento de uma massa microscópica sob aceleração, detectado por sensores capacitivos.
  • Android fornece acesso via SensorManager e SensorEventListener.
  • iOS usa CoreMotion com CMMotionManager para obter dados do acelerômetro.
  • Aplicações — detecção de orientação da tela, contagem de passos, jogos, estabilização de imagem.

O que é um acelerômetro

Um acelerômetro é um sensor microeletromecânico (MEMS) que mede a projeção da aceleração em três eixos mutuamente perpendiculares: X (horizontal, apontando para a direita), Y (vertical, apontando para cima) e Z (perpendicular ao plano da tela). Em repouso, o acelerômetro mostra 9.8 m/s² no eixo Z — esta é a aceleração da gravidade direcionada ao centro da Terra. Com base neste valor, o sistema determina a orientação do dispositivo: se o valor Z estiver próximo de 0 e o valor Y estiver próximo de -9.8 m/s², o dispositivo está girado horizontalmente. A faixa de medição do acelerômetro é normalmente de ±2g, ±4g, ±8g ou ±16g dependendo do modelo do chip.

Parâmetros físicos do acelerômetro

Os acelerômetros modernos são caracterizados por vários parâmetros-chave: sensibilidade (a partir de 0.001 m/s²), taxa de amostragem (até 1000 Hz), faixa de medição e nível de ruído. Dispositivos emblemáticos usam sensores STMicroelectronics LSM6DSO ou Bosch BMI270 com frequência de até 1600 Hz e consumo inferior a 0.5 mW em modo ativo. Quanto maior a taxa de amostragem, mais detalhado é o sinal que o aplicativo recebe — jogos requerem 200–400 Hz, enquanto a contagem de passos precisa apenas de 10–50 Hz. O ruído do sensor afeta a precisão das medições e geralmente é compensado por um filtro passa-baixa no nível do sistema operacional.

Princípio de funcionamento do acelerômetro

Um acelerômetro MEMS consiste internamente em uma estrutura microscópica de silício: uma massa de prova suspensa em vigas elásticas entre eletrodos fixos. Quando ocorre uma aceleração, a massa se desloca, alterando a capacitância entre os elementos móveis e fixos — essa mudança é medida e convertida em um sinal elétrico. Um circuito de realimentação em malha fechada mantém a massa na posição central usando força eletrostática, garantindo linearidade em toda a faixa. Em sistemas de malha aberta, a massa se move livremente, simplificando os cálculos mas reduzindo a precisão. Segundo a STMicroelectronics (2025), acelerômetros de malha fechada alcançam precisão de até 0.001g com deriva térmica inferior a 0.1 mg/°C.

Eixos de medição

Os três eixos do acelerômetro correspondem a três dimensões espaciais: X (inclinação esquerda-direita), Y (cima-baixo) e Z (frente-trás em relação à tela). Quando o dispositivo está sobre uma mesa com a tela para cima, o vetor de aceleração gravitacional aponta ao longo do eixo Z a 9.8 m/s². Quando o dispositivo é inclinado, as projeções da gravidade se redistribuem entre os eixos — a partir dessas projeções, o ângulo de inclinação pode ser calculado com precisão de até 0.1 grau. Para detectar movimento sem a influência da gravidade, usa-se um filtro passa-alta para separar o componente dinâmico da aceleração (movimento próprio do dispositivo) do componente estático (gravidade).

Obtendo dados do acelerômetro no Android

No Android, o acesso ao acelerômetro é fornecido através da classe SensorManager e da interface SensorEventListener. O aplicativo obtém o serviço de sistema SENSOR_SERVICE, solicita o sensor TYPE_ACCELEROMETER e registra um listener com uma taxa de atualização especificada. O sistema chama onSensorChanged a cada nova medição, fornecendo uma matriz de valores: values[0] = X, values[1] = Y, values[2] = Z. Abaixo está um exemplo completo de leitura de dados do acelerômetro em 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]

        // Calculando o ângulo de inclinação
        val pitch = Math.atan2(
            x.toDouble(),
            Math.sqrt(y.toDouble() * y + z.toDouble() * z)
        )
        // Atualizando a interface com o novo ângulo
        textViewAngle.text = "Inclinação: ${Math.toDegrees(pitch)}°"
    }

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

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

No exemplo, SensorManager.SENSOR_DELAY_GAME define a taxa de atualização para ~50 Hz, ideal para jogos e aplicativos interativos. Para contagem de passos, use SENSOR_DELAY_NORMAL (~5 Hz); para medições precisas, use SENSOR_DELAY_FASTEST (~200 Hz). Em onSensorChanged, a matriz event.values contém as leituras atuais do sensor. Com base nos valores X, Y, Z, o ângulo de inclinação é calculado usando atan2 — esta é a fórmula básica para determinar a orientação do dispositivo sem usar o sensor de orientação. Não se esqueça de cancelar o registro do listener em onPause para economizar bateria.

Filtragem de ruído

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

override fun onSensorChanged(event: SensorEvent) {
    // Filtro passa-baixa (LPF) para extrair a gravidade
    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]

    // Subtraindo a gravidade — obtendo a aceleração linear
    linearAcceleration[0] = event.values[0] - gravity[0]
    linearAcceleration[1] = event.values[1] - gravity[1]
    linearAcceleration[2] = event.values[2] - gravity[2]
}

Um filtro passa-baixa com coeficiente alpha extrai o componente gravitacional (vetor estático); subtraí-lo fornece a aceleração pura do dispositivo (aceleração linear). Isso é necessário para detectar movimento sem considerar a orientação — por exemplo, detectar um passo, uma sacudida ou um impacto. Um valor alpha de 0.8 significa que o filtro passa cerca de 20% do novo sinal e retém 80% do anterior — suficiente para eliminar o ruído sem atraso significativo.

Obtendo dados do acelerômetro no iOS

No iOS, o acesso ao acelerômetro é fornecido pelo framework Core Motion através da classe CMMotionManager. O aplicativo cria uma instância do gerenciador e chama startAccelerometerUpdates com uma fila e um manipulador. Os dados são retornados como CMAccelerometerData, contendo uma estrutura CMAcceleration com os campos x, y e z. Abaixo está um exemplo de obtenção de dados do acelerômetro em Swift com filtragem de ruído.

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 }

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

    // Se magnitude > 2.5 g — sacudida detectada
    if magnitude > 2.5 {
        DispatchQueue.main.async {
            self.handleShake()
        }
    }
}

No exemplo, accelerometerUpdateInterval é definido como 1/60 seg (~60 Hz) — ideal para animações suaves e jogos. O método isAccelerometerAvailable verifica se o sensor está disponível no dispositivo. Os valores de aceleração são retornados em unidades g (onde 1 g = 9.8 m/s²). O vetor magnitude é calculado como a norma euclidiana dos três componentes — se o valor exceder 2.5 g, é interpretado como uma sacudida do dispositivo. Para parar as atualizações, sempre chame stopAccelerometerUpdates ao sair da tela.

Casos de uso

O acelerômetro é usado em uma ampla gama de aplicativos móveis. O cenário mais óbvio é a rotação automática da tela: o sistema alterna entre orientação retrato e paisagem com base nos dados do acelerômetro. Em jogos, o acelerômetro serve como controle de entrada — inclinar o dispositivo gira o volante ou move o personagem. Aplicativos de fitness contam passos com base nos picos característicos de aceleração ao caminhar. Abaixo está uma tabela com cenários típicos e requisitos do sensor.

CenárioFrequência (Hz)PrecisãoFiltragem
Rotação automática da tela5–10BaixaLPF
Contagem de passos20–50MédiaHPF + detector de picos
Jogos (corrida)50–200AltaCalibração + LPF
Estabilização de câmera200–1000MáximaFiltro complementar
Reconhecimento de gestos50–100MédiaHPF + detector de limiar

Ao implementar um acelerômetro, lembre-se de que o aquecimento do dispositivo e o envelhecimento do sensor podem afetar a precisão das leituras. Para medições críticas (estabilização de vídeo, bússola), recomenda-se usar também o giroscópio e o magnetômetro como parte da fusão de sensores.

Calibração e erros

Os acelerômetros estão sujeitos a vários tipos de erros: desvio de zero — quando o sensor mostra um valor não nulo em repouso; erro de fator de escala — quando a sensibilidade difere entre eixos; e ruído de medição, que reduz a precisão de uma única leitura. Os sensores MEMS são calibrados durante a fabricação, mas com o tempo os parâmetros podem derivar devido à temperatura e ao estresse mecânico. Para compensação no aplicativo, uma calibração simples pode ser implementada: em repouso, registre o valor médio (desvio) e subtraia-o de todas as medições subsequentes. Uma calibração mais precisa requer girar o dispositivo em todos os eixos — este método é chamado de calibração de seis pontos e atinge um erro inferior a 0.5%.

Perguntas frequentes

O que é um acelerômetro no telefone?

Um acelerômetro em um smartphone é um sensor MEMS de cerca de 1 mm que mede a aceleração em três eixos. Ele determina a orientação do dispositivo (retrato ou paisagem), sacudidas, passos e movimento sem usar fontes externas.

Qual a diferença entre acelerômetro e giroscópio?

Um acelerômetro mede aceleração linear (incluindo gravidade), enquanto um giroscópio mede velocidade angular (rotação). O acelerômetro determina a orientação; o giroscópio detecta a rotação. Juntos, eles fornecem rastreamento preciso do movimento no espaço (fusão de sensores).

Como obter dados do acelerômetro no Android?

Use SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) para obter o sensor, depois registerListener com um SensorEventListener. Em onSensorChanged, a matriz event.values contém os valores X, Y, Z em m/s². Sempre cancele o registro em onPause.

Como detectar uma sacudida do dispositivo?

Calcule magnitude = sqrt(x² + y² + z²). Se a magnitude exceder 2–3 g (após filtrar a gravidade), o dispositivo foi sacudido. No iOS, use CMMotionManager com um limiar de 2.5 g; no Android, use Sensor.TYPE_LINEAR_ACCELERATION com um limiar de 15 m/s².

Pode-se calibrar o acelerômetro programaticamente?

Sim, para uma calibração simples coloque o dispositivo numa superfície plana, registre as leituras médias de cada eixo por 2–3 segundos e subtraia esses valores de todas as medições subsequentes. Isso compensa o desvio de zero, mas não o erro de escala.

Resumo

  • Acelerômetro — sensor MEMS para medir aceleração nos eixos X, Y, Z, baseado no deslocamento de massa microscópica.
  • Princípio de funcionamento — MEMS capacitivo com realimentação de malha fechada, precisão de até 0.001g.
  • Android fornece SensorManager com TYPE_ACCELEROMETER e SensorEventListener para acesso a dados.
  • iOS usa Core Motion com CMMotionManager e startAccelerometerUpdates para obter dados.
  • Filtragem — filtro passa-baixa para gravidade e passa-alta para aceleração linear.
  • Aplicações — rotação automática da tela, contagem de passos, jogos, estabilização e reconhecimento de gestos.
  • Recomendação — escolha a taxa de atualização conforme o cenário: 20–50 Hz para passos, 50–200 Hz para jogos, 200–1000 Hz para estabilização.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também