⬤ Intermédio
⚙️ Motor com Transístor
Nesta página
Por que usar um transístor?
O BC547
Montagem
Ligar e parar o motor
Controlar velocidade PWM
⚡ Por Que Usar um Transístor?
O micro:bit fornece apenas ~5mA por pino — muito pouco para um motor DC que precisa de ~200mA. Um transístor NPN funciona como interruptor eletrónico: um sinal pequeno no micro:bit controla uma corrente muito maior para o motor.
🔌
Base (B)
Entrada de controlo — ligada ao pino do micro:bit via resistência de 47Ω.
⚡
Coletor (C)
Ligado ao motor (polo negativo). Quando a base recebe corrente, o coletor conduz.
🔋
Emissor (E)
Ligado ao GND. A corrente flui de Coletor para Emissor quando o transístor está em saturação.
🔬 O Transístor BC547
Tipo
NPN
BC547 ou equivalente
Ic max.
100 mA
Corrente de coletor
hFE (ganho)
~200
Ic = hFE × Ib
Pinagem flat
E-B-C
Da esq. p/ dir. (plano virado)
⚠️ Díodo de roda livre obrigatório!
O motor é uma carga indutiva — ao desligar, gera um pico de tensão reversa que pode destruir o transístor. Liga um díodo 1N4007 em paralelo com o motor (cátodo para 3V, ânodo para o coletor do transístor).
🔌 Montagem Completa
P16→ Resistência 47Ω → Base (B) do BC547
Motor+→ 3V (alimentação)
Motor−→ Coletor (C) do BC547 + cátodo do díodo
GND→ Emissor (E) do BC547
3V→ Ânodo do díodo (em paralelo com motor)
▶️ Ligar e Parar o Motor
motor_basico.js
// Motor em P16 via transístor
// Botão A: ligar · Botão B: parar
input.onButtonPressed(Button.A, function () {
pins.digitalWritePin(DigitalPin.P16, 1) // Liga motor
basic.showIcon(IconNames.Yes)
})
input.onButtonPressed(Button.B, function () {
pins.digitalWritePin(DigitalPin.P16, 0) // Para motor
basic.showIcon(IconNames.No)
})
// Estado inicial: motor parado
pins.digitalWritePin(DigitalPin.P16, 0)
📈 Controlar Velocidade com PWM
motor_velocidade.js
// Potenciómetro em P1 controla velocidade do motor em P16
basic.forever(function () {
let pot = pins.analogReadPin(AnalogPin.P1)
// pot: 0-1023 → já é compatível com analogWritePin
pins.analogWritePin(AnalogPin.P16, pot)
// Mostrar velocidade em % na matriz
let pct = Math.map(pot, 0, 1023, 0, 100)
serial.writeValue("rpm_pct", pct)
basic.pause(50)
})
🏆 Para ir mais longe
- Programa 3 velocidades: botão A = lento (30%), A+B = médio (60%), B = rápido (100%)
- Usa o LDR para controlar a velocidade: mais luz = motor mais rápido (simulação de energia solar)
- Implementa um arranque suave: acelera de 0 a 100% em 3 segundos ao ligar
- Mede a temperatura com o sensor interno do micro:bit e para o motor se ultrapassar 30°C