Arduino でLED マトリクスの点灯表示させる方法

この記事で学習できること

LED マトリクスは、複数の LED を格子状に並べて文字や図形を表示できる便利なデバイスです。特に Arduino LED の組み合わせは初心者にも人気があり、様々な工作に活用されています。 特に、Arduino と組み合わせることで、スクロール文字、アニメーション、センサー連動表示など、幅広いプロジェクトに応用できます。この記事では、以下を解りやすく解説します。

  • LED マトリクスの基本構造
  • 行列制御の仕組み
  • Arduino との接続方法
  • MAX7219 を使った制御方法
  • 実際の表示例
  • 応用例とトラブル対処

LED マトリクスとは

  • LED マトリクスは、縦横に並んだ LED を「行」と「列」で制御するデバイスです。例えば、 8×8 の場合、64 個の LED を 16 本のピンで制御できます。そして行と列を組み合わせて、特定の LED を点灯させる仕組みになっています。

行列制御の仕組み

  • LED マトリクスは、以下のように制御します。
  • 行を HIGH
  • 列を LOW → 交差した位置の LED が点灯
  • この仕組みにより、少ないピン数で多くの LED を制御できます

Arduino で LED マトリクスを使う方法

LED マトリクスを Arduino で直接制御することもできますが、配線が複雑になります。 そこで、一般的には MAX7219 ドライバ IC を使います。さらにMAX7219 を使うメリットに以下があります。

  • 配線が簡単
  • 複数枚を連結できる
  • ライブラリが豊富
  • 文字やアニメーションを簡単に表示できる

必要な部品と配線方法

以下の部品を準備します。

Arduino UNO R31 個
8×8 LED マトリクス(MAX7219 搭載)1 個
ジャンパーワイヤー5 個
LED マトリックスとArduinoの接続図
— LED マトリックスとArduinoの接続図 —

部品の購入先

Arduinoの電子工作をはじめようと思ったらスターターキットを購入するのが便利です。というのも、この記事に必要な部品はArduino UNO R3を含めて全て付属しているからです。

(広告) Arduino スターターキット
購入先製品備考
AmazonArduino用のUNO R3 最終版スタータキットArduino UNO R3を含み、ブレッドボード、IC、センサなどが含まれています

LED-Matrixを操作するライブラリは?

  • ライブラリは”LedControl.h”をインクルードします。
#include "LedControl.h"

LED マトリクスの初期設定は?

  • ArduinoのPIN番号とMAX7219 LED-Matrixモジュールが何個使われるかを、LedControl()で設定します。具体的には、MAX7219 LED-Matrixモジュールの、DIN、CS、CLKをArduino UNOの12,11,10ピンに接続し、接続のモジュール数が1個の場合はの例です。
LedControl lc=LedControl(12,10,11,1);
  • MAX72XX は起動時に省電力モードになっているため、shutdown()関数で省電力モードから抜けます
lc.shutdown(0,false);
  • LEDの明るさはsetIntensity()関数で設定します。例えば、明るさを中程度に設定する例です。
lc.setIntensity(0,8);
  • ディスプレイをクリアはclearDisplay()関数で実行します
lc.clearDisplay(0);

LED-Matrixを操作する関数は?

ライブラリ”LedControl.h”に含まれる、LED-MatrixモジュールのLEDを点灯・消灯させる関数を調べます。

lc.setRow(addr, row, value);

addr : デバイス番号(0から始まる)

row : 行番号(0~7)

value : 8ビットの値(byte型)。各ビットがLEDのON/OFFを表します。

lc.setColumn(addr, col, value);

addr : デバイス番号(0から始まる)

col : 列番号(0~7)

value : 8ビットの値(byte型)。各ビットがLEDのON/OFFを表します。

lc.setLed(addr, row, col, state);

addr : デバイス番号

row : 行番号(0~7)

col : 列番号(0~7)

state : trueで点灯、falseで消灯

LED マトリクスを点灯させるスケッチは

  •  setRow, setColumn,setLedを使ってLEDを点灯します。さらに、これらの関数を組み合わせることで、行・列・点・全面の点灯と消灯を行うスケッチを作成しました。
#include <LedControl.h>

// MAX7219 接続
// DIN=12, CLK=10, CS=11
LedControl lc = LedControl(12, 10, 11, 1);

// xAxis(1行目)と yAxis(1列目)の現在位置
int xPos = 1;  // 2列目(0始まりなので1)
int yPos = 1;  // 2行目(0始まりなので1)

// 前回の位置(消灯用)
int prevX = -1;
int prevY = -1;

// 前回の交点位置(消灯用)
int prevCrossX = -1;
int prevCrossY = -1;

// タイマー
unsigned long prevXTime = 0;
unsigned long prevYTime = 0;

// 周期
const unsigned long xInterval = 1000;  // 1秒
const unsigned long yInterval = 2000;  // 2秒

void setup() {
  lc.shutdown(0, false);
  lc.setIntensity(0, 5);
  lc.clearDisplay(0);  // 初期は全消灯
}

void loop() {
  unsigned long now = millis();

  // --- xAxis の更新(1秒ごと) ---
  if (now - prevXTime >= xInterval) {
    prevXTime = now;

    // 前回の x を消灯
    if (prevX >= 0 && prevX <= 7) {
      lc.setLed(0, 0, prevX, false);
    }

    // 今回の x を点灯
    lc.setLed(0, 0, xPos, true);

    prevX = xPos;

    // 次の位置へ(8列目の次は1列目へ戻る)
    xPos++;
    if (xPos > 7) xPos = 1;
  }

  // --- yAxis の更新(2秒ごと) ---
  if (now - prevYTime >= yInterval) {
    prevYTime = now;

    // 前回の y を消灯
    if (prevY >= 0 && prevY <= 7) {
      lc.setLed(0, prevY, 0, false);
    }

    // 今回の y を点灯
    lc.setLed(0, yPos, 0, true);

    prevY = yPos;

    // 次の位置へ(8行目の次は1行目へ戻る)
    yPos++;
    if (yPos > 7) yPos = 1;
  }

  // --- 交点の更新(常に1個だけ点灯) ---
  if (prevX >= 0 && prevX <= 7 && prevY >= 0 && prevY <= 7) {
    // まず前回の交点を消灯
    if (prevCrossX >= 0 && prevCrossX <= 7 &&
        prevCrossY >= 0 && prevCrossY <= 7) {
      lc.setLed(0, prevCrossY, prevCrossX, false);
    }

    // 新しい交点を点灯
    lc.setLed(0, prevY, prevX, true);

    // 交点位置を記録
    prevCrossX = prevX;
    prevCrossY = prevY;
  }
}

LED マトリクスの点灯の映像です。

  • 行を1列ずつ点灯し消灯する
  • 列を1列ずつ点灯し消灯する
  • LEDを最初の行から最後の行まで1個ずつ点灯し消灯する
  • LED全面の点灯と消灯を3回繰り返す

応用例

LED マトリクスは、以下のようなプロジェクトに応用できます

  • スクロール文字表示
  • 時計表示(RTC と組み合わせ)
  • 温度センサー連動表示
  • 加速度センサーでアニメーション
  • ゲーム(ブロック崩し、スネークなど)

よくあるトラブルと対処法

1) 点灯しない

  • 配線ミス
  • VCC と GND の逆接続
  • DIN/CS/CLK のピン番号違い

2) 明るさが変わらない

  • setIntensity() の値が 0〜15 になっているか確認

3) 文字が崩れる

  • 複数枚連結時の順番設定が間違っている可能性

まとめ

LED マトリクスは、Arduino での表示デバイスとして非常に扱いやすく、応用範囲も広いモジュールです。

  • 行列制御の仕組みを理解する
  • MAX7219 を使うと配線が簡単
  • ライブラリで文字やアニメーションも簡単
  • 応用例が豊富で学習に最適

次のステップとして、スクロール文字やアニメーションにも挑戦してみてください。


御質問、誤植の指摘、記事の改善点の気づきなどありましたら「問い合わせ 」のページからお願いします。