ArduinoとExcelで制御する8×8・16×16 WS2812 RGB LEDマトリックスアニメーション
部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | |
| WS2812 8×8 RGB LEDマトリックス | 1 | |
| ジャンパーワイヤー(オス/メス) | 3 | 黒-GND、赤-5V、緑-Data |
| 9V電池(汎用) | 1 | |
| 9V-バレルジャック変換コネクター | 1 | |
| メスヘッダー 5ピン 1列 ロング(0.1インチ) | 1 | 実際は3ピンのみ使用 |
必要な工具と機器
- はんだごて(汎用)
- 鉛フリーはんだ
プロジェクト概要
WS2812 8×8 RGB LEDマトリックスを購入した際、従来のXY座標系でアドレス指定できると思いきや、64個のLEDが8行×8列のデイジーチェーン構造になっていることに気づきました。Kevin Darrah氏のExcelユーティリティ(本来16×16用)を8×8配列向けに改造し、スプレッドシートとArduinoスケッチの両方を修正することで、外部ライブラリ不要でLEDアニメーションをプログラミングできる汎用ツールを作成しました。
更新版ExcelブックLED_Utility.xlsmの機能:
- 各LEDへの個別RGB値割り当て
- VBAスクリプトによる動的プロパティ変更
- XY座標再配置によるモーションシミュレーション
- クイックカラー選択用ビルトインパレット
- 8×8と16×16マトリックスのデュアルサポート
以下にハードウェア構築、Excelユーティリティ設定、Arduinoスケッチ書き込みの手順をステップバイステップで解説。各プロジェクトは前回を基盤とし、ループ、条件分岐、モジュール関数などの概念を順次導入します。
ハードウェア組み立て
5ピンヘッダーで8×8マトリックスをArduino UNOに接続:
- DIN → Arduinoピン8
- +5V → 5Vピン
- GND → GNDピン

このセットアップでは座標(0,0)がマトリックスの左上隅を指します。
Excelユーティリティ概要
LED_Utility.xlsmを開くと3シートあります:
- Eight — 8×8マトリックスインターフェース
- Sixteen — 16×16マトリックスインターフェース
- ColMap — 一般的なRGBコードの参照表
ブックは誤操作防止のため読み取り専用設定。コード生成後はファイル→名前を付けて保存で作業を保存してください。

Eightシートの主な機能:
- Show — 選択セルのRGB値(0〜255)を表示
- Var Map — 数値や変数入力を受け付けるが出力なし
- Wrap Map — 座標オーバーフロー対応のモジュラス関数を追加、後続利用可能な変数もサポート
- Clear — 両入力グリッドをクリア
各ボタンがカスタムmapLEDXY()関数向けにフォーマットされたC++コードブロックを生成。XY座標をWS2812マトリックス特有のジグザグ配線パターンに対応した線形配列インデックスへ変換します。
Arduinoスケッチ
コアスケッチ(LED_Arduino.ino)の主要要素:
// ピン定義
#define WS2812_pin 8
// LED総数
#define numberOfLEDs 64
// RGBバッファ(LEDあたり3バイト)
byte RGB[192];
// 前方宣言
void RGB_update(int LED, byte RED, byte GREEN, byte BLUE);
void mapLEDXY(int x, int y, byte RED, byte GREEN, byte BLUE);
void clearLEDs();
mapLEDXY()ルーチンが座標ペアを線形配列にマッピングし、WS2812マトリックスで一般的なジグザグ配線パターンを考慮します。
生成コードをloop()関数にコピーしてアップロードすれば、マトリックスが即座に指示に応答します。
プロジェクト1:静的な赤い正方形
座標(2,2)〜(4,4)に3×3の赤い正方形を作成。Excelで該当セルを赤255、緑/青0に設定。生成コードをスケッチ40行目に貼り付け:
mapLEDXY(2,2,255,0,0);mapLEDXY(2,3,255,0,0);mapLEDXY(2,4,255,0,0);
mapLEDXY(3,2,255,0,0);mapLEDXY(3,3,255,0,0);mapLEDXY(3,4,255,0,0);
mapLEDXY(4,2,255,0,0);mapLEDXY(4,3,255,0,0);mapLEDXY(4,4,255,0,0);
アップロードして正方形が点灯することを確認。グリッドクリア、色変更、枠線追加などで実験可能。
プロジェクト2:二色正方形
スケッチをColour_Sq.inoとして複製し、Excelでより大きな第2の正方形を作成。Showボタンでコード生成しスケッチに貼り付け。シンプルなdelay()とclearLEDs()で2形状を切り替え表示。
プロジェクト3:成長する正方形
Grow.inoで内側の小さな正方形を設計し、好みの色で外枠を追加。内側正方形の値を削除し、外枠コードを生成して両ブロックをスケッチに貼り付け。拡大・収縮アニメーションする正方形が完成。
プロジェクト4:螺旋アニメーション
複雑なパターンは各フレームを別関数にカプセル化し、loop()から呼び出し。サンプルSpiral.inoは5つのヘルパー関数で5層の螺旋を構築。メインループを簡潔に保ち、将来の編集も容易に。
プロジェクト5:可変輝度ループ
forループで輝度をアニメーション:
for (int r=0; r<256; r++) {
mapLEDXY(3,3,r,0,0);mapLEDXY(3,4,r,0,0);
mapLEDXY(4,3,r,0,0);mapLEDXY(4,4,r,0,0);
RGB_update(-1,0,0,0); delay(50);
}
for (int r=255; r>=0; r--) {
mapLEDXY(3,3,r,0,0);mapLEDXY(3,4,r,0,0);
mapLEDXY(4,3,r,0,0);mapLEDXY(4,4,r,0,0);
RGB_update(-1,0,0,0); delay(50);
}
正方形が自動的にフェードイン・アウト。
プロジェクト6:フェードする枠線
forループと共有変数gで周囲の枠線をフェード:
for (int g=0; g<256; g++) {
b=g;
mapLEDXY(...); // 枠線セル
RGB_update(-1,0,0,0); delay(50);
}
for (int g=255; g>=0; g--) {
b=g;
mapLEDXY(...); // 枠線セル
RGB_update(-1,0,0,0); delay(50);
}
ブルーチャンネルがグリーンを追従し、滑らかなフェードを生成。
プロジェクト7:色遷移
if文で中間枠線セルを緑から黄色へ変化(閾値超過時):
for (int r=0; r<256; r++) {
g=r;
if (g>64) { g=65; l=r; }
mapLEDXY(...); // セル群
RGB_update(-1,0,0,0); delay(50);
}
閾値を変えて多様な効果を実験可能。
プロジェクト8:移動する矢印
X座標をパラメータ化して移動する矢印を生成:
for (int x=0; x<8; x++) {
mapLEDXY((x+0)%8,3,0,255,255);
mapLEDXY((x+1)%8,1,255,128,128);
mapLEDXY((x+1)%8,3,0,255,255);
mapLEDXY((x+1)%8,5,255,128,128);
mapLEDXY((x+2)%8,2,255,128,128);
mapLEDXY((x+2)%8,3,0,255,255);
mapLEDXY((x+2)%8,4,255,128,128);
mapLEDXY((x+3)%8,3,255,128,128);
RGB_update(-1,0,0,0); delay(100);
}
スプレッドシートのWrap Map機能で座標オーバーフローを処理。
16×16マトリックスでの使用
上記概念すべてが16×16マトリックスに直接適用可能。LED_Arduino.inoをLED_Arduino16.inoに置き換え、ブックのSixteenシートに切り替え。必要な調整はnumberOfLEDs定義とmapLEDXY()内のRGBlocation計算のみ。
拡張とヒント
本ガイドは8×8と16×16に焦点を当てていますが、同手法で他サイズ(例:8×32)にも適用可能。新サイズごとにnumberOfLEDs定数を更新し、マトリックス配線パターンに合わせてインデックス計算を修正。ブックは読み取り専用モードで保管し、誤削除を防止。消費電力が懸念ならArduino Nano等の小型ボードへの移植も検討を。
製造プロセス
- Arduino Nano 33 IoT製 フライトシミュレーター2020用コックピットパネル - LCD&CDI表示
- Microsoft Flight Simulator 2020用Arduinoスイッチ&LEDパネル
- ArduinoとExcelで制御する8×8・16×16 WS2812 RGB LEDマトリックスアニメーション
- 「Go Away Robot」を作ろう:子供向け簡単Arduinoスターターキット
- アナログ3ピンで4×3キーパッドを接続 - Arduinoピン節約テクニック
- 2020年を形作るトップ3デジタル製造トレンド
- 中小企業が国際展開を成功させるためのトップ3戦略
- 小売業者が1年間の混乱から学ぶべき3つの必須教訓
- 産業機器メンテナンス&安全の必須3ヒント
- 重工業機器購入の必須ガイド:失敗しない3つの実証済み戦略
- グローバルIoTを守る:3つの必須ステップ