【小学生向けプログラミング】初心者キットで作る「9個LEDマトリクスでアニメーション」

9個のLEDで! アニメ工作

9個のLEDで簡単なアニメーションを作ろう

Scratchの次のステップで、画面じゃなくて本物の光でアニメーション作りたいんだ。

「9個LEDマトリクス」を作ろう! 3×3の格子にLEDを並べて、順番に光らせるとアニメーションになるんだ。Scratchで覚えた「順番」が、ここでも使えるよ。

今回は、Scratchから次のステップに進みたい小学生に向けて、初心者キットだけで作れる「9個LEDマトリクスでアニメーション」を紹介します。

LED9個を3×3の格子に並べて、プログラムで順番に光らせて簡単なアニメーションを作る装置です。Scratchで覚えた「順番に動かす」の考え方が、本物のLEDで実体験できます。

この記事で作るもの
  1. 9個のLEDを3×3に並べる
  2. 「アニメ1: 渦巻き」「アニメ2: 十字」「アニメ3: 全点滅」の切り替え
  3. ボタンを押すたびにアニメが変わる
  4. プログラム書き換えで新しいアニメを追加できる

使う部品

部品役割個数
Arduino UNO R3頭脳1
LEDマトリクスの光9
抵抗330ΩLED保護9
タクトスイッチアニメ切替1
ブレッドボード配線1
ジャンパーワイヤーつなぐ20本前後

配線図 (3×3の並び)

ボタンはD2の片足とGNDをつなぎ、内蔵プルアップを使います (反対側の足はGNDレールへ)。

9個のLEDをブレッドボードに3×3で配置し、それぞれ抵抗を介してD2〜D13のうち9本のピンに接続します。

LEDの並び (上から見た図):
   D5  D6  D7
   D8  D9  D10
   D11 D12 D13

ボタン: D2
全LEDのカソード: GNDレール
全LEDのアノード: 抵抗330Ω → 各Arduino ピン

配線の流れ

Arduino       役割
  D2    ←──   アニメ切替ボタン
  D5-D13 ──→ 抵抗330Ω → LED (9個)
  GND    ←──  全LEDのカソード共通

1個1個丁寧に挿していくのが大変ですが、慣れの良い練習になります。間違えにくいよう、1個ずつ動作確認しながら挿しましょう。

プログラム

const int LEDS[9] = {5, 6, 7, 8, 9, 10, 11, 12, 13};
#define BTN 2

int mode = 0;
int lastBtnState = HIGH;

void setup() {
  for (int i = 0; i < 9; i++) pinMode(LEDS[i], OUTPUT);
  pinMode(BTN, INPUT_PULLUP);
  Serial.begin(9600);
  Serial.println("LEDマトリクス スタート!");
}

void loop() {
  int currentBtn = digitalRead(BTN);
  if (lastBtnState == HIGH && currentBtn == LOW) {
    mode = (mode + 1) % 3;
    Serial.print("モード: ");
    Serial.println(mode);
    allOff();
    delay(300);
  }
  lastBtnState = currentBtn;

  if (mode == 0) spiral();
  else if (mode == 1) crossBlink();
  else if (mode == 2) allBlink();
  // 4つ目を足したいときはここに else if (mode == 3) ... を追加
}

void allOff() {
  for (int i = 0; i < 9; i++) digitalWrite(LEDS[i], LOW);
}

void spiral() {
  int order[] = {0, 1, 2, 5, 8, 7, 6, 3, 4};
  for (int i = 0; i < 9; i++) {
    allOff();
    digitalWrite(LEDS[order[i]], HIGH);
    delay(150);
  }
}

void crossBlink() {
  int cross[] = {1, 3, 4, 5, 7};
  for (int i = 0; i < 5; i++) digitalWrite(LEDS[cross[i]], HIGH);
  delay(300);
  allOff();
  delay(300);
}

void allBlink() {
  for (int i = 0; i < 9; i++) digitalWrite(LEDS[i], HIGH);
  delay(300);
  allOff();
  delay(300);
}

プログラムの動き

flowchart TD A[起動] --> B{"ボタン
押された?"} B -->|Yes| C["モード+1
全消灯"] B -->|No| D{mode?} C --> D D -->|0| E[渦巻き] D -->|1| F[十字点滅] D -->|2| G[全点滅] E --> B F --> B G --> B

プログラミングの学び

このプログラムの面白い所は、「配列」を使って9個のLEDをまとめて管理している点です。Scratchの「リスト」と同じ仕組みで、Arduinoでは「配列 (array)」と呼びます。

学べる概念
配列 = 同じ種類のデータをまとめて並べた箱。番号 (0, 1, 2…) で取り出せる。
自分でアニメを増やせる?

もちろん! 「mode == 3」のときの処理を書き足して、「mode = (mode + 1) % 4」に変えれば、4つ目のアニメが追加できるよ。クリスマスツリー風とか、ハート型とか、自由に考えてみよう。

レポートの書き方

レポート構成
  1. 研究のきっかけ
  2. 配列の仕組み (Scratchのリストとの比較)
  3. 自分が作ったアニメパターン
  4. つまずいた所と解決方法
  5. 感想

改造のアイデア

発展アイデア
  1. 速さを変えるツマミ (ポテンショメータ) を追加
  2. パッシブブザーで効果音を同期
  3. アニメの時間 (delay値) を別ボタンで調整
  4. RGB LEDを使ってカラーアニメに

まとめ

今回は、Scratchから次のステップとして「9個LEDマトリクスでアニメーション」を紹介しました。配列という重要なプログラミング概念を、光の動きで体感できる作品です。

最後に、order[]の数字を入れ替えて、自分だけの光り方を1つ作ってみましょう。試した順序をレポートに書き残すと、自然に研究の流れになります。

他にも初心者キットだけで作れる作例を別の記事で紹介しているので、興味があれば見てみてね。