Nesta página O acelerómetro do micro:bit Leitura dos 3 eixos Detetar inclinação Gestos predefinidos Controlar motor com inclinação

📐 O Acelerómetro do micro:bit V2

O micro:bit V2 inclui um acelerómetro MEMS de 3 eixos integrado. Mede a aceleração (incluindo gravidade) nos eixos X, Y e Z em mili-g (1g = 9.8 m/s²).

Eixo X
±2g
Inclinação esquerda/direita
Eixo Y
±2g
Inclinação frente/trás
Eixo Z
±2g
Para cima/baixo (gravidade)
Intervalo
-1023 a 1023
Valores MakeCode

📊 Leitura dos 3 Eixos

ler_acelerometro.js
// Ler os 3 eixos e enviar para monitor série
basic.forever(function () {
    let x = input.acceleration(Dimension.X)
    let y = input.acceleration(Dimension.Y)
    let z = input.acceleration(Dimension.Z)

    serial.writeValue("x", x)
    serial.writeValue("y", y)
    serial.writeValue("z", z)

    // Z ≈ 1000 quando deitado plano (gravidade)
    // X positivo = inclinado para a direita
    // Y negativo = inclinado para a frente
    basic.pause(100)
})

↔️ Detetar Inclinação

inclinacao.js
basic.forever(function () {
    let x = input.acceleration(Dimension.X)
    let y = input.acceleration(Dimension.Y)

    if (x > 400) {
        basic.showArrow(ArrowNames.East)   // Inclinado direita
    } else if (x < -400) {
        basic.showArrow(ArrowNames.West)   // Inclinado esquerda
    } else if (y > 400) {
        basic.showArrow(ArrowNames.South)  // Inclinado frente
    } else if (y < -400) {
        basic.showArrow(ArrowNames.North)  // Inclinado trás
    } else {
        basic.showIcon(IconNames.Target)   // Plano
    }
    basic.pause(100)
})

🤲 Gestos Predefinidos

Gesto MakeCodeMovimentoUso típico
Gesture.ShakeSacudir o micro:bitDado digital, reiniciar
Gesture.LogoUpLogo (LED) virado para cimaDetetar orientação
Gesture.LogoDownLogo virado para baixoDetetar orientação
Gesture.ScreenUpEcrã virado para cimaPosição plana normal
Gesture.TiltLeftInclinado para a esquerdaControlo de direção
Gesture.TiltRightInclinado para a direitaControlo de direção
Gesture.FreeFallEm queda livreDetetar queda

⚙️ Controlar Motor com Inclinação

acelerometro_motor.js
// Inclinar o micro:bit controla a velocidade do motor
// Motor em P16 via transístor

basic.forever(function () {
    let x = input.acceleration(Dimension.X)

    // Mapear inclinação (0 a 1023) para PWM do motor
    // Só controla quando inclinado para a direita (x positivo)
    if (x > 100) {
        let velocidade = Math.map(x, 100, 1023, 0, 1023)
        velocidade = Math.clamp(0, 1023, velocidade)
        pins.analogWritePin(AnalogPin.P16, velocidade)
        basic.showArrow(ArrowNames.East)
    } else {
        pins.analogWritePin(AnalogPin.P16, 0)
        basic.showIcon(IconNames.No)
    }
    basic.pause(50)
})

🏆 Para ir mais longe