超簡単! 電子工作教室「ドット・マトリックスLED」で「電光掲示板」

アフィリエイト広告を利用しています
ドットマトリックスLEDで電光掲示板 arduino
ドットマトリックスLEDで電光掲示板

LEDが(8×8=64)ひとまとまりになって、数字や文字・簡単なキャラクタまで表現できる優れものです。どんなものなのか、電車やバスの行先案内表示板をイメージして一回やってみます。

用意したのは、「赤色ドットマトリックスLED8×8ドット OSL641501-ARA」というマトリックスLEDです。

では、使用する材料を準備します。
  • ドットマトリックスLED8×8:1個
  • ブレッドボード: 2個
  • 抵抗:330Ω:8個(ちょっと暗くなるかも)
  • やや長いジャンパー線:16本
  • 短いジャンプワイヤ:8本
  • Arduino本体:1個
  • USBケーブル:1本(PC⇔Arduino接続用)
  • パソコン:1台(ArduinoIDEインストール済)
ドットマトリックスLEDで「電光掲示板」製作準備完了

LEDにはアノード(プラス)とカソード(マイナス)と2つの接続接点があるのと、それぞれどちらかに抵抗をつけなきゃいけないので配線だけでも、ちょっと大変!です。しかも、ただピンが8本×2列の16本出てるだけなので、どれがどのLEDなのかさっぱり訳が分からんです。

配線図面の画像は秋月電子通商様赤色ドットマトリクスLED 8×8ドットデータシートより引用

さてさて、どのように接続したらよいのでしょう????

以下に先人たちのお知恵を拝借いたしました。(赤い丸印を手前(下)側に置いて示します)

arduinoA 3A 2D 3D 10D 5A 1D 13D 2
抵抗抵抗抵抗
マトリックスLED
上側のpin
12345678
左から1→8
マトリックスLED
下側のpin
12345678
抵抗抵抗抵抗抵抗抵抗
arduinoD 6D 8D 11D 12D 9A 0D 7D 4
ドットマトリックスLEDとArduinoの接続表
配線完了!

それでは、ArduinoIDEにコードを書きます。以下

// 「にこにこ」 boolean ledmatrix[8][8] = { {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,1,0,0,1,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {1,0,0,0,0,0,0,1}, {0,1,1,1,1,1,1,0}, {0,0,0,0,0,0,0,0} }; void setup(){ // 2ピン~13ピン、A0ピン~A3ピンを14ピン~17ピンとして出力する設定を行う for(int i=2;i<=17;i++){ pinMode(i,OUTPUT); digitalWrite(i,HIGH); } } void loop(){ // 行(横)ループ(2番ピン~9番ピンを行として使用) for( int i = 2 ; i <= 9 ; i++ ){ // 対象の行をLOW(0)に設定→対象行を点灯対象に設定 digitalWrite( i , LOW ); // 列(縦)ループ(10番ピン~17番ピンを列として使用) for( int j = 10 ; j <= 17 ; j++ ){ // ピン番号と出力位置が異なるので位置補正して出力する digitalWrite( j , ledmatrix[ i - 2 ][ j - 10 ] ); // 300マイクロ秒待機 delayMicroseconds(300); // 対象列の消灯 digitalWrite( j , LOW ); } // 対象行の消灯 digitalWrite( i , HIGH ); } }

「にっこり」してくれました。

やったぁ!「にっこり」してくれました。

次は、動きを付けてみたいと思います。ArduinoIDEにコードを書きます。以下

 // 「イカ星人」
 boolean ledmatrix[8][24] = {
  {0,0,0,1,1,0,0,0,   0,0,0,1,1,0,0,0,   0,0,0,1,1,0,0,0, },
  {0,0,1,1,1,1,0,0,   0,0,1,1,1,1,0,0,   0,0,1,1,1,1,0,0, },
  {0,1,1,1,1,1,1,0,   0,1,1,1,1,1,1,0,   0,1,1,1,1,1,1,0, },
  {1,1,0,1,1,0,1,1,   1,1,0,1,1,0,1,1,   1,1,0,1,1,0,1,1, },
  {1,1,1,1,1,1,1,1,   1,1,1,1,1,1,1,1,   1,1,1,1,1,1,1,1, },
  {0,0,1,0,0,1,0,0,   0,0,1,0,0,1,0,0,   0,0,1,0,0,1,0,0, },
  {0,1,0,1,1,0,1,0,   0,1,1,0,0,1,1,0,   0,0,1,1,0,0,1,1, },
  {1,0,1,0,0,1,0,1,   0,1,0,1,0,0,1,0,   1,0,1,0,1,0,0,1, }
};

  // 現在の文字の番号
  int count = 0;
  // 1文字に使用するLEDの数
  int tani  = 8;
 
void setup(){
  // 2ピン〜13ピン、A0ピン〜A3ピンを14ピン〜17ピンとして
  // 出力する設定を行う
  for(int i=2;i<=17;i++){
    pinMode(i,OUTPUT);
    digitalWrite(i,HIGH);
  }
}

void loop(){
  // スクロールを遅くするため、待ち時間を設定
  int time = 15;
  // 
  while(time > 0){
    // 行(横)ループ(2番ピン〜9番ピンを行として使用)
    for( int i = 2 ; i <= 9 ; i++ ){

      // 対象の行をLOW(0)に設定→対象行を点灯対象に設定
      digitalWrite( i , LOW );

      // 列(縦)ループ(10番ピン〜17番ピンを列として使用)
      for( int j = 10 ; j <= 17 ; j++ ){
        // ピン番号と出力位置が異なるので位置補正して出力する
        digitalWrite( j , ledmatrix[ i - 2 ][ j - 10 + count*tani ] );
        //  300マイクロ秒待機
        delayMicroseconds(300);
        //  対象列の消灯
        digitalWrite( j , LOW );
      }
      //  対象行の消灯
      digitalWrite( i , HIGH );
    }
    time--;
  }
  
  // 最後の文字まで出力したら最初に戻す
  if (count >= 2){
    count = 0;
  }
  else{
    count++;
  }
}

やったぁ!「イカ星人」が登場してくれました。

コメント