Simulateur de Feu de Circulation Raspberry Pi Pico (3 LEDs séquentielles, GP11/GP12/GP13)
Nous simulons un vrai feu de circulation avec des LEDs rouge, jaune et verte. Vert 4 sec "passez", jaune 1,5 sec "préparez", rouge 3 sec "arrêtez" et rouge+jaune 1 sec "départ" (motif européen). Apprends la définition de fonction, la logique de machine à états et la synchronisation multi-GPIO. Circuit simple : 3 LEDs sur GP11/GP12/GP13, chacune avec 220Ω.

Vidéo
Schéma du circuit

Code source
1# ─────────────────────────────────────────
2# BlueGrays · bluegrays.com
3# Simulateur de Feu de Circulation Raspberry Pi Pico (3 LEDs séquentielles, GP11/GP12/GP13)
4# ─────────────────────────────────────────
5# Un vrai cycle de feu tricolore avec des LED rouge, jaune et verte : vert
6# 4 s, jaune 1.5 s, rouge 3 s, puis rouge + jaune 1 s (départ à
7# l'européenne). Une fonction utilitaire qui éteint toutes les LED évite
8# de répéter du code.
9#
10# Broches :
11# GP11 -> LED verte
12# GP12 -> LED jaune
13# GP13 -> LED rouge (chaque LED avec 220 ohm)
14# LED katotlari -> Cathodes des LED -> GND
15
16from machine import Pin
17from time import sleep
18
19# ============ PIN / PIN ============
20# Broches du feu tricolore (GP11-GP12-GP13 adjacentes)
21green_led = Pin(11, Pin.OUT) # LED verte : GO
22yellow_led = Pin(12, Pin.OUT) # LED jaune : PRÊT
23red_led = Pin(13, Pin.OUT) # LED rouge : STOP
24
25# ============ FONCTION UTILITAIRE ============
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# ============ BOUCLE PRINCIPALE ============
40while True:
41 # VERT : GO (4 s)
42 all_off()
43 green_led.value(1)
44 print("[TRAFIK/TRAFFIC] YESIL / GREEN — GEC / GO")
45 sleep(4)
46
47 # JAUNE : PRÊT (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 # ROUGE : STOP (3 s)
54 all_off()
55 red_led.value(1)
56 print("[TRAFIK/TRAFFIC] KIRMIZI / RED — DUR / STOP")
57 sleep(3)
58
59 # ROUGE + JAUNE : DÉMARRAGE (1 s), à l'européenne
60 # Phase de départ : le conducteur passe une vitesse
61 yellow_led.value(1)
62 print("[TRAFIK/TRAFFIC] KIRMIZI+SARI / RED+YELLOW — KALKIS / STARTING")
63 sleep(1)
64FAQ
Que signifie le fait que les voyants rouge et jaune s'allument en même temps ?▾
Sur certains feux de signalisation en Europe, les lumières rouge et orange s'allument simultanément avant que le feu ne passe du rouge au vert ; cela indique aux conducteurs de « se préparer ». Ce système est également utilisé en Turquie.
Quel est l'intérêt de définir une fonction ?▾
Une fonction telle que « all_off() » vous permet d'appeler trois lignes de code répétitives à l'aide d'un seul nom. Le code est ainsi raccourci, devient plus lisible et toute modification s'effectue à un seul endroit.
Comment modifier les durées ?▾
Pour chaque lumière, modifie les valeurs en secondes à l'intérieur de la fonction sleep(). Si tu définis ces valeurs comme des constantes au début du fichier (par ex. GREEN_TIME = 4) et les utilises dans des appels comme sleep(GREEN_TIME), le réglage devient beaucoup plus facile.
Puis-je ajouter un bouton « piéton » ?▾
Oui. Tu peux ajouter un bouton qui, lorsqu'on appuie dessus, fait passer la boucle en rouge. Pour que le bouton soit détecté instantanément, il faut utiliser la fonction ticks_ms() à la place de sleep pour la synchronisation ; cela sera expliqué dans le prochain projet consacré au sélecteur de mode.
