MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御
このArduinoチュートリアルでは、MAX7219ドライバとArduinoボードを使用して8×8 LEDマトリクスを制御する方法を学びます。3つの例を通じて、基本動作、スクロールテキスト表示、BluetoothとカスタムAndroidアプリによる制御を解説します。詳細については、以下のビデオまたは文章チュートリアルをご覧ください。 MAX7219は64個の個別LEDを駆動しながら、Arduinoとの通信にはわずか3本のワイヤ(DIN, CLK, CS)しか使用しません。さらに、複数のドライバとマトリクスをデイジーチェーン接続しても、同じ3本のワイヤで制御可能です。 同時に点灯できるLEDは最大8個です。LEDは8×8の行と列に配置され、MAX7219は各列を極めて短時間で活性化しながら、同時に各行も駆動します。列と行を高速で切り替えることで、人間の目には連続して光っているように見えます(ダイナミック点灯/マルチプレクシング)。 一般的な8×8 LEDマトリクスのピン内部配置は上図の通りです。自作する場合はこの配置を考慮してください。 一般的なMAX7219ブレークアウトボードには、5VとICの18番ピンの間に抵抗が実装されています。この抵抗はLEDの電流(輝度)を設定するためのものです。データシートの以下の表に従って、LEDの順方向電圧降下に応じた抵抗値を選択します。 8×8 LEDマトリクスモジュールをArduinoに接続します。 モジュールのVCCとGNDをArduinoの5VとGNDに、DIN, CLK, CSを任意のデジタルピンに接続します。複数モジュールを接続する場合は、前のボードの出力ピン(DOUT)を次のボードの入力ピン(DIN)に接続するだけです(他のピンは並列接続)。 MaxMatrixライブラリ(GitHub: riyas-org/max7219)を使用します。 スクロールテキスト表示の例です。大きな文字データベースをフラッシュメモリ(PROGMEM)に格納する点が異なります。 MAX7219の制御方法を習得したところで、実践的なプロジェクトとして、カスタムAndroidアプリでBluetooth経由でLEDマトリクスを制御する例を作成します。事前にHC-05 Bluetoothモジュールの使い方とMIT App Inventorでのアプリ作成チュートリアルを確認することをお勧めします。 Arduinoコードの主な変更点: セットアップでBluetoothを38400bpsで初期化。ループ内で常にテキストをスクロール表示しつつ、 Androidアプリ(MIT App Inventor製)では: 以上でこのチュートリアルは終了です。ご質問はコメント欄でお気軽にどうぞ。概要
MAX7219ドライバ

64個のLEDを16ピンで駆動する仕組み


回路図

必要なコンポーネント
基本 MAX7219 Arduinoコード
/* 8x8 LED Matrix MAX7219 Example 01
by Dejan Nedelkovski, www.HowToMechatronics.com
Based on: GitHub | riyas-org/max7219 */
#include <MaxMatrix.h>
int DIN = 7, CLK = 6, CS = 5;
int maxInUse = 1;
MaxMatrix m(DIN, CS, CLK, maxInUse);
// 文字定義(90度回転したビットパターン)
char A[] = {4, 8, B01111110, B00010001, B00010001, B01111110};
char B[] = {4, 8, B01111111, B01001001, B01001001, B00110110};
char smile01[] = {8, 8, B00111100, B01000010, B10010101, B10100001, B10100001, B10010101, B01000010, B00111100};
char smile02[] = {8, 8, B00111100, B01000010, B10010101, B10010001, B10010001, B10010101, B01000010, B00111100};
char smile03[] = {8, 8, B00111100, B01000010, B10100101, B10010001, B10010001, B10100101, B01000010, B00111100};
void setup() {
m.init();
m.setIntensity(8); // 輝度 0-15
}
void loop() {
// 個別LED制御
m.setDot(6, 2, true); delay(1000);
m.setDot(6, 3, true); delay(1000);
m.clear();
for (int i = 0; i < 8; i++) { m.setDot(i, i, true); delay(300); }
m.clear();
// 定義済み文字表示
m.writeSprite(2, 0, A); delay(1000);
m.writeSprite(2, 0, B); delay(1000);
m.writeSprite(0, 0, smile01); delay(1000);
m.writeSprite(0, 0, smile02); delay(1000);
m.writeSprite(0, 0, smile03); delay(1000);
// 左スクロール
for (int i = 0; i < 8; i++) { m.shiftLeft(false, false); delay(300); }
m.clear();
}コード説明
MaxMatrix.hをインクルードし、接続ピン、使用モジュール数、MaxMatrixオブジェクトを定義。文字を表示するには、ビットパターンの配列で定義します(ライブラリの仕様上90度回転した形式)。setDot(x, y, true)で個別LED制御、clear()で全消灯、writeSprite(x, y, charArray)で文字表示、shiftLeft()で左スクロールを行います。

8×8 LEDマトリクス スクロールテキスト Arduinoコード
/* 8x8 LED Matrix MAX7219 Scrolling Text Example
Based on: GitHub | riyas-org/max7219 */
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
// フラッシュメモリに文字データを格納(PROGMEM)
PROGMEM const unsigned char CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
// ... (全96文字分の定義が続く、スペースからチルダまで)
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000 // ~
};
int DIN = 7, CLK = 6, CS = 5;
int maxInUse = 2; // 2モジュール使用
MaxMatrix m(DIN, CS, CLK, maxInUse);
byte buffer[10];
char text[] = "HowToMechatronics.com "; // スクロールテキスト
void setup() {
m.init();
m.setIntensity(15);
}
void loop() {
printStringWithShift(text, 100); // (テキスト, スクロール速度ms)
}
// 1文字スクロール表示
void printCharWithShift(char c, int shift_speed) {
if (c < 32) return;
c -= 32;
memcpy_P(buffer, CH + 7 * c, 7);
m.writeSprite(32, 0, buffer);
m.setColumn(32 + buffer[0], 0);
for (int i = 0; i < buffer[0] + 1; i++) {
delay(shift_speed);
m.shiftLeft(false, false);
}
}
// 文字列から文字を抽出してスクロール表示
void printStringWithShift(char* s, int shift_speed) {
while (*s != 0) {
printCharWithShift(*s, shift_speed);
s++;
}
}コード説明
avr/pgmspace.hとPROGMEMを使用して、静的な文字データをフラッシュメモリ(32KB)に格納し、貴重なSRAM(2KB)を節約します。printStringWithShift()が文字列から1文字ずつ抽出し、printCharWithShift()でフラッシュメモリからパターンを読み出してスクロール表示します。第2引数でスクロール速度(ミリ秒)を制御します。
Androidアプリで8×8 LEDマトリクスをBluetooth制御

SoftwareSerialライブラリ追加でBluetooth通信有効化/* 8x8 LED Matrix MAX7219 Scrolling Text Android Control via Bluetooth
by Dejan Nedelkovski, www.HowToMechatronics.com */
#include <MaxMatrix.h>
#include <SoftwareSerial.h>
#include <avr/pgmspace.h>
// 文字データ(上記と同一、省略)
PROGMEM const unsigned char CH[] = { /* ... 96文字分 ... */ };
int dIn = 7, clk = 6, cs = 5;
int maxInUse = 2;
MaxMatrix m(dIn, cs, clk, maxInUse);
SoftwareSerial Bluetooth(8, 7); // RX, TX
byte buffer[10];
char incomebyte;
int scrollSpeed = 100;
char text[100] = "HowToMechatronics.com ";
int brightness = 15;
int count = 0;
char indicator;
void setup() {
m.init();
m.setIntensity(brightness);
Bluetooth.begin(38400); // HC-05デフォルトボーレート
}
void loop() {
printStringWithShift(text, scrollSpeed);
if (Bluetooth.available()) {
indicator = Bluetooth.read(); // 最初のバイトでモード判別
// インジケータ '1': テキストメッセージ変更
if (indicator == '1') {
for (int i = 0; i < 100; i++) { text[i] = 0; }
m.clear();
while (Bluetooth.available()) {
incomebyte = Bluetooth.read();
text[count++] = incomebyte;
}
count = 0;
}
// インジケータ '2': スクロール速度調整
else if (indicator == '2') {
String sS = Bluetooth.readString();
scrollSpeed = 150 - sS.toInt(); // 小さい値=高速
}
// インジケータ '3': 輝度調整
else if (indicator == '3') {
String sB = Bluetooth.readString();
brightness = sB.toInt();
m.setIntensity(brightness);
}
}
}
// 以下、printCharWithShift, printStringWithShift, printString関数は上記と同一
// (省略)
動作説明
Bluetooth.available()で着信チェック。最初のバイト(インジケータ)で操作内容を判別します。
text[]に格納scrollSpeed更新brightness更新Androidアプリ ダウンロード
AndrodApp for Arduino 8x8 LED Matrix Control (1.48 MB)
AndrodApp for Arduino 8×8 LED Matrix Control .aia file (34.06 KB)
製造プロセス
- スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
- Arduino NanoとMAX7219で作る24×16 LEDポングゲーム機
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- Windows 10 CortanaでBluetooth経由でArduinoのLEDを制御
- Arduino Unoで8×8 LEDマトリックスを制御:ステップバイステップガイド
- Arduino UnoとBluetoothでラジコンカーを遠隔操作:ステップバイステップガイド
- Arduinoロボットアーム「LittleArm」をAndroidアプリでBluetooth制御
- Bluetooth対応8×8 LEDマトリックス スクロール文字表示 Arduinoプロジェクト
- Arduino MegaとMAX72XX LEDマトリックスで作るクラシック「アステロイド」ゲーム
- Bluetoothで複数サーボを制御:Arduino & Androidアプリ
- Arduinoで作るスネークゲーム:8×8 LEDマトリクスとジョイスティックでレトロゲーム機自作