検索コード

MAX7219 Arduinoモジュールを使用した8x8 LEDマトリックス

MAX7219 Arduinoモジュールを使用した8x8 LEDマトリックス

このチュートリアルでは、Arduinoを使用してMAX7219モジュールで8x8 LEDマトリックスを制御する方法を学びます。MAX7219は複数のLEDの制御を簡素化し、文字やパターンを簡単に表示できるようにします。このプロジェクトの終わりまでには、マトリックスに「ROBOJAX」という単語を表示できるようになります。

これを達成するために、MAX7219とのインターフェース用に特別に設計されたLedControlライブラリを利用します。このライブラリを使用すると、最小限の労力でLEDマトリックスにデータを送信できます。配線やコードについてより明確に理解したい場合は、関連するビデオ(ビデオの0:30)を必ずチェックしてください。

ハードウェアの解説

このプロジェクトの主なコンポーネントには、MAX7219モジュールと8x8 LEDマトリックスが含まれています。MAX7219は、LEDの表示を管理し、Arduinoからの通信および制御信号を処理する集積回路です。シリアルインターフェースを利用しているため、Arduinoのわずか数本のピンで多くのLEDを制御することができます。

8x8 LEDマトリックスは、グリッド状に配置された64個の個別のLEDで構成されています。各LEDは、MAX7219を介して適切なコマンドを送信することでオンまたはオフにすることができます。これにより、マトリックス上にさまざまな文字やグラフィックを表示することが可能になります。

データシートの詳細

製造業者マキシム・インテグレーテッド
部品番号MAX7219
ロジック/IO電圧3.3Vから5.5V
供給電圧4.0Vから5.5V
出力電流(チャネルごと)最大40 mA
ピーク電流(チャネルごと)最大100 mA
PWM周波数ガイダンス100 ヘルツ
入力ロジック閾値2.0V(高)/ 0.8V(低)
電圧降下 / RDS(on)/ 飽和度0.2V 標準。
熱的限界150°C
パッケージ16-DIP
ノート / バリアント共通アノード構成
  • 適切な電源供給を確保してください(4.0Vから5.5V)。
  • 各LEDの損傷を防ぐために、電流制限抵抗を使用してください。
  • 干渉を避けるために配線は短く保ってください。
  • 熱放散を監視し、必要に応じてヒートシンクを使用してください。
  • ピン接続を再確認して、誤通信を避けてください。

配線指示

MAX7219をArduinoに接続するには、以下のピンを接続します:

  • 接続するVCCMAX7219のピンをArduinoの5Vに接続します。
  • 接続するGNDArduinoのグラウンドにピンを接続します。
  • 接続するDINデータ入力をArduinoのピン12に接続します。
  • 接続するCLKArduinoのピン11にピン(時計)を接続します。
  • 接続するCSピン(チップセレクト)をArduinoのピン10に接続します。

回路の電源を入れる前に、すべての接続が確実であることを確認してください。配線は簡単ですが、問題が発生した場合は、接続を注意深く確認してください(動画の1:45)。

コード例とウォークスルー

コードでは、MAX7219と通信するために不可欠なLedControlライブラリをインクルードすることから始めます。次の抜粋は、LedControlオブジェクトを初期化します。

LedControl lc=LedControl(12,11,10,1);

この行はデータピン、クロックピン、チップセレクトピン、およびデバイスの数(この場合は1)を設定します。次に、setup()関数として、MAX7219を起動し、表示の明るさを設定します:

lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);

これにより、ディスプレイがアクティブでキャラクターを表示する準備が整います。ディスプレイを駆動する主な機能はwriteArduinoOnMatrix()行列の行を順番に点灯させて文字を表示します。

デモンストレーション / 期待すること

すべてが配線され、コードがアップロードされると、LEDマトリックスは「ROBOJAX」という言葉を表示するはずです。ディスプレイが機能しない場合は、接続が緩んでいるか、ピンの割り当てが正しくないなどの問題を確認してください。さらに、電源が十分であることを確認してください(ビデオの2:30で)。

  • イントロダクション (0:00)
  • ハードウェアの概要 (0:30)
  • 配線指示 (1:45)
  • コードウォークスルー (2:15)
  • デモンストレーション (3:00)
4-8x8 LED matrix using a MAX7219 Arduino module
言語: C++
/*
 * このビデオでは、8x8 LEDマトリックスを使用してMAX7219モジュールでテキストや任意の文字をLEDに表示する方法を示しています。  
 * YouTubeビデオを視聴する: https://youtu.be/AAiDwBKs9uE  
 * 
 * アフマド・シャムシリによってRobojax.comのために書かれました  
 * 2017年2月26日 カナダ・オンタリオ州アジャックスにて  
 * このコードと他のArduinoコードはRobojax.comから入手できます  
 * 構造化されたコースですべての資料、配線図、ライブラリと共にArduinoを段階的に学びましょう  
 * すべてが一つの場所にあります。  
 * 
 * Patreonを通じて私のビデオに早期アクセスを得て、私がYouTubeで公開するすべてのビデオの最後にあなたの名前が言及されるようにしてください:  
 * http://robojax.com/L/?id=63 (このビデオの最後まで視聴して私のPatronのリストを確認してください)  
 * 
 * あるいは、PayPalを使用して寄付をする: http://robojax.com/L/?id=64  
 * 
 * このコードは「現状のまま」で、保証や責任はありません。このメモを保持する限り自由に使用できます。  
 * このコードはRobojax.comからダウンロードされました  
 * このプログラムはフリーソフトウェアです:GNU一般公衆ライセンスの条件の下で再配布および/または修正できます。  
 * ライセンスのバージョン3または(選択に応じて)それ以降のバージョンに基づいています。  
 * 
 * このプログラムは役立つことを目的として配布されていますが、いかなる保証もなしに、商業性や特定の目的への適合性の暗黙の保証もありません。詳細については、GNU一般公衆ライセンスを参照してください。  
 * 
 * このプログラムと共にGNU一般公衆ライセンスのコピーを受け取るべきです。受け取っていない場合は、<https://www.gnu.org/licenses/>を参照してください。  
 * 
 * // 常にライブラリを含める必要があります  
 * // プロジェクトに基づいています https://github.com/wayoda/LedControl
 */
#include "LedControl.h"

/*
 * Now we need a LedControl to work with.
 *   // Customized for RoboJax.com on February 26, 2017 in Ajax, Ontario, Canada.
 * **** These pin numbers will probably not work with your hardware *****
 *   pin 12 is connected to the DataIn 
 *   pin 11 is connected to the CLK 
 *   pin 10 is connected to CS
 *   We have only a single MAX72XX.
 */
 LedControl lc=LedControl(12,11,10,1);

/*
 * we always wait a bit between updates of the display */
 *  unsigned long delaytime=600;
 *  
 *  void setup() {
 *    /*
 *     The MAX72XX is in power-saving mode on startup,
 *     we have to do a wakeup call
 */
   lc.shutdown(0,false);
/*
 * Set the brightness to a medium value */
 *    lc.setIntensity(0,8);
 *    /* and clear the display
 */
   lc.clearDisplay(0);
 }

/*
 * This method will display the characters for the
 *   word "Arduino" one after the other on the matrix. 
 *   (you need at least 5x7 LEDs to see the whole characters)
 */
 void writeArduinoOnMatrix() {
/*
 * here is the data for the characters */
 *  
 *    // K
 *    byte R[8]={B11111100,B10000100,B10000100,B11111000,B10100000,B10010000,B10001000,B10000100};
 *    byte O[8]={B00011000,B00100100,B01000010,B01000010,B01000010,B01000010,B00100100,B00011000};  
 *    byte B[8]={B11111100,B10000100,B10000100,B11111000,B10001000,B10000100,B10000100,B11111100};
 *    byte J[8]={B00011110,B00000100,B00000100,B00000100,B10000100,B10000100,B01000100,B00111000};
 *    byte A[8]={B00111000,B01000100,B10000010,B11111110,B10000010,B10000010,B10000010,B10000010};     
 *    byte X[8]={ B10000001,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B10000001};
 *    byte love[8]={ B00000000,B01100110,B10011001,B10011001,B10000001,B01000010,B00100100,B00011000};  
 *  
 *  
 *    /* Letter R
 */
   for (int i=0; i<8; i++){
   lc.setRow(0,i,R[i]);

   }

   delay(delaytime);
   for(int i=0; i<8; i++){
       lc.setRow(0,i,0); // this is for blank
   }
 // ////////////// END of Letter R ///////

/*
 * Letter O */
 *    for (int i=0; i<8; i++){
 *    lc.setRow(0,i,O[i]);
 *  
 *    }
 *     
 *    delay(delaytime);
 *    for(int i=0; i<8; i++){
 *        lc.setRow(0,i,0);// this is for blank
 *    }  
 *  //////////////// END of Letter O ///////
 *  
 *  
 *    /* Letter B
 */
   for (int i=0; i<8; i++){
   lc.setRow(0,i,B[i]);

   }

   delay(delaytime);
   for(int i=0; i<8; i++){
       lc.setRow(0,i,0); // this is for blank
   }
 // ////////////// END of Letter B ///////

/*
 * Letter O */
 *    for (int i=0; i<8; i++){
 *    lc.setRow(0,i,O[i]);
 *  
 *    }
 *     
 *    delay(delaytime);
 *    for(int i=0; i<8; i++){
 *        lc.setRow(0,i,0);// this is for blank
 *    }  
 *  //////////////// END of Letter O ///////
 *  
 *    /* Letter J
 */
   for (int i=0; i<8; i++){
   lc.setRow(0,i,J[i]);

   }

   delay(delaytime);
   for(int i=0; i<8; i++){
       lc.setRow(0,i,0); // this is for blank
   }
 // ////////////// END of Letter J ///////

/*
 * Letter A */
 *    for (int i=0; i<8; i++){
 *    lc.setRow(0,i,A[i]);
 *  
 *    }
 *     
 *    delay(delaytime);
 *    for(int i=0; i<8; i++){
 *        lc.setRow(0,i,0);// this is for blank
 *    }  
 *  //////////////// END of Letter A ///////
 *  
 *    /* Letter X
 */
   for (int i=0; i<8; i++){
   lc.setRow(0,i,X[i]);

   }

   delay(delaytime);
   for(int i=0; i<8; i++){
       lc.setRow(0,i,0); // this is for blank
   }
 // ////////////// END of Letter X ///////



5-8x8 LED Matrix using a MAX7219 Arduino Module
言語: C++
/*
 * このビデオでは、8x8 LEDマトリックスを使用してMAX7219モジュールでテキストや任意の文字をLEDに表示する方法を紹介します。  
 * YouTubeビデオを見る: https://youtu.be/AAiDwBKs9uE  
 * 
 * Robojax.comのためにAhmad S.が執筆  
 * 2017年2月26日、カナダ・オンタリオ州アジャックスにて  
 * このコードを共有する許可は与えられていますが、この  
 * 注釈がコードと一緒に保持されることが条件です。  
 * 免責事項: このコードは「現状のまま」であり、教育目的のみで使用されます。  
 * 
 * /  
 * 
 * // ライブラリを常に含める必要があります  
 * // https://github.com/wayoda/LedControlに投稿されたプロジェクトに基づいています
 */
#include "LedControl.h"

/*
 * Now we need a LedControl object to work with.
 *  // Customized for RoboJax.com on February 26, 2017 in Ajax, Ontario, Canada.
 * **** These pin numbers will probably not work with your hardware *****
 *  pin 1 is connected to the DataIn 
 *  pin 4 is connected to the CLK 
 *  pin 53 is connected to CS
 *  We have only a single MAX72XX.
 */
LedControl lc=LedControl(1,4,53,1); // this line determines if this code can work with Arduino Mega or Arduino UNO

/*
 * we always wait a bit between updates of the display */
 * unsigned long delaytime=600;
 * 
 * void setup() {
 *   /*
 *    The MAX72XX is in power-saving mode on startup,
 *    we have to do a wakeup call
 */
  lc.shutdown(0,false);
/*
 * Set the brightness to a medium value */
 *   lc.setIntensity(0,8);
 *   /* and clear the display
 */
  lc.clearDisplay(0);
}

/*
 * This method will display the characters for the
 *  word "Arduino" one after the other on the matrix. 
 *  (you need at least 5x7 LEDs to see the whole characters)
 */
void writeArduinoOnMatrix() {
/*
 * here is the data for the characters */
 * 
 *   // K
 *   byte R[8]={B11111100,B10000100,B10000100,B11111000,B10100000,B10010000,B10001000,B10000100};
 *   byte O[8]={B00011000,B00100100,B01000010,B01000010,B01000010,B01000010,B00100100,B00011000};  
 *   byte B[8]={B11111100,B10000100,B10000100,B11111000,B10001000,B10000100,B10000100,B11111100};
 *   byte J[8]={B00011110,B00000100,B00000100,B00000100,B10000100,B10000100,B01000100,B00111000};
 *   byte A[8]={B00111000,B01000100,B10000010,B11111110,B10000010,B10000010,B10000010,B10000010};     
 *   byte X[8]={ B10000001,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B10000001};
 *   byte love[8]={ B00000000,B01100110,B10011001,B10011001,B10000001,B01000010,B00100100,B00011000};  
 * 
 * 
 *   /* Letter R
 */
  for (int i=0; i<8; i++){
  lc.setRow(0,i,R[i]);

  }

  delay(delaytime);
  for(int i=0; i<8; i++){
      lc.setRow(0,i,0); // this is for blank
  }
 // ///////////// END of Letter R ///////

/*
 * Letter O */
 *   for (int i=0; i<8; i++){
 *   lc.setRow(0,i,O[i]);
 * 
 *   }
 *    
 *   delay(delaytime);
 *   for(int i=0; i<8; i++){
 *       lc.setRow(0,i,0);// this is for blank
 *   }  
 * /////////////// END of Letter O ///////
 * 
 * 
 *   /* Letter B
 */
  for (int i=0; i<8; i++){
  lc.setRow(0,i,B[i]);

  }

  delay(delaytime);
  for(int i=0; i<8; i++){
      lc.setRow(0,i,0); // this is for blank
  }
 // ///////////// END of Letter B ///////

/*
 * Letter O */
 *   for (int i=0; i<8; i++){
 *   lc.setRow(0,i,O[i]);
 * 
 *   }
 *    
 *   delay(delaytime);
 *   for(int i=0; i<8; i++){
 *       lc.setRow(0,i,0);// this is for blank
 *   }  
 * /////////////// END of Letter O ///////
 * 
 *   /* Letter J
 */
  for (int i=0; i<8; i++){
  lc.setRow(0,i,J[i]);

  }

  delay(delaytime);
  for(int i=0; i<8; i++){
      lc.setRow(0,i,0); // this is for blank
  }
 // ///////////// END of Letter J ///////

/*
 * Letter A */
 *   for (int i=0; i<8; i++){
 *   lc.setRow(0,i,A[i]);
 * 
 *   }
 *    
 *   delay(delaytime);
 *   for(int i=0; i<8; i++){
 *       lc.setRow(0,i,0);// this is for blank
 *   }  
 * /////////////// END of Letter A ///////
 * 
 *   /* Letter X
 */
  for (int i=0; i<8; i++){
  lc.setRow(0,i,X[i]);

  }

  delay(delaytime);
  for(int i=0; i<8; i++){
      lc.setRow(0,i,0); // this is for blank
  }
 // ///////////// END of Letter X ///////



ファイル📁

ファイルは利用できません。