Multi-componente
🏠 Ventilação Automática
Nesta página
Visão do sistema
Montagem completa
Controlo simples
Velocidade variável
Dashboard na matriz LED
🏠 Sistema de Ventilação Inteligente
Este projeto cria um sistema de ventilação automática: o LDR simula um sensor de temperatura (mais luz = mais quente) e controla um motor DC com transístor que alimenta a ventoinha. A matriz LED do micro:bit mostra o estado do sistema em tempo real.
🌡️
Sensor (LDR)
Simula temperatura — leitura analógica de 0 a 1023.
⚙️
Atuador (Motor)
Ventoinha controlada via transístor. Velocidade proporcional à "temperatura".
📊
Dashboard (Matriz)
5 colunas da matriz LED mostram o nível de ventilação atual.
🔘
Manual/Auto (Botão)
Botão A alterna entre modo automático e manual.
🔌 Montagem Completa
P1→ Divisor LDR: 3V → LDR → P1 → 2.2KΩ → GND
P16→ Resistência 47Ω → Base BC547 → Motor(+)=3V · Motor(-)=Coletor → GND=Emissor
DíodoMotor(−) → Cátodo díodo; Ânodo díodo → 3V (proteção flyback)
P2→ 47Ω → LED verde (modo AUTO) → GND
P3→ 47Ω → LED vermelho (alerta temperatura alta) → GND
▶️ Controlo Simples ON/OFF
ventilacao_simples.js
// Ventilação automática simples: liga acima de um limiar
let LIMIAR_ON = 500 // ligar ventilação
let LIMIAR_OFF = 350 // desligar (histerese)
let motor_ligado = false
basic.forever(function () {
let temp_sim = pins.analogReadPin(AnalogPin.P1)
if (!motor_ligado && temp_sim > LIMIAR_ON) {
pins.digitalWritePin(DigitalPin.P16, 1)
motor_ligado = true
basic.showIcon(IconNames.Yes)
serial.writeValue("motor", 1)
} else if (motor_ligado && temp_sim < LIMIAR_OFF) {
pins.digitalWritePin(DigitalPin.P16, 0)
motor_ligado = false
basic.showIcon(IconNames.No)
serial.writeValue("motor", 0)
}
serial.writeValue("ldr", temp_sim)
basic.pause(200)
})
📈 Velocidade Variável com PWM
ventilacao_pwm.js
// Velocidade proporcional à "temperatura" (LDR)
let TEMP_MIN = 200 // abaixo: motor desligado
let TEMP_MAX = 800 // acima: motor à velocidade máxima
basic.forever(function () {
let temp = pins.analogReadPin(AnalogPin.P1)
let velocidade = 0
if (temp > TEMP_MIN) {
// Mapear temp→velocidade entre os limiares
velocidade = Math.map(temp, TEMP_MIN, TEMP_MAX, 200, 1023)
velocidade = Math.clamp(0, 1023, velocidade)
}
pins.analogWritePin(AnalogPin.P16, velocidade)
// Indicador: LED vermelho se muito quente
pins.digitalWritePin(DigitalPin.P3, temp > 700 ? 1 : 0)
serial.writeValue("temp", temp)
serial.writeValue("vel", velocidade)
basic.pause(100)
})
📊 Dashboard na Matriz LED
dashboard_ventilacao.js
// Dashboard completo: modo AUTO/MANUAL + barra de nível
let modo_auto = true
let vel_manual = 512
// Botão A: alternar AUTO/MANUAL
input.onButtonPressed(Button.A, function () {
modo_auto = !modo_auto
pins.digitalWritePin(DigitalPin.P2, modo_auto ? 1 : 0)
basic.showString(modo_auto ? "A" : "M")
})
// Botão B (modo manual): aumentar velocidade
input.onButtonPressed(Button.B, function () {
if (!modo_auto) {
vel_manual = Math.min(1023, vel_manual + 200)
pins.analogWritePin(AnalogPin.P16, vel_manual)
basic.showNumber(Math.map(vel_manual, 0, 1023, 0, 9))
}
})
basic.forever(function () {
let ldr = pins.analogReadPin(AnalogPin.P1)
let vel = 0
if (modo_auto) {
vel = ldr > 200 ? Math.map(ldr, 200, 1023, 100, 1023) : 0
vel = Math.clamp(0, 1023, vel)
pins.analogWritePin(AnalogPin.P16, vel)
} else {
vel = vel_manual
}
// Barra de nível na matriz (5 colunas × 5 linhas)
let nivel = Math.map(vel, 0, 1023, 0, 4)
for (let x = 0; x <= 4; x++) {
for (let y = 0; y <= 4; y++) {
// Barra preenchida de baixo para cima
if ((4 - y) <= nivel) {
led.plotBrightness(x, y, 255)
} else {
led.plotBrightness(x, y, 0)
}
}
}
// Alerta térmico: piscar toda a matriz se temp alta
if (ldr > 850) {
basic.showIcon(IconNames.Angry)
pins.digitalWritePin(DigitalPin.P3, 1)
music.playTone(1500, 100)
} else {
pins.digitalWritePin(DigitalPin.P3, 0)
}
serial.writeValue("ldr", ldr)
serial.writeValue("vel", vel)
basic.pause(100)
})
💡 Extensão do cenário LED oficial
Este projeto é a base do cenário de aprendizagem "Ventilação Automática" dos LED — Laboratórios de Educação Digital. Experimenta combinar com o sensor de temperatura integrado do micro:bit para um sistema ainda mais realista.
🏆 Para ir mais longe
- Substitui o LDR pelo sensor de temperatura integrado do micro:bit — o sistema fica mais realista
- Adiciona modo NOTURNO: entre as 22h-6h (simulado por botão), a ventilação corre a velocidade máxima de 40%
- Implementa histórico: guarda o valor de temperatura de cada minuto (usando millis) e mostra o máximo diário
- Usa dois micro:bits via rádio: um como sensor de temperatura remoto, outro como controlador do motor