#150Iniciante

Raspberry Pi Pico: semáforo (3 LEDs em sequência, GP11/GP12/GP13)

Simulamos um semáforo real com LEDs vermelho, amarelo e verde — o primeiro projeto com 3 LEDs da série Pico! Verde por 4 segundos: "siga"; amarelo por 1,5 segundo: "prepare-se"; vermelho por 3 segundos: "pare"; e vermelho+amarelo por 1 segundo: "saída" (padrão de semáforo europeu). Aprenda **definição de funções** (`def all_off()`), **lógica de máquina de estados** (sequência) e **sincronização de vários GPIOs**.

4.0(1)
12 concluído
Raspberry Pi Pico: semáforo (3 LEDs em sequência, GP11/GP12/GP13)
Traga para sua mesa o semáforo que você vê todos os dias na rua. O verde fica aceso por 4 segundos, o amarelo dá um breve aviso e o vermelho faz você esperar por 3 segundos; então, vermelho e amarelo acendem juntos para dizer "prepare-se, o verde vem aí", e o ciclo recomeça. A maneira mais simples de controlar três LEDs em sequência com um Raspberry Pi Pico.

Vídeo

Esquema do circuito

Raspberry Pi Pico: semáforo (3 LEDs em sequência, GP11/GP12/GP13) - Circuit

Código-fonte

MicroPython
1# ─────────────────────────────────────────
2#   BlueGrays · bluegrays.com
3#   Raspberry Pi Pico Traffic Light Simulator (3 LEDs Sequential, GP11/GP12/GP13)
4# ─────────────────────────────────────────
5# A real traffic light cycle with red, yellow and green LEDs: green 4 s,
6# yellow 1.5 s, red 3 s, then red + yellow 1 s (European style start). A
7# helper function that turns all LEDs off avoids repeated code.
8#
9# Pins:
10#   GP11 -> Green LED
11#   GP12 -> Yellow LED
12#   GP13 -> Red LED (each LED with 220 ohm)
13#   LED katotlari -> LED cathodes -> GND
14
15from machine import Pin
16from time import sleep
17
18# ============ PIN / PIN ============
19# Traffic light pins (adjacent GP11-GP12-GP13)
20green_led  = Pin(11, Pin.OUT)      # Green LED: GO
21yellow_led = Pin(12, Pin.OUT)      # Yellow LED: READY
22red_led    = Pin(13, Pin.OUT)      # Red LED: STOP
23
24# ============ HELPER FUNCTION ============
25def all_off():
26    """
27    TR: Tum LED'leri sondur (DRY prensibi: tekrardan kacinmak icin)
28    EN: Turn off all LEDs (DRY principle: avoid repetition)
29    """
30    green_led.value(0)
31    yellow_led.value(0)
32    red_led.value(0)
33
34print("== BlueGrays · bluegrays.com ==")
35print("Trafik Lambasi / Traffic Light")
36print("Yesil: GP11 | Sari: GP12 | Kirmizi: GP13")
37
38# ============ MAIN LOOP ============
39while True:
40    # GREEN: GO (4 s)
41    all_off()
42    green_led.value(1)
43    print("[TRAFIK/TRAFFIC] YESIL / GREEN — GEC / GO")
44    sleep(4)
45
46    # YELLOW: READY (1.5 s)
47    all_off()
48    yellow_led.value(1)
49    print("[TRAFIK/TRAFFIC] SARI / YELLOW — HAZIRLAN / READY")
50    sleep(1.5)
51
52    # RED: STOP (3 s)
53    all_off()
54    red_led.value(1)
55    print("[TRAFIK/TRAFFIC] KIRMIZI / RED — DUR / STOP")
56    sleep(3)
57
58    # RED + YELLOW: STARTING (1 s), European style
59    # Starting phase: the driver puts the car in gear
60    yellow_led.value(1)
61    print("[TRAFIK/TRAFFIC] KIRMIZI+SARI / RED+YELLOW — KALKIS / STARTING")
62    sleep(1)
63

Perguntas frequentes

O que significa quando as luzes vermelha e amarela acendem juntas?▾

Em alguns semáforos da Europa, as luzes vermelha e amarela acendem juntas antes da mudança do vermelho para o verde; isso avisa os motoristas para se prepararem. Esse padrão também é usado na Turquia.

Qual é a vantagem de definir uma função?▾

Uma função como `all_off()` permite chamar três linhas repetitivas de código usando um único nome. O código fica mais curto e legível, e as alterações são feitas em um só lugar.

Como alterar os tempos?▾

Altere os valores em segundos dentro de `sleep()` para cada luz. Se você definir os valores como constantes no início do arquivo (por exemplo, GREEN_TIME = 4) e usá-los em chamadas como `sleep(GREEN_TIME)`, fica muito mais fácil ajustá-los.

Posso adicionar um botão para pedestres?▾

Sim. Você pode adicionar um botão que, ao ser pressionado, muda o ciclo para o vermelho. Para que o botão seja detectado imediatamente, é preciso usar `ticks_ms()` para controlar o tempo em vez de `sleep`; isso será explicado no próximo projeto de seletor de modos.