PROYECTO #04 Nivel Medio ⏱ 45 min

Alarma
Anti-Intrusos

El sensor PIR detecta movimiento y activa una alerta visual con el LED rojo. Aprende sobre deteccion de eventos, senales digitales y temporizadores — los fundamentos de cualquier sistema de seguridad.

Sensor PIR LED Rojo micro:bit Placa expansion
★ Materiales

Que necesitas

Todos los componentes de esta lista forman parte del kit de STEAM Thinking. Asegurate de tenerlos todos antes de empezar.

🤖
micro:bit v2
x1 unidad
Ver guia →
🔌
Placa de expansion
x1 unidad
Ver guia →
👁
Sensor PIR
x1 unidad
Ver guia →
🔴
LED Rojo
x1 unidad
Ver guia →
Cables dupont
x6 cables
Ver guia →
💻
Cable USB
x1 unidad
Ver guia →
⚡ Conexion

Como conectar los componentes

Conecta cada cable con cuidado. La placa de expansion tiene etiquetas para cada pin. Un error de conexion puede evitar que el proyecto funcione, pero no daniara nada.

Componente Pin del componente Pin micro:bit Color recomendado
Sensor PIR Signal (OUT) P0 🟡 Amarillo
Sensor PIR V (VCC) 3.3V 🔴 Rojo
Sensor PIR G (GND) GND ⚫ Negro
LED Rojo Signal (S) P1 🟡 Amarillo
LED Rojo V (VCC) 3.3V 🔴 Rojo
LED Rojo G (GND) GND ⚫ Negro
1
Inserta el micro:bit en la placa de expansion. La pantalla de LEDs debe quedar mirando hacia arriba. Escucharas un clic cuando este bien colocado.
2
Conecta el sensor PIR: busca en el sensor las etiquetas OUT, VCC y GND. El cable del OUT (senyal) va a P0, el de VCC a 3.3V y el de GND a GND.
3
Conecta el LED rojo: el LED modulo tiene 3 pines — S (signal), V (voltaje) y G (ground). Signal a P1, V a 3.3V y G a GND.
4
Revisa todas las conexiones antes de conectar el USB. Asegurate de que ningun cable este flojo o conectado al pin equivocado.
5
Espera 60 segundos tras conectar la alimentacion. El sensor PIR necesita este tiempo para calibrarse al nivel de calor del entorno. Durante este tiempo puede dar lecturas erroneas — es normal.
</> Programacion

El codigo del proyecto

Elige tu entorno de programacion. MakeCode JavaScript es mas visual y facil de empezar. MicroPython es el siguiente nivel si quieres aprender programacion real. El comportamiento es identico en ambos.

💡
Como cargar el codigo: Ve a makecode.microbit.org, crea un nuevo proyecto, haz clic en JavaScript y pega el codigo. Luego descarga el archivo .hex y arrastralo al micro:bit que aparece como unidad USB.
JavaScript — MakeCode
// Alarma anti-intrusos con sensor PIR
// El LED rojo se enciende cuando detecta movimiento

let alarmaActiva = false
let contadorDetecciones = 0

basic.forever(function () {
    if (pins.digitalReadPin(DigitalPin.P0) == 1) {
        // ¡Movimiento detectado!
        alarmaActiva = true
        contadorDetecciones += 1

        // Activar alerta visual
        for (let i = 0; i < 5; i++) {
            pins.digitalWritePin(DigitalPin.P1, 1)
            basic.showIcon(IconNames.Target)
            basic.pause(300)
            pins.digitalWritePin(DigitalPin.P1, 0)
            basic.pause(300)
        }

        // Mostrar contador de detecciones
        basic.showNumber(contadorDetecciones)
        basic.pause(1000)

    } else {
        // Sin movimiento → LED apagado
        pins.digitalWritePin(DigitalPin.P1, 0)
        basic.showIcon(IconNames.No)
        basic.pause(500)
    }
})

// Botón A: resetear el contador de detecciones
input.onButtonPressed(Button.A, function () {
    contadorDetecciones = 0
    basic.showString("RST")
})
MicroPython
from microbit import *

contador_detecciones = 0

while True:
    if pin0.read_digital() == 1:
        # ¡Movimiento detectado!
        contador_detecciones += 1

        # Parpadeo de alerta (5 veces)
        for i in range(5):
            pin1.write_digital(1)
            display.show(Image.TARGET)
            sleep(300)
            pin1.write_digital(0)
            sleep(300)

        # Mostrar contador en pantalla
        display.scroll(str(contador_detecciones))
        sleep(1000)

    else:
        # Sin movimiento → LED apagado
        pin1.write_digital(0)
        display.show(Image.NO)
        sleep(500)

    # Botón A: resetear el contador
    if button_a.was_pressed():
        contador_detecciones = 0
        display.scroll("RST")
✓ Pruebalo

Que deberia pasar

Una vez cargado el codigo, repasa esta lista para confirmar que todo funciona correctamente. Si algo no ocurre, ve a la seccion de Problemas.

Al encender: la pantalla del micro:bit muestra un icono de "No" (circulo con aspa) — significa que no hay movimiento y la alarma esta en modo espera.
Al pasar la mano frente al PIR: el LED rojo empieza a parpadear 5 veces y la pantalla muestra una diana (icono Target). Escucharas el silencio — la alarma es solo visual en este proyecto.
Despues del parpadeo: el micro:bit muestra un numero — el contador de detecciones. La primera vez muestra 1, la segunda 2, y asi sucesivamente.
Sin movimiento: el LED rojo se apaga y la pantalla vuelve al icono "No". El sistema espera la proxima deteccion.
Al pulsar el boton A: el contador se pone a cero y la pantalla muestra "RST" brevemente. Util para reiniciar la alarma despues de una deteccion.
Primera calibracion: si el PIR actua raro al principio (detecta sin movimiento), espera 60 segundos sin tocarlo. Necesita ese tiempo para estabilizarse al encenderse.
🎯 Actividades

Amplia el proyecto

Completa el proyecto base y luego intenta estos desafios. Estan ordenados de menor a mayor dificultad. Cada uno te ensenara un concepto nuevo.

🎯 Desafio 1 — Basico
Alerta sostenida
Modifica el tiempo de alerta: en vez de 5 parpadeos rapidos, haz que el LED este encendido exactamente 3 segundos sin parpadear cuando se detecta movimiento. Pista: cambia el bucle for por un encendido directo con basic.pause(3000).
🎯 Desafio 2 — Medio
Modo silencioso
Anade un "modo silencioso" con el boton B: cuando esta activo, el LED no parpadea pero el contador sigue subiendo. Usa una variable booleana modoSilencioso y comprueba su valor dentro del if de deteccion.
🎯 Desafio 3 — Avanzado
Alerta por radio
Haz que el micro:bit envie un mensaje por radio a otro micro:bit cuando detecte movimiento. Usa radio.sendString("ALERTA") en el emisor y radio.onReceivedString en el receptor para encender otro LED a distancia.
🎯 Desafio 4 — Experto
Sistema armado / desarmado
Crea un modo "armado": la alarma solo actua si previamente has pulsado el boton A (armado). Si pulsas A de nuevo, se desactiva (desarmado). La pantalla debe mostrar "ARM" o "DES" segun el estado actual.
⚠ Problemas frecuentes

Algo no funciona?

Estos son los cuatro problemas mas comunes en este proyecto. Lee el sintoma que describes y aplica la solucion antes de pedir ayuda.

"El sensor PIR siempre da 1 — detecta constantemente sin que haya movimiento"
El PIR necesita entre 30 y 60 segundos para calibrarse al encenderlo. Durante este tiempo detecta el calor del entorno como "movimiento". Solucion: desconecta el USB, espera 5 segundos, vuelve a conectar y espera 1 minuto completo sin moverte antes de probar.
"El sensor nunca detecta nada, aunque me mueva justo delante"
El PIR tiene un angulo de deteccion de 120 grados y un rango de hasta 3 metros. Asegurate de moverte dentro de ese angulo. Tambien revisa que el cable de signal esta en P0 (no en P1 o P2) y que el sensor tiene alimentacion (3.3V y GND conectados).
"El LED no parpadea cuando hay deteccion"
Comprueba que el LED rojo esta conectado a P1 y el PIR a P0 — no al reves. Si los tienes invertidos, el codigo leera el LED como sensor y escribira en el sensor. Intercambia los cables de signal y prueba de nuevo.
"El contador no para de subir solo, sigue detectando aunque no me mueva"
El PIR puede tardar hasta 2 segundos en "resetear" la senal despues de una deteccion. El basic.pause(1000) al final del bloque de deteccion ayuda, pero puedes aumentarlo a 2000 para dar mas tiempo al sensor entre lecturas.
🚀 Mas alla

Ideas para seguir explorando

Ya dominas la deteccion de movimiento con PIR. Aqui tienes ideas reales que usan exactamente este mismo principio en el mundo real.

🚨
Alarmas de seguridad reales Los sistemas de alarma domestica usan exactamente el mismo principio: sensores PIR conectados a una central que activa sirenas. La unica diferencia es la escala.
💡
Luces automaticas Las luces de los pasillos y banos publicos que se encienden solas usan sensores PIR. El codigo es casi identico al tuyo pero en lugar de parpade, mantienen la luz encendida X segundos.
📷
Camaras de seguridad Las camaras que "graban solo cuando detectan movimiento" usan un PIR para activar la grabacion. Ahorran espacio de almacenamiento y bateria usando exactamente tu logica.
🤖
Combinar con servo Prueba conectar un servomotor al mismo proyecto: cuando el PIR detecte movimiento, el servo apunta una "camara" (o cualquier objeto) hacia la fuente de calor. Es un tracker de movimiento basico.