⬤ Intermédio
📐 Acelerómetro
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 MakeCode | Movimento | Uso típico |
|---|---|---|
Gesture.Shake | Sacudir o micro:bit | Dado digital, reiniciar |
Gesture.LogoUp | Logo (LED) virado para cima | Detetar orientação |
Gesture.LogoDown | Logo virado para baixo | Detetar orientação |
Gesture.ScreenUp | Ecrã virado para cima | Posição plana normal |
Gesture.TiltLeft | Inclinado para a esquerda | Controlo de direção |
Gesture.TiltRight | Inclinado para a direita | Controlo de direção |
Gesture.FreeFall | Em queda livre | Detetar 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
- Usa o eixo Y para controlar a velocidade do motor em frente/trás (dois motores com H-bridge externo)
- Cria um "nível de bolha" digital: a matriz LED mostra um ponto que se move conforme a inclinação
- Deteta o gesto "shake" para reiniciar um contador que conta segundos desde o último abalo
- Combina acelerómetro + campainha: inclinar mais de 45° dispara um alarme sonoro