← Volver a proyectos
PROYECTO #01 Iniciación ⏱ 30 min

Encender
un LED

Conecta un LED a la micro:bit y hazlo parpadear con tu primer programa. El primer paso para controlar el mundo fisico desde el codigo — simple, visual e inmediato.

LED (cualquier color) micro:bit 🔌 1 pin 📚 Salida digital
LED
1
LED
30'
Tiempo
P0
Pin

Materiales necesarios

Reúne estos componentes antes de empezar. Haz clic en el nombre para ver la guía de cada componente.

LED Verde LED Rojo
LED (cualquier color)
Vale verde, rojo u otro color
Pin P0
×1 Ver guía del LED → 🛒 Comprar
micro:bit
micro:bit V2
Controlador principal
×1 🛒 Comprar
Cables Dupont
Cables Dupont
3 cables (S, V, G)
×3 🛒 Comprar
Shield expansión Shield Keyestudio Shield Driver
Shield de expansión
Cualquier shield compatible
Base de conexión
×1 🛒 Comprar

Conexión de los componentes

Sigue la tabla y los pasos exactamente. Conectar mal puede dañar el componente o hacer que no funcione.

Componente Pin shield Cable recomendado
LED — Señal P0 Amarillo (S)
LED — Alimentación V (3.3V) Rojo (V)
LED — Tierra G (GND) Negro (G)
1
Coge el modulo LED (del color que prefieras). Fijate en los 3 pines: S (señal), V (voltaje) y G (tierra).
2
Busca el bloque P0 en tu shield de expansion. Conecta el pin S del LED al agujero S del bloque P0.
3
Conecta V → V y G → G del mismo bloque P0. Comprueba que ningun cable toca otro y todos estan bien encajados.
💡 Truco: El modulo LED ya lleva la resistencia integrada. No necesitas añadir nada mas — solo los 3 cables (S, V, G) y listo.

Programación

Elige tu lenguaje preferido. Ambos códigos hacen exactamente lo mismo — elige el que uses en clase.

MakeCode JavaScript
// Encender un LED — primera prueba con micro:bit
// LED conectado al pin P0 de la shield

basic.forever(function () {
    // Encender el LED (1 = ON)
    pins.digitalWritePin(DigitalPin.P0, 1)
    basic.showIcon(IconNames.Happy)
    basic.pause(1000)

    // Apagar el LED (0 = OFF)
    pins.digitalWritePin(DigitalPin.P0, 0)
    basic.showIcon(IconNames.Sad)
    basic.pause(1000)
})
🔁
basic.forever() — Este bloque se repite sin parar. Todo lo que está dentro se ejecuta una y otra vez de forma continua, como un bucle infinito.
pins.digitalWritePin(DigitalPin.P0, 1) — Envía un 1 (señal HIGH = encendido) al pin P0. Un 0 apaga el pin. Así controlamos si el LED está ON u OFF.
⏱️
basic.pause(1000) — El micro:bit espera 1000 milisegundos (= 1 segundo) antes de continuar. Cambia este numero para hacer el parpadeo mas rapido o lento.
MicroPython
from microbit import *

# LED conectado al pin P0 de la shield

while True:
    # Encender el LED (1 = ON)
    pin0.write_digital(1)
    display.show(Image.HAPPY)
    sleep(1000)

    # Apagar el LED (0 = OFF)
    pin0.write_digital(0)
    display.show(Image.SAD)
    sleep(1000)
🔁
while True: — En Python, esto es el bucle infinito. Todo lo indentado debajo se repite para siempre mientras el micro:bit esté encendido.
pin0.write_digital(1) — Pone el pin 0 en HIGH (1 = encendido). Con 0 lo apagamos. Es el equivalente exacto de digitalWritePin en MakeCode.
⏱️
sleep(3000) — Pausa de 3000 ms = 3 segundos. La función viene incluida al importar el módulo microbit.
🔢
for i in range(3): — Repite el bloque de código 3 veces. range(3) genera los valores 0, 1, 2 — tres iteraciones en total.

Pruébalo — ¿Qué debería pasar?

Sube el código al micro:bit y comprueba que ocurre exactamente esto. Si algo falla, ve a la sección "Problemas frecuentes".

Al arrancar: El LED verde se enciende y la pantalla del micro:bit muestra la letra "V" desplazándose.
Después de 3 segundos: El LED verde parpadea rápidamente 3 veces (apagado/encendido) simulando la fase amarilla.
Tras el parpadeo: El LED verde se apaga, el LED rojo se enciende y la pantalla muestra la letra "R".
Después de otros 3 segundos: El ciclo se repite desde el principio. El semáforo funciona de forma continua e infinita.
En todo momento: Solo un LED está encendido a la vez — nunca los dos al mismo tiempo (excepto durante el parpadeo de transición).
⏱️ Secuencia temporal completa
0s — LED verde ON, pantalla "V"
3s — Parpadeo verde (3 × 200ms)
4.2s — LED rojo ON, pantalla "R"
7.2s — Ciclo reinicia desde el principio
Ciclo completo: ~7 segundos
📺 ¿La pantalla va muy despacio?
Es normal. basic.showString() desplaza el texto. Cuando el ciclo es corto, la letra puede quedar a medias — no es un error.

Actividades de ampliación

¿Ya funciona? Ahora modifica el proyecto para ir más allá. Cada reto te enseña un concepto nuevo.

RETO 1 🎯
Cambia los tiempos para que el verde dure 5 segundos y el rojo solo 2 segundos. ¿Qué pasa con el tráfico cuando el verde es más largo?
Pista: Busca los dos basic.pause(3000) en el código. Cambia el primer 3000 por 5000 y el segundo por 2000.
RETO 2 🎯
Añade un tercer LED amarillo conectado a P2. En la fase de transición, en lugar de parpadear el verde, enciende el amarillo durante 1 segundo.
Pista: Necesitas pins.digitalWritePin(DigitalPin.P2, 1) para encender el amarillo y luego apagarlo con 0.
RETO 3 🎯
Haz que el micro:bit muestre una cuenta atrás en segundos durante la fase verde: 3, 2, 1... y luego cambie a rojo.
Pista: Usa un bucle for (let t = 3; t > 0; t--) con basic.showNumber(t) y basic.pause(1000) dentro.
RETO 4 🎯
Añade un botón de emergencia usando el botón A del micro:bit que fuerce el cambio de fase inmediatamente, sin esperar el temporizador.
Pista: Dentro del pause, añade un if (input.buttonIsPressed(Button.A)) que use break para salir del bucle actual.

Problemas frecuentes

Si algo no funciona, busca aquí tu problema. El 95% de los errores tienen una solución sencilla.

"El LED no se enciende para nada"
Revisa que el cable de señal va al pin correcto (P0 para verde, P1 para rojo) y NO al pin V o G. Es el error más común. El pin de señal es el marcado con "S" en el módulo del LED.
"Los dos LEDs se encienden a la vez"
Los LEDs están invertidos: el verde está en P1 y el rojo en P0. Intercambia los cables de señal, o cambia P0 por P1 y P1 por P0 en el código.
"El semáforo no cambia de fase — se queda parado"
Asegúrate de que todo el código está dentro de basic.forever() y no fuera. Si el código está fuera, se ejecuta solo una vez y para. En MicroPython, verifica la indentación dentro del while True:.
"La pantalla muestra cosas raras o letras a medias"
Esto es completamente normal. basic.showString() desplaza el texto y puede interrumpirse cuando comienza el siguiente ciclo. No es un error. Puedes usar basic.showNumber() si quieres un valor instantáneo.

¿Quieres ir más allá?

Ideas para expandir este proyecto y conectarlo con el mundo real.

🚶
Semáforo para peatones
Añade un botón que, cuando lo pulsen los peatones, fuerce el cambio a rojo vehicular y verde peatonal. Un sistema de semáforo real interactivo.
🔊
Semáforo con sonido
Usa el buzzer del micro:bit para emitir pitidos durante la fase verde y una alerta sonora al cambiar. Útil para personas con discapacidad visual — tecnología inclusiva.
🚗
Cruce de dos semáforos
Conecta dos micro:bits vía radio y sincroniza dos semáforos: cuando uno está en verde, el otro está en rojo. Simula una intersección real con comunicación inalámbrica.
Siguiente proyecto
Proyecto #02 — Lámpara con Botón
Aprende a leer entradas digitales con un pulsador y usa variables booleanas para crear un interruptor de verdad.
Siguiente proyecto →