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


「9個LEDマトリクス」を作ろう! 3×3の格子にLEDを並べて、順番に光らせるとアニメーションになるんだ。Scratchで覚えた「順番」が、ここでも使えるよ。
今回は、Scratchから次のステップに進みたい小学生に向けて、初心者キットだけで作れる「9個LEDマトリクスでアニメーション」を紹介します。
LED9個を3×3の格子に並べて、プログラムで順番に光らせて簡単なアニメーションを作る装置です。Scratchで覚えた「順番に動かす」の考え方が、本物のLEDで実体験できます。
この記事で作るもの
- 9個のLEDを3×3に並べる
- 「アニメ1: 渦巻き」「アニメ2: 十字」「アニメ3: 全点滅」の切り替え
- ボタンを押すたびにアニメが変わる
- プログラム書き換えで新しいアニメを追加できる
使う部品
| 部品 | 役割 | 個数 |
|---|---|---|
| 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
押された?"} 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つ目のアニメが追加できるよ。クリスマスツリー風とか、ハート型とか、自由に考えてみよう。
レポートの書き方
レポート構成
- 研究のきっかけ
- 配列の仕組み (Scratchのリストとの比較)
- 自分が作ったアニメパターン
- つまずいた所と解決方法
- 感想
改造のアイデア
発展アイデア
- 速さを変えるツマミ (ポテンショメータ) を追加
- パッシブブザーで効果音を同期
- アニメの時間 (delay値) を別ボタンで調整
- RGB LEDを使ってカラーアニメに
まとめ
今回は、Scratchから次のステップとして「9個LEDマトリクスでアニメーション」を紹介しました。配列という重要なプログラミング概念を、光の動きで体感できる作品です。
最後に、order[]の数字を入れ替えて、自分だけの光り方を1つ作ってみましょう。試した順序をレポートに書き残すと、自然に研究の流れになります。

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