Lesson3.実践!流れるLEDライトを作ろう

概要

このコンテンツでは、マイコンボードのGPIO (General Purpose Input/Output) を使ってLEDを制御する基礎を学びます。5つのLEDを異なるパターンで点灯させることで、デジタル出力の制御方法や、プログラミングによるハードウェアの操作を実践的に理解します。電子工作初心者の方でも安心して取り組めるよう、丁寧な解説を心がけました。


🛠️ 必要な部品

このプロジェクトを進めるために、以下の部品を準備してください。

  • マイコンボード: 1個 (例: Arduino Uno, ESP32, Raspberry Pi Picoなど)
  • ブレッドボード: 1個
  • LED: 5個 (好きな色でOK)
  • 抵抗: 5個 (220Ω〜330Ω程度推奨。LEDの保護に必要です)
  • ジャンパーワイヤー (オス-オス): 複数本
  • USBケーブル: マイコンボードとPCを接続するため

👨‍💻 準備

回路図の確認

以下の回路図を参考に、部品の接続方法を確認します。

(ここに回路図の画像または図の記述を挿入)

  • LEDの長い足(アノード)を抵抗に接続します。
  • 抵抗のもう一方の端をマイコンボードのデジタル出力ピンに接続します。
  • LEDの短い足(カソード)をマイコンボードのGND(グラウンド)に接続します。
  • 5つのLEDをそれぞれ異なるデジタル出力ピンに接続します。

⚙️ 実践

1. 回路の組み立て

準備した部品を使って、ブレッドボード上に回路を組み立てます。回路図と見比べながら、LEDの向きや抵抗の接続を間違えないように注意しましょう。

2. プログラムの作成と書き込み

選択したマイコンボードの開発環境を使って、以下のいずれかのコードを記述し、マイコンボードに書き込みます。

🔹 Arduinoの場合 (C++)

C++

// 各LEDを接続するデジタルピン
const int ledPins[] = {2, 3, 4, 5, 6};
const int numLeds = sizeof(ledPins) / sizeof(ledPins[0]);

void setup() {
  // 各ピンを出力モードに設定
  for (int i = 0; i < numLeds; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  // パターン1: 順番に点灯・消灯
  for (int i = 0; i < numLeds; i++) {
    digitalWrite(ledPins[i], HIGH); // 点灯
    delay(100); // 100ミリ秒待機
  }
  delay(500); // 全点灯後、500ミリ秒待機

  for (int i = 0; i < numLeds; i++) {
    digitalWrite(ledPins[i], LOW);  // 消灯
    delay(100); // 100ミリ秒待機
  }
  delay(500); // 全消灯後、500ミリ秒待機

  // パターン2: 外側から内側へ点灯
  for (int i = 0; i < (numLeds + 1) / 2; i++) {
    digitalWrite(ledPins[i], HIGH);
    if (i != numLeds - 1 - i) { // 中央のLEDでない場合
      digitalWrite(ledPins[numLeds - 1 - i], HIGH);
    }
    delay(200);
  }
  delay(500);

  // パターン3: 全点灯・全消灯を繰り返す
  digitalWrite(ledPins[0], HIGH);
  digitalWrite(ledPins[1], HIGH);
  digitalWrite(ledPins[2], HIGH);
  digitalWrite(ledPins[3], HIGH);
  digitalWrite(ledPins[4], HIGH);
  delay(1000); // 1秒点灯

  digitalWrite(ledPins[0], LOW);
  digitalWrite(ledPins[1], LOW);
  digitalWrite(ledPins[2], LOW);
  digitalWrite(ledPins[3], LOW);
  digitalWrite(ledPins[4], LOW);
  delay(1000); // 1秒消灯
}

🔹 MicroPythonの場合 (Python)

Python

from machine import Pin
import time

# 各LEDを接続するデジタルピン
# ESP32の例: GPIO2, 4, 16, 17, 5
# Raspberry Pi Picoの例: GP2, GP3, GP4, GP5, GP6 (ボードのピン配置による)
led_pins = [2, 4, 16, 17, 5] # 使用するボードに合わせてピン番号を変更してください
leds = []
for p in led_pins:
    leds.append(Pin(p, Pin.OUT))

while True:
    # パターン1: 順番に点灯・消灯
    for led in leds:
        led.value(1) # 点灯
        time.sleep(0.1) # 100ミリ秒待機
    time.sleep(0.5) # 全点灯後、500ミリ秒待機

    for led in leds:
        led.value(0) # 消灯
        time.sleep(0.1) # 100ミリ秒待機
    time.sleep(0.5) # 全消灯後、500ミリ秒待機

    # パターン2: 外側から内側へ点灯
    for i in range((len(leds) + 1) // 2):
        leds[i].value(1)
        if i != len(leds) - 1 - i: # 中央のLEDでない場合
            leds[len(leds) - 1 - i].value(1)
        time.sleep(0.2)
    time.sleep(0.5)
    for led in leds: # 消灯
        led.value(0)
    time.sleep(0.5)

    # パターン3: 全点灯・全消灯を繰り返す
    for led in leds:
        led.value(1) # 全点灯
    time.sleep(1) # 1秒点灯

    for led in leds:
        led.value(0) # 全消灯
    time.sleep(1) # 1秒消灯

✅ 確認

プログラムをマイコンボードに書き込んだ後、LEDが以下のパターンで点灯することを確認してください。

  1. 順番に点灯・消灯: 5つのLEDが一つずつ順番に点灯し、その後順番に消灯します。
  2. 外側から内側へ点灯: 両端のLEDから順に中央に向かって点灯します。
  3. 全点灯・全消灯の繰り返し: 5つすべてのLEDが同時に点灯し、その後同時に消灯することを繰り返します。

期待通りに動作しない場合は、「準備」と「実践」のステップを見直し、回路の配線やプログラムの記述に誤りがないか確認しましょう。


📚 学び

このプロジェクトを通じて、あなたは以下のことを学びました。

  • GPIOの基本: マイコンボードのGPIOピンがデジタル出力としてどのように機能するかを理解しました。HIGH (点灯) と LOW (消灯) の概念を実際に体験しました。
  • LEDの制御: LEDを正しく接続し、抵抗を使って保護する方法、そしてプログラミングによって点灯・消灯を制御する方法を習得しました。
  • プログラミングによるハードウェア操作: コードを使って物理的な部品を動かす楽しさと、その基本的なロジックを身につけました。delay() (Arduino) や time.sleep() (MicroPython) 関数を使って、時間の概念も扱いました。
  • ループ処理: for ループを使って、複数のLEDを効率的に制御する方法を学びました。

💡 次のステップ

今回の学びを活かして、さらに複雑なLEDの点灯パターンに挑戦したり、ボタンなどの入力部品を追加してインタラクティブな制御を試してみましょう。マイコンボードの世界は、あなたのアイデア次第で無限に広がります!