#150Principiante

Simulador de Semáforo Raspberry Pi Pico (3 LEDs Secuenciales, GP11/GP12/GP13)

Simulamos un semáforo real con LEDs rojo, amarillo y verde. Verde 4 seg "pase", amarillo 1,5 seg "prepárese", rojo 3 seg "detenga" y rojo+amarillo 1 seg "arranque" (patrón europeo). Aprende definición de función, lógica de máquina de estados y sincronización multi-GPIO. Circuito simple: 3 LEDs en GP11/GP12/GP13.

4.0(1)
12 completado
Simulador de Semáforo Raspberry Pi Pico (3 LEDs Secuenciales, GP11/GP12/GP13)
Simulamos el funcionamiento real de un semáforo con LED rojos, amarillos y verdes: ¡el primer proyecto de la serie Pico que utiliza 3 LED! Verde: 4 segundos «adelante»; amarillo: 1,5 segundos «prepárate»; rojo: 3 segundos «para»; y rojo + amarillo: 1 segundo «arranque» (patrón de semáforos europeo). Con este proyecto aprenderás los conceptos de **definición de funciones** (`def apagar_todos()`), **lógica de máquina de estados** (secuencia) y **sincronización de múltiples GPIO**. El circuito es muy sencillo: 3 LED conectados a los pines GP11 (verde), GP12 (amarillo) y GP13 (rojo), cada uno con una resistencia limitadora de corriente de 220 Ω. Los pines GP11, GP12 y GP13 están uno al lado del otro, por lo que el cableado queda ordenado. Se monta en 5 minutos en una placa Wokwi o en una placa de pruebas. Con este proyecto también se introduce la **modularidad del código**: la operación repetitiva (apagar los LED) se ha agrupado en una sola función.

Video

Diagrama del circuito

Simulador de Semáforo Raspberry Pi Pico (3 LEDs Secuenciales, GP11/GP12/GP13) - Circuit

Código fuente

MicroPython
1# ─────────────────────────────────────────
2#   BlueGrays · bluegrays.com
3#   Simulador de Semáforo Raspberry Pi Pico (3 LEDs Secuenciales, GP11/GP12/GP13)
4# ─────────────────────────────────────────
5# Un ciclo real de semáforo con LED rojo, amarillo y verde: verde 4 s,
6# amarillo 1.5 s, rojo 3 s, luego rojo + amarillo 1 s (inicio al estilo
7# europeo). Una función auxiliar que apaga todos los LED evita repetir
8# código.
9#
10# Pines:
11#   GP11 -> LED verde
12#   GP12 -> LED amarillo
13#   GP13 -> LED rojo (cada LED con 220 ohmios)
14#   LED katotlari -> Cátodos de los LED -> GND
15
16from machine import Pin
17from time import sleep
18
19# ============ PIN / PIN ============
20# Pines del semáforo (adyacentes GP11-GP12-GP13)
21green_led  = Pin(11, Pin.OUT)      # LED verde: paso libre
22yellow_led = Pin(12, Pin.OUT)      # LED amarillo: LISTO
23red_led    = Pin(13, Pin.OUT)      # LED rojo: ALTO
24
25# ============ FUNCIÓN AUXILIAR ============
26def all_off():
27    """
28    TR: Tum LED'leri sondur (DRY prensibi: tekrardan kacinmak icin)
29    EN: Turn off all LEDs (DRY principle: avoid repetition)
30    """
31    green_led.value(0)
32    yellow_led.value(0)
33    red_led.value(0)
34
35print("== BlueGrays · bluegrays.com ==")
36print("Trafik Lambasi / Traffic Light")
37print("Yesil: GP11 | Sari: GP12 | Kirmizi: GP13")
38
39# ============ BUCLE PRINCIPAL ============
40while True:
41    # VERDE: ADELANTE (4 s)
42    all_off()
43    green_led.value(1)
44    print("[TRAFIK/TRAFFIC] YESIL / GREEN — GEC / GO")
45    sleep(4)
46
47    # AMARILLO: LISTO (1.5 s)
48    all_off()
49    yellow_led.value(1)
50    print("[TRAFIK/TRAFFIC] SARI / YELLOW — HAZIRLAN / READY")
51    sleep(1.5)
52
53    # ROJO: ALTO (3 s)
54    all_off()
55    red_led.value(1)
56    print("[TRAFIK/TRAFFIC] KIRMIZI / RED — DUR / STOP")
57    sleep(3)
58
59    # ROJO + AMARILLO: ARRANQUE (1 s), estilo europeo
60    # Fase inicial: el conductor mete la marcha del coche
61    yellow_led.value(1)
62    print("[TRAFIK/TRAFFIC] KIRMIZI+SARI / RED+YELLOW — KALKIS / STARTING")
63    sleep(1)
64

Preguntas frecuentes

¿Qué significa que se enciendan juntas las luces roja y amarilla?▾

En algunos semáforos de Europa, antes de pasar de rojo a verde, se encienden a la vez la luz roja y la amarilla; esto sirve para indicar a los conductores que se preparen. En Turquía también se utiliza este sistema.

¿Cuál es la ventaja de definir una función?▾

Una función como «all_off()» te permite llamar a tres líneas repetitivas con un solo nombre. El código se acorta, se vuelve más legible y los cambios se realizan desde un único lugar.

¿Cómo puedo cambiar los plazos?▾

Cambia los valores en segundos dentro de sleep() para cada luz. Si defines los valores como constantes al principio del archivo (p. ej., GREEN_TIME = 4) y los utilizas en llamadas como sleep(GREEN_TIME), resultará mucho más fácil ajustarlos.

¿Puedo añadir un botón para peatones?▾

Sí. Puedes añadir un botón y, al pulsarlo, hacer que el ciclo cambie a rojo. Para que el botón se detecte al instante, hay que utilizar ticks_ms() en lugar de sleep para controlar el tiempo; esto se explica en el siguiente proyecto sobre el selector de modos.

Semáforo Raspberry Pi Pico (MicroPython) | BlueGrays