#150Principiante

Simulatore Semaforo Raspberry Pi Pico (3 LED Sequenziali, GP11/GP12/GP13)

Simuliamo un vero semaforo con LED rosso, giallo e verde. Verde 4 sec "vai", giallo 1,5 sec "preparati", rosso 3 sec "fermati" e rosso+giallo 1 sec "partenza" (pattern europeo). Impara la definizione di funzione, la logica della macchina a stati e la sincronizzazione multi-GPIO. Circuito semplice: 3 LED su GP11/GP12/GP13.

4.0(1)
12 completato
Simulatore Semaforo Raspberry Pi Pico (3 LED Sequenziali, GP11/GP12/GP13)
Simuliamo la logica di un vero semaforo con LED rosso, giallo e verde — il primo progetto della serie Pico che passa a 3 LED! Verde 4 secondi «vai», giallo 1.5 secondi «preparati», rosso 3 secondi «stop» e rosso+giallo 1 secondo «partenza» (lo schema del semaforo europeo). Con questo progetto imparerai i concetti di **definizione di funzioni** (`def all_off()`), **logica a macchina a stati** (sequenza) e **sincronizzazione di più GPIO**. Il circuito è semplicissimo: 3 LED sui pin GP11 (Verde), GP12 (Giallo) e GP13 (Rosso), ciascuno con una resistenza di limitazione della corrente da 220Ω. GP11-GP12-GP13 sono pin adiacenti — i cavi restano ordinati. Montalo in 5 minuti su Wokwi o su breadboard. Con questo progetto inizia anche la **modularità del codice**: l'operazione ripetuta (spegnere i LED) è stata raccolta in un'unica funzione.

Video

Schema circuito

Simulatore Semaforo Raspberry Pi Pico (3 LED Sequenziali, GP11/GP12/GP13) - Circuit

Codice sorgente

MicroPython
1# ─────────────────────────────────────────
2#   BlueGrays · bluegrays.com
3#   Simulatore Semaforo Raspberry Pi Pico (3 LED Sequenziali, GP11/GP12/GP13)
4# ─────────────────────────────────────────
5# Un vero ciclo di semaforo con LED rosso, giallo e verde: verde 4 s,
6# giallo 1.5 s, rosso 3 s, poi rosso + giallo 1 s (partenza in stile
7# europeo). Una funzione di supporto che spegne tutti i LED evita codice
8# ripetuto.
9#
10# Pin:
11#   GP11 -> LED verde
12#   GP12 -> LED giallo
13#   GP13 -> LED rosso (ogni LED con 220 ohm)
14#   LED katotlari -> Catodi dei LED -> GND
15
16from machine import Pin
17from time import sleep
18
19# ============ PIN / PIN ============
20# Pin del semaforo (adiacenti GP11-GP12-GP13)
21green_led  = Pin(11, Pin.OUT)      # LED verde: VIA
22yellow_led = Pin(12, Pin.OUT)      # LED giallo: PRONTI
23red_led    = Pin(13, Pin.OUT)      # LED rosso: STOP
24
25# ============ FUNZIONE DI SUPPORTO ============
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# ============ CICLO PRINCIPALE ============
40while True:
41    # VERDE: VIA (4 s)
42    all_off()
43    green_led.value(1)
44    print("[TRAFIK/TRAFFIC] YESIL / GREEN — GEC / GO")
45    sleep(4)
46
47    # GIALLO: PRONTI (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    # ROSSO: STOP (3 s)
54    all_off()
55    red_led.value(1)
56    print("[TRAFIK/TRAFFIC] KIRMIZI / RED — DUR / STOP")
57    sleep(3)
58
59    # ROSSO + GIALLO: PARTENZA (1 s), stile europeo
60    # Fase iniziale: il pilota mette l'auto in marcia
61    yellow_led.value(1)
62    print("[TRAFIK/TRAFFIC] KIRMIZI+SARI / RED+YELLOW — KALKIS / STARTING")
63    sleep(1)
64

FAQ

Cosa significa quando la spia rossa e quella gialla si accendono contemporaneamente?▾

In alcuni semafori europei, prima che il semaforo passi dal rosso al verde, si accendono contemporaneamente la luce rossa e quella gialla; questo segnala agli automobilisti di "prepararsi". Anche in Turchia viene utilizzato questo schema.

Qual è l'utilità della definizione di una funzione?▾

Una funzione come `all_off()` ti permette di richiamare tre righe ripetitive con un unico nome. Il codice diventa più breve e leggibile, e le modifiche vengono apportate in un unico punto.

Come posso modificare le durate?▾

Modifica i valori in secondi all'interno di `sleep()` per ciascuna luce. Se definisci i valori come costanti all'inizio del file (ad es. GREEN_TIME = 4) e li utilizzi in chiamate come `sleep(GREEN_TIME)`, la configurazione diventa molto più semplice.

Posso aggiungere un pulsante per i pedoni?▾

Sì. Puoi aggiungere un pulsante e, quando viene premuto, far passare il ciclo al rosso. Affinché il pulsante venga rilevato immediatamente, è necessario utilizzare `ticks_ms()` al posto di `sleep` per la temporizzazione; questo verrà spiegato nel prossimo progetto sul selettore di modalità.

Semaforo Raspberry Pi Pico (MicroPython) | BlueGrays