#150初級

Raspberry Pi Picoで信号機(3個のLEDを順に点灯、GP11/GP12/GP13)

赤・黄・緑のLEDで本物の信号機を再現する、Picoシリーズ初の3個のLEDを使うプロジェクトです!緑が4秒間「進め」、黄が1.5秒間「準備」、赤が3秒間「止まれ」、赤と黄が1秒間「発進準備」を示します(ヨーロッパの信号機のパターン)。**関数の定義**(`def all_off()`)、**状態機械の仕組み**(順序)、**複数のGPIOの同期**を学びます。回路はとても簡単です。GP11(緑)、GP12(黄)、GP13(赤)に3個のLEDを接続し、それぞれに220Ωの電流制限抵抗を使います。

4.0(1)
12 完了
Raspberry Pi Picoで信号機(3個のLEDを順に点灯、GP11/GP12/GP13)
毎日通りで見かける信号機を、机の上に再現します。緑が4秒間点灯し、黄が短く注意を促し、赤が3秒間停止を示します。その後、赤と黄が同時に点灯して「まもなく緑に変わります」と知らせ、最初から繰り返します。Raspberry Pi Picoで3個のLEDを順に制御する、最も簡単な方法です。

動画

回路図

Raspberry Pi Picoで信号機(3個のLEDを順に点灯、GP11/GP12/GP13) - Circuit

ソースコード

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

よくある質問

赤と黄が同時に点灯するのは、どのような意味ですか?▾

ヨーロッパの一部の信号機では、赤から緑に変わる前に赤と黄が同時に点灯し、運転者に「準備してください」と知らせます。このパターンはトルコでも使われています。

関数を定義するメリットは何ですか?▾

`all_off()`のような関数を使うと、繰り返し使う3行のコードを1つの名前で呼び出せます。コードが短く読みやすくなり、変更も1か所で済みます。

点灯時間を変えるにはどうすればよいですか?▾

各ライトの`sleep()`内にある秒数を変更してください。ファイルの先頭で値を定数として定義し(例:GREEN_TIME = 4)、`sleep(GREEN_TIME)`のように使うと、調整がとても簡単になります。

歩行者用の押しボタンを追加できますか?▾

はい。ボタンを追加し、押すと赤に切り替わるようにできます。ボタンの操作をすぐに検出するには、`sleep`の代わりに`ticks_ms()`で時間を管理する必要があります。次のモード切り替えプロジェクトで説明します。