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