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)
/*
* このビデオでは、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"
/*
* 今、私たちは動作させるためのLedControlが必要です。
* // 2017年2月26日にカナダのオンタリオ州アジャックスでRoboJax.com用にカスタマイズされました。
* **** これらのピン番号は、おそらくあなたのハードウェアでは機能しません *****
* ピン12はデータインに接続されています
* ピン11はCLKに接続されています
* ピン10はCSに接続されています
* 私たちはMAX72XXを1つだけ持っています。
*/
LedControl lc=LedControl(12,11,10,1);
/*
* 私たちは常にディスプレイの更新の間に少し待ちます */
* unsigned long delaytime=600;
*
* void setup() {
* /*
* MAX72XXは起動時に省電力モードに入っているため、
* ウェイクアップコールを行う必要があります。
*/
lc.shutdown(0,false);
/*
* 明るさを中間の値に設定します */
* lc.setIntensity(0,8);
* /* そしてディスプレイを消去します
*/
lc.clearDisplay(0);
}
/*
* この方法では、単語「Arduino」の文字がマトリックス上で一つずつ表示されます。 (文字全体を見るには、少なくとも5x7のLEDが必要です)
*/
void writeArduinoOnMatrix() {
/*
* ここにキャラクターのデータがあります */
*
* // K
* バイト R[8]={B11111100,B10000100,B10000100,B11111000,B10100000,B10010000,B10001000,B10000100};
* バイト O[8]={B00011000,B00100100,B01000010,B01000010,B01000010,B01000010,B00100100,B00011000};
* バイト B[8]={B11111100,B10000100,B10000100,B11111000,B10001000,B10000100,B10000100,B11111100};
* バイト J[8]={B00011110,B00000100,B00000100,B00000100,B10000100,B10000100,B01000100,B00111000};
* バイト A[8]={B00111000,B01000100,B10000010,B11111110,B10000010,B10000010,B10000010,B10000010};
* バイト X[8]={ B10000001,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B10000001};
* バイト 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); // この用途は空白のためです。
}
// ////////////// 手紙Rの終わり ///////
/*
* 文字 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);// これは空白のためです
* }
* //////////////// 文字 O の終了 ///////
*
*
* /* 文字 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); // この用途は空白のためです。
}
// ///////////////// 手紙Bの終わり ///////
/*
* 文字 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);// これは空白のため
* }
* //////////////// 文字 O の終了 ///////
*
* /* 文字 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); // この用途は空白のためです。
}
// ////////////// END of Letter J ///////
/*
* 空文字
*/
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); // この用途は空白のためです。
}
// ////////////// 手紙 X の終了 ///////
/*
* このビデオでは、8x8 LEDマトリックスを使用してMAX7219モジュールでテキストや任意の文字をLEDに表示する方法を紹介します。
* YouTubeビデオを見る: https://youtu.be/AAiDwBKs9uE
*
* Robojax.comのためにAhmad S.が執筆
* 2017年2月26日、カナダ・オンタリオ州アジャックスにて
* このコードを共有する許可は与えられていますが、この
* 注釈がコードと一緒に保持されることが条件です。
* 免責事項: このコードは「現状のまま」であり、教育目的のみで使用されます。
*
* /
*
* // ライブラリを常に含める必要があります
* // https://github.com/wayoda/LedControlに投稿されたプロジェクトに基づいています
*/
#include "LedControl.h"
/*
* 今、私たちは作業するためのLedControlオブジェクトが必要です。
* // 2017年2月26日にカナダのオンタリオ州アジャックスでRoboJax.com向けにカスタマイズされました。
* **** これらのピン番号はおそらくあなたのハードウェアでは機能しません *****
* ピン1はDataInに接続されています
* ピン4はCLKに接続されています
* ピン53はCSに接続されています
* 私たちは唯一のMAX72XXを持っています。
*/
LedControl lc=LedControl(1,4,53,1); // この行は、このコードがArduino MegaまたはArduino UNOで動作するかどうかを判断します。
/*
* 私たちは常にディスプレイの更新の間に少し待ちます */
* unsigned long delaytime=600;
*
* void setup() {
* /*
* MAX72XXは起動時に省電力モードになっています、
* ウェイクアップコールを行う必要があります
*/
lc.shutdown(0,false);
/*
* 中間の明るさに設定します */
* lc.setIntensity(0,8);
* /* そしてディスプレイをクリアします
*/
lc.clearDisplay(0);
}
/*
* この方法では、単語「Arduino」の文字をマトリックス上に順番に表示します。(全ての文字を見るには少なくとも5x7のLEDが必要です)
*/
void writeArduinoOnMatrix() {
/*
* ここにキャラクターのデータがあります */
*
* // K
* バイト R[8]={B11111100,B10000100,B10000100,B11111000,B10100000,B10010000,B10001000,B10000100};
* バイト O[8]={B00011000,B00100100,B01000010,B01000010,B01000010,B01000010,B00100100,B00011000};
* バイト B[8]={B11111100,B10000100,B10000100,B11111000,B10001000,B10000100,B10000100,B11111100};
* バイト J[8]={B00011110,B00000100,B00000100,B00000100,B10000100,B10000100,B01000100,B00111000};
* バイト A[8]={B00111000,B01000100,B10000010,B11111110,B10000010,B10000010,B10000010,B10000010};
* バイト X[8]={ B10000001,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B10000001};
* バイト love[8]={ B00000000,B01100110,B10011001,B10011001,B10000001,B01000010,B00100100,B00011000};
*
* /* レター 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); // このための空白です
}
// ///////////// 手紙 R の終わり ///////
/*
* 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);// これは空白のため
* }
* /////////////// Oの文字の終了 ///////
*
* /* 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); // このための空白です
}
// ///////////// 手紙Bの終わり ///////
/*
* 空の文字列
*/
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); // このための空白です
}
// ///////////// END of Letter J ///////
/*
* 空文字列
*/
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); // このための空白です
}
// ///////////// 手紙Xの終わり ///////
リソースと参考文献
-
ドキュメンテーションSPIの異なるボードピン割り当てを表示arduino.cc
ファイル📁
ファイルは利用できません。