ドットマトリクスLEDを自由に操る(Arduino)

公開日: 

Arduinoで、ドットマトリクスLEDの好きな場所を点滅させる方法について(自分の為のメモ書き)

ドットマトリクスLEDとは、

こんな風に、LEDがマス目状に並んだもの。

基礎知識

電気は、プラス(アノード)からマイナス(カソード)に流れる。
そして、電圧の高い方から低い方に流れる。
なので、 HIGH → LOW に流れる。

回路図で書くと、上の矢印の方向に電気が流れる。

3×3のマトリックスLEDで考える

3×3のマトリックスLEDの回路図

アノード 3本(1、2,3)

カソード 3本(4,5,6)をArduinoのデジタルピンに接続することになる。

これをブレッドボード上で作ってみる。(抵抗を考えると、回路が複雑になるので、抵抗入りのLEDを使って作った)

A~IがLED +がアノード -がカソード になる。

⑫がArduinoのデジタルの1番ピン(D1)に

⑬がArduinoのデジタルの2番ピン(D2)に

⑭がArduinoのデジタルの3番ピン(D3)に

⑨がArduinoのデジタルの4番ピン(D4)に

⑦がArduinoのデジタルの5番ピン(D5)に

⑮がArduinoのデジタルの6番ピン(D6)に 繋ぐ。

配線が汚いのですが、こんな感じになる。

大きなブレッドボードを使って、間隔をあけて配線をした方が、後で配線の確認がしやすいと思う。

Aを光らせる

  • 電気の流れを1から4に向かって流す。

1を HIGHにして、4をLOWにする。

仮にHIGHを5V、LOWを0Vとすると、電圧が高い5Vから0Vに流れるのでAは点灯する。

  • A以外は消灯する。

電圧を同じにするか、LOWからLOW 又は、HIGHからHIGHという流れを作ればよい。

Bを消灯する

1はHIGHとなっているので、5をLOWにするとBに対して、HIGHからLOWという電圧の流れが出来るのでBは点灯する。

1のHIGHは、変更できないので、5を変えるしかない。HIGHかLOWの2択なのでLOWがダメなら、HIGH。

1はHIGH、5をHIGHにする。Bに対しては、HIGHからHIGHに電流がながれる(電圧の変化がない)ので、Bは消灯する。

Cを消灯する

1はHIGHとなっているので、6をLOWにするとCに対して、HIGHからLOWという電圧の流れが出来るのでCは点灯する。

1のHIGHは、変更できないので、6を変えるしかない。HIGHかLOWの2択なのでLOWがダメなら、HIGH。

1はHIGH、6をHIGHにする。Cに対しては、HIGHからHIGHに電流がながれる(電圧の変化がない)ので、Cは消灯する。

Dを消灯する

4はLOWとなっているので、2をHIGHにすると、HIGHからLOWという電圧の流れが出来るのでDは点灯する。

4のLOWは、変更ができないので、2を変えるしかない。HIGHがダメならLOW。

2はLOW、4もLOWにする。Dに対しては、LOWからLOWに電流が流れる(電圧の変化がない)ので、Dは消灯する。

Eを消灯する

2はLOWとなっていて、5はHIGHとなっている(変更はできない)

Eに対しては、LOWからHIGHに電流が流れようとするけど、低いほうから高いほうには流れないので、Eは消灯する。

Fを消灯する

2はLOWとなっていて、6はHIGHとなっている(変更はできない)

Fに対しては、Eと同じで、LOWからHIGHに電流が流れようとするけど、低いほうから高いほうには流れないので、Fは消灯する。

Gを消灯する

4はLOWとなっているので、3をHIGHにすると、HIGHからLOWという電圧の流れが出来るのでGは点灯する。

4のLOWは、変更ができないので、3を変えるしかない。HIGHがダメならLOW。

3はLOW、4もLOWにする。Gに対しては、LOWからLOWに電流が流れる(電圧の変化がない)ので、Gは消灯する。

Hを消灯する

3はLOWとなっていて、5はHIGHとなっている(変更はできない)

Hに対しては、LOWからHIGHに電流が流れようとするけど、低いほうから高いほうには流れないので、Hは消灯する。

Iを消灯する

3はLOWとなっていて、6はHIGHとなっている(変更はできない)

Iに対しては、Hと同じで、LOWからHIGHに電流が流れようとするけど、低いほうから高いほうには流れないので、Iは消灯する。

Arduinoのプログラム

/*
3X3 マトリックス
ピン番号 1、2、3 プラス(アノード)
ピン番号 4、5、6 マイナス(カソード)
*/

int pin_1 = 1;
int pin_2 = 2;
int pin_3 = 3;

int pin_4 = 4;
int pin_5 = 5;
int pin_6 = 6;

void setup() {
//アノードを、LOWで初期化
  pinMode(pin_1, OUTPUT);
  digitalWrite(pin_1, LOW);  
  pinMode(pin_2, OUTPUT);
  digitalWrite(pin_2, LOW);  
  pinMode(pin_3, OUTPUT);
  digitalWrite(pin_3, LOW);
  
//カソードを、HIGHで初期化
  pinMode(pin_4, OUTPUT);
  digitalWrite(pin_4, HIGH);
  pinMode(pin_5, OUTPUT);
  digitalWrite(pin_5, HIGH);  
  pinMode(pin_6, OUTPUT);
  digitalWrite(pin_6, HIGH);

}

// the loop function runs over and over again forever
void loop() {

//aが点灯

  digitalWrite(pin_1, HIGH);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, LOW);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);
 
  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);

}

LEDを点灯
delay(1000);
LEDを消灯

delay(1000); 

となっている。

上の考え方を参考にして、A~IまでのLEDを光るようにしたプログラム

/*
3X3 マトリックス
ピン番号 1、2、3 プラス(アノード)
ピン番号 4、5、6 マイナス(カソード)
*/

int pin_1 = 1;
int pin_2 = 2;
int pin_3 = 3;

int pin_4 = 4;
int pin_5 = 5;
int pin_6 = 6;

void setup() {
//アノードを、LOWで初期化
  pinMode(pin_1, OUTPUT);
  digitalWrite(pin_1, LOW);  
  pinMode(pin_2, OUTPUT);
  digitalWrite(pin_2, LOW);  
  pinMode(pin_3, OUTPUT);
  digitalWrite(pin_3, LOW);

//カソードを、HIGHで初期化
  pinMode(pin_4, OUTPUT);
  digitalWrite(pin_4, HIGH);
  pinMode(pin_5, OUTPUT);
  digitalWrite(pin_5, HIGH);  
  pinMode(pin_6, OUTPUT);
  digitalWrite(pin_6, HIGH);

}

// the loop function runs over and over again forever
void loop() {

//aが点灯

  digitalWrite(pin_1, HIGH);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, LOW);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);


//bが点灯

  digitalWrite(pin_1, HIGH);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, LOW);
  digitalWrite(pin_6, HIGH);

  delay(1000);

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);

//cが点灯

  digitalWrite(pin_1, HIGH);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, LOW);

  delay(1000);

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);


//dが点灯

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, HIGH);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, LOW);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);


//eが点灯

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, HIGH);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, LOW);
  digitalWrite(pin_6, HIGH);

  delay(1000);

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);

//fが点灯

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, HIGH);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, LOW);

  delay(1000);

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);

//gが点灯

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, HIGH);
  digitalWrite(pin_4, LOW);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);

//hが点灯

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, HIGH);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, LOW);
  digitalWrite(pin_6, HIGH);

  delay(1000);

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);



//iが点灯

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, HIGH);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, LOW);

  delay(1000);

  digitalWrite(pin_1, LOW);
  digitalWrite(pin_2, LOW);
  digitalWrite(pin_3, LOW);
  digitalWrite(pin_4, HIGH);
  digitalWrite(pin_5, HIGH);
  digitalWrite(pin_6, HIGH);

  delay(1000);

}

このタイプのマトリックスLEDも考え方は同じで、どっか回路図、配線図があるはずなので確認をすると

上図と同じように
アノード 3本(1、2,3)
カソード 3本(4,5,6)
となっているか
アノード 3本(4、5,6)
カソード 3本(1,2,3)
となっているかどっちかだと思う

16×16のマトリックスだと、線の数が縦、横、それぞれ8本
合計で16本の線となるが、考え方は、上の3×3と同じ考え方をすればどこでも光らすことが出来る。

シェアありがとうございます

  • このエントリーをはてなブックマークに追加
  • Pocket

Your Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑