工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御

概要

このArduinoチュートリアルでは、MAX7219ドライバとArduinoボードを使用して8×8 LEDマトリクスを制御する方法を学びます。3つの例を通じて、基本動作、スクロールテキスト表示、BluetoothとカスタムAndroidアプリによる制御を解説します。詳細については、以下のビデオまたは文章チュートリアルをご覧ください。

MAX7219ドライバ

MAX7219は64個の個別LEDを駆動しながら、Arduinoとの通信にはわずか3本のワイヤ(DIN, CLK, CS)しか使用しません。さらに、複数のドライバとマトリクスをデイジーチェーン接続しても、同じ3本のワイヤで制御可能です。

MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御

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

同時に点灯できるLEDは最大8個です。LEDは8×8の行と列に配置され、MAX7219は各列を極めて短時間で活性化しながら、同時に各行も駆動します。列と行を高速で切り替えることで、人間の目には連続して光っているように見えます(ダイナミック点灯/マルチプレクシング)。

MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御

一般的な8×8 LEDマトリクスのピン内部配置は上図の通りです。自作する場合はこの配置を考慮してください。

一般的なMAX7219ブレークアウトボードには、5VとICの18番ピンの間に抵抗が実装されています。この抵抗はLEDの電流(輝度)を設定するためのものです。データシートの以下の表に従って、LEDの順方向電圧降下に応じた抵抗値を選択します。

MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御

回路図


8×8 LEDマトリクスモジュールをArduinoに接続します。

MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御

モジュールのVCCとGNDをArduinoの5VとGNDに、DIN, CLK, CSを任意のデジタルピンに接続します。複数モジュールを接続する場合は、前のボードの出力ピン(DOUT)を次のボードの入力ピン(DIN)に接続するだけです(他のピンは並列接続)。

必要なコンポーネント

  • 8×8 LED MAX7219 ドットマトリクスモジュール
  • HC-05 Bluetoothモジュール(例3で使用)
  • Arduinoボード
  • ブレッドボードとジャンパワイヤ

基本 MAX7219 Arduinoコード

MaxMatrixライブラリ(GitHub: riyas-org/max7219)を使用します。

/* 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()で左スクロールを行います。

MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御
MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御

8×8 LEDマトリクス スクロールテキスト Arduinoコード


スクロールテキスト表示の例です。大きな文字データベースをフラッシュメモリ(PROGMEM)に格納する点が異なります。

/* 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引数でスクロール速度(ミリ秒)を制御します。

MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御

Androidアプリで8×8 LEDマトリクスをBluetooth制御


MAX7219の制御方法を習得したところで、実践的なプロジェクトとして、カスタムAndroidアプリでBluetooth経由でLEDマトリクスを制御する例を作成します。事前にHC-05 Bluetoothモジュールの使い方とMIT App Inventorでのアプリ作成チュートリアルを確認することをお勧めします。

MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御

Arduinoコードの主な変更点:

  • SoftwareSerialライブラリ追加でBluetooth通信有効化
  • テキストメッセージ、スクロール速度、輝度を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を38400bpsで初期化。ループ内で常にテキストをスクロール表示しつつ、Bluetooth.available()で着信チェック。最初のバイト(インジケータ)で操作内容を判別します。

MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御

Androidアプリ(MIT App Inventor製)では:

  • 「Send」ボタン押下時:インジケータ「1」送信 → Arduino側でテキスト配列クリア → 残りのデータ(テキストボックスの内容)を読み取ってtext[]に格納
  • スクロール速度スライダー変更時:インジケータ「2」送信 → 新しい値を読み取ってscrollSpeed更新
  • 輝度スライダー変更時:インジケータ「3」送信 → 新しい値でbrightness更新

Androidアプリ ダウンロード

MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御 AndrodApp for Arduino 8x8 LED Matrix Control (1.48 MB)
MAX7219で8×8 LEDマトリクスをマスター: スクロールテキストとAndroid Bluetooth制御 AndrodApp for Arduino 8×8 LED Matrix Control .aia file (34.06 KB)

以上でこのチュートリアルは終了です。ご質問はコメント欄でお気軽にどうぞ。

製造プロセス

  1. スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
  2. Arduino NanoとMAX7219で作る24×16 LEDポングゲーム機
  3. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  4. Windows 10 CortanaでBluetooth経由でArduinoのLEDを制御
  5. Arduino Unoで8×8 LEDマトリックスを制御:ステップバイステップガイド
  6. Arduino UnoとBluetoothでラジコンカーを遠隔操作:ステップバイステップガイド
  7. Arduinoロボットアーム「LittleArm」をAndroidアプリでBluetooth制御
  8. Bluetooth対応8×8 LEDマトリックス スクロール文字表示 Arduinoプロジェクト
  9. Arduino MegaとMAX72XX LEDマトリックスで作るクラシック「アステロイド」ゲーム
  10. Bluetoothで複数サーボを制御:Arduino & Androidアプリ
  11. Arduinoで作るスネークゲーム:8×8 LEDマトリクスとジョイスティックでレトロゲーム機自作