PR 記事には広告が含まれています
スポンサーリンク
Translate

大型8×8 LEDドットマトリックスをつくってみた

スポンサーリンク

どうもkohaniiです。

昔作った8×8のプッシュスイッチが使える基板をLEDドットマトリックスにも使えないかと思いました

スポンサーリンク

基板

何枚か残っていました。

基板をスキャナーで取り込んだ画像を貼っておきます。
高解像度版はこちら

高解像度版はこちら

スキャン画像の右下を切り取ってトレースしてみました。配線を見てみるとLEDも繋げそうです
赤線が表面、青線が裏面の配線です。黄色がスルーホールです。

本来はスイッチを付ける所にLEDを、ダイオードを付ける所に抵抗を付ければ簡単に使えそうです。

そうした場合の回路はこんな感じです。(回路図は間違えてコネクタが左右逆です)

スポンサーリンク

LED

前にスマホ用リングライトのLED交換時に使ったものがありました。

同じ物の2700K(電球色)版があったのでそれを使いたいと思います。
チップLEDなのでちょうどいいです。

抵抗は適当な100Ωのチップ抵抗です。

スポンサーリンク

はんだ付け

LEDを64個、抵抗も64個
全部手作業ではんだ付けします。

はんだ付けする所にフラックスをたっぷり塗っておきます。

. . .


2行はんだ付けできました。


ちゃんと光ります

 

2時間後

. . .

. . .

. . .

. . .

. . .

. . .

. . .

スポンサーリンク

完成

できました。

スポンサーリンク

光の拡散と区切り

さすがにLEDの間隔が広いのでそのままでは見にくいです。

そこで3Dプリンターで、ドットごとの区切りを作って、上にコピー用紙を貼って見やすくします。

とりあえずBlenderでささっと3Dの設計をします。

あとは3Dプリンター用のデータに変換するためにCuraでスライスします。

あまり時間をかけたくないので高速めに設定します。
印刷に4時間44分かかるようです。なんか不吉ですね。

あとは3Dプリンターの印刷完了を待つのみです。

 

翌日

スポンサーリンク

印刷完了


できました。っていうかできてました。
眠いです。午前9時過ぎです。


表面には糊でコピー用紙を貼っておきます。

スポンサーリンク

動かしてみる

とりあえずその辺にあったArduino Nanoと繋いでみました。
ブレッドボードになんか刺さってますが、ただ外して無いだけです。

基板の左につながってるのは、行(LEDのGND側)のスキャン用のトランジスタアレイ(TBD62083APG)です。
これでマイコンのI/Oパワーで制御できます。

プログラムはこんな感じです。

int x_pins[8] = {
  5, 6, 7, 8, 9, 10, 11, 12
};

int y_pins[8] = {
  A0, A1, A2, A3, A4, A5, 4, 3
};

void setup() {
  for (int i = 0; i < 8; i++) {
    pinMode(x_pins[i], OUTPUT);
  }
  for (int i = 0; i < 8; i++) {
    pinMode(y_pins[i], OUTPUT);
  }
}

uint8_t data[8] = {
  0b11001100,
  0b11011000,
  0b11110000,
  0b11110000,
  0b11011000,
  0b11001100,
  0b11000110,
  0b11000011,
};

void loop() {
  for (int wait = 0; wait < 5; wait++) {
    for (int y = 0; y < 8; y++) {
      for (int i = 0; i < 8; i++) {
        digitalWrite(y_pins[i], LOW);
      }
      for (int x = 0; x < 8; x++) { 
        digitalWrite(x_pins[x], (data[y] >> (7 - x)) & 1);
      }
      digitalWrite(y_pins[y], HIGH);
      delayMicroseconds(1000);
      for (int i = 0; i < 8; i++) {
        digitalWrite(y_pins[i], LOW);
      }
    }
  }
  for (int y = 0; y < 8; y++) {
    uint32_t now = data[y];
    now |= (now << 8) | (now << 16);
    now <<= 1; 
    data[y] = (now >> 8);
  }
}

 

スポンサーリンク

光った!!!


なんか動いてる!!!見えないけど!!!

とにかく拡散と区切りのアレをかぶせてみます

 

やっぱ動いてる!!!

ちゃんと"K"がスクロールしてます。
プログラムどおりです。


横から見るとちゃんと内部で拡散してくれている事が分かります。

やったね!!

おしまい