で独自のライトアップLEDディスプレイを作成する単一のLEDはArduinoプロジェクトのテストに便利です。 しかし、LEDマトリックスを追加すると、文字、数字、記号をスペルアウトして、本当に創造的になることができます。 また、より複雑な表示方法を学ぶための便利な方法です–あなたがこれを仕事で読んでいるようなものです。 このガイドでは、基本的な8×8LEDマトリックスの設定方法を説明します。
LEDマトリックスの仕組み
今回使用するような基本的なLEDマトリックスには、文字や基本的な画像などを描画するために使用できるLedの8×8 以前のガイドでは、Arduinoが単一のLEDをどのように制御できるかを示しました。 このコンポーネントは、すべての単一のArduinoで制御することができ、64個のLedの配列全体にその概念を伸ばします。
LEDマトリックス
LEDマトリックスでは、ledの列に電流が流れます。 回路を完成させ、個々の光を活性化するために、列が地面に接続されている。 電源線とグラウンド線が交差する場所では、Ledがアクティブになります。 あなたはそれを少しボードゲームの戦艦のように考えることができます。 たとえば、行A、B、およびCに電源が供給されているが、列1のみがグラウンドに接続されている場合、A1、B1、およびC1のライトが点灯します。 残りは暗くなります。
これは一度に複数のLedをオンにする便利な方法ですが、列内の特定のLedのみをオンにしたい場合は問題が発生します。 代わりに、a1、B2、およびC3のライトを点灯させて対角線を作成したいとします。 3つの行と列すべてを有効にすると、グリッド全体がオンになりますが、これは必要なものではありません。
この問題を解決するために、Arduinoはループを介して実行することができ、一度にLedの単一行のみを活性化することができます。 このようにして、次の行に影響を与えることなく、必要な数の列をアクティブ化できます。 長い遅延()関数がなければ、行は人間の目が伝えることができないような迅速な連続で活性化されます。 しかし、我々はあなたがそれがとにかくどのように動作するかを見ることができるように遅延を追加する方法を紹介します。
必要なもの
私たちは、教育目的のためにLEDマトリックスを制御するために、より複雑な方法を使用しています–他のコンポーネントは、必要なピンの数を減らすことができます–そして、これは私たちの他のガイドのほとんどよりもかなりの数のピンとワイヤを取るでしょう。 そのため、通常のArduino Unoの代わりにArduino Mega2560を使用して、この行列を制御します。 また、次のものが必要になります:
Arduinoメガ2560 | |
8×8 LEDマトリックス | |
8 ほとんどのLedをArduinoの5V出力に直接接続すると、ほとんどのLedが燃え尽きます。 出力ピンとLEDの間にキットから抵抗を配置します。 | |
ブレッドボードのペア | |
Arduino IDE |
また、USBケーブルとかなりの数のワイヤが必要になります–少なくとも32!
このプロジェクトの配線を整理するにはいくつかの方法がありますが、複雑になる可能性があるため、ledマトリックスを処理するためのブレッドボード、抵抗の配線用のブレッドボードのペアを使用することをお勧めします。 それはもう少し面倒なことができ、静止の代わりに側にオフに座っされますが、ledマトリックスに実行されている女性の端を持つワイヤを使用して、同じことを達成することが可能です。
コード
このプロジェクトのコードは、ループと配列を使用して各LEDを個別に書き込みます。 結果はあなたがあなたのLEDのマトリックスが表示するイメージを変えるために容易に変更できるあなたの原稿の上に配列である。 最初に、完全なコードをArduino IDEに貼り付け、Arduino Megaにアップロードします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
int toDisplay= {
{1,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0},
{1,0,0,0,0,0,1,0},
{1,0,0,0,0,0,0,0},
{1,1,1,1,0,0,1,0},
{1,0,0,1,0,0,1,0},
{1,0,0,1,0,0,1,0},
{1,0,0,1,0,0,1,0}
};
void setup(){
for(int i=2;i<=9;i++){
pinMode(I,OUTPUT);
pinMode(i+44,OUTPUT);
digitalWrite(I,LOW);
digitalWrite(i+44,HIGH);
}
pinMode(A0,入力);
}
for(int i=0;i<8;i++){
if(i)
if(i)
if(i)
if(i)
==0) {
デジタルライト(9、低);
}
else{
digitalWrite(i+1,LOW);
}
for(int j=0;j<8;j++){
if(toDisplay){
if(toDisplay){
== 1) {
digitalWrite(J+46、低い);
}
else{
digitalWrite(j+46,HIGH);
}
}
digitalWrite(i+2,HIGH);
遅延(1);
}
}
|
次に、これらの各セクションがどのように機能するかを見てみましょう。
1
2
3
4
5
6
7
8
9
10
|
int toDisplay= {
{1,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0},
{1,0,0,0,0,0,1,0},
{1,0,0,0,0,0,0,0},
{1,1,1,1,0,0,1,0},
{1,0,0,1,0,0,1,0},
{1,0,0,1,0,0,1,0},
{1,0,0,1,0,0,1,0}
};
|
スケッチのメインループのいずれかの前に、この多次元配列は、どのLedを点灯させ、どのLedを暗くするかを定義します。 それぞれ8つの値の8行があり、それらはマトリックス上の8行のLedに対応しています。 スケッチのグリッドに配置することで、Ledがどのような形状を構成するかを視覚化しやすくなります。
1
2
3
4
5
6
7
8
9
|
void setup(){
for(int i=2;i<=9;i++){
pinMode(i,OUTPUT);
pinmode(i+44,OUTPUT);
digitalWrite(I,LOW);
digitalWrite(i+44,OUTPUT);
digitalWrite(I,LOW);
digitalWrite(I+44、高);
}
pinMode(A0,入力);
}
|
setup()セクションでは、行列に必要なピンを初期化します。 16種類のピンがあるので、一度に1つよりも効率的にこれを行うことができます。 グラウンドに接続されているピンは、ピン2~9に接続されます。 マトリックスに電力を送信するピンは、ピン46から53まで実行されます。 このセクションでは、ループを使用して両方のピンセットを初期化します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
for(int i=0;i<8;i++){
if(i)
if(i)
if(i)
if(i)
==0) {
デジタルライト(9,低);
}
else{
digitalWrite(i+1,LOW);
}
for(int j=0;j<8;j++){
if(toDisplay){
if(toDisplay){
== 1) {
デジタルライト(J+46、低);
}
else{
digitalWrite(j+46,HIGH);
}
}
digitalWrite(i+2,HIGH);
遅延(1);
}
}
|
スケッチのメインループ()セクションには、マルチステップループが1つあります。 最初のif文は、最後に使用された行をLOWにリセットし、電力の流れを停止します。
次のネストされたforループは、配列内のデータをチェックします。 セルが1としてリストされている場合、その列のアース線がLOWに設定され、電流が流出することができます。 それ以外の場合は、その列に沿って回路が完了するのを防ぐピンをHIGHに設定します。 これは、指定された行の8つのセルすべてに対してこれを行います。
最後に、最後のdigitalWrite()ステートメントは行全体をオンにします。 低に設定された列は点灯します。 残りは暗くなります。 スケッチが再びループすると、その行をオフにすることですぐに開始されます。
最後のコマンドは、各行の間の遅延を設定するdelay()ステートメントです。 この例では、ステートメントが存在しない場合、Ledが少し暗くなりすぎるため、1ミリ秒に設定されています。 ただし、遅延を増やして、スケッチがよりゆっくりと何をしているかを確認することができます。 次の行がオンになるとオフになる前に、各行が一度に1つずつ点灯するのがわかります。
配線
このプロジェクトでは、配線は比較的簡単ですが、多くの配線があります。 多くのピンがあるので、通常のように個々のワイヤを一覧表示するのではなく、完全な回路ごとに何をしたいのかを説明します。
ピン2から9は電源ピンで、ピン46から53はグラウンドピンでなければなりません。 電源ピンからLEDマトリックス(以下のピンの詳細を確認してください–これは重要です)、LEDマトリックスから220オームの抵抗に配線してから、arduinoのピン ピン2は最終的にピン46につながり、ピン3はピン47につながります。
ここでの主な合併症は、LEDマトリックス自体です。 逆に、行列の両側のピンは一貫した順序ではありません。 しかし、このためのピンは、LEDマトリックスの上部に左から4番目のピンです。 この回路のもう一方の端は、列1につながるはずですが、行列の下部の右側の最初のピンです。
この順序はかなり複雑なので、各Arduinoピンを直接配線する必要がある行列上のピンを説明します。
マトリックスの上部(数字が印刷された側)には8つのピンがあります。 左から右に、これらはArduinoの次のピンに配線する必要があります:
- ピン7
- ピン4
- ピン49
- ピン2
- ピン51
- ピン52
- ピン3
- ピン5
次に、マトリックス上の8つのピンの一番下の行(数字のない側)は、次のピンに配線する必要があります(左から右に、数字はまだ上を向いています):
- ピン9
- ピン50
- ピン48
- ピン6
- ピン53
- ピン8
- ピン47
- ピン46
すべてのワイヤーが接続されれば、あなたのプロジェクトをつけることができ、あなたのLEDのマトリックスがつくのを見る。 最初の配列の1の配置を変更し、スクリプトを再アップロードしてさまざまな形状を作成してみてください。 また、delay()コマンドの長さを調整して、各行が一度に1つずつ点灯するのを確認することもできます。