勝手な電子工作・・

勝手なオリジナル電子工作に関する記事を書きます

LEDテープを使ったディスプレイの実験(Arduino-Unoで)

f:id:a-tomi:20210802175208j:plain

LEDテープの自由な操作のために、前は速いマイコン(Teensy4.0)を使いましたが、今回はArduino-UnoでLEDテープをディスプレイ代りに使えるかのごく簡単な実験です。よって記事も短いですが。

前回の記事は次です。

カラーLEDテープ照明を自由にコントロール - 勝手な電子工作・・

その後、ネットで次のような密なLEDテープ(の半端1m)を入手しました。

f:id:a-tomi:20210802175622j:plain

ほぼ長さ7mmに1つのRGB-LED (SMD-5050) が並んでいて、コントロール用のIC(WS2812B)もそれぞれに組み込まれているという密なLEDテープです。

こうなると、これでどうしてもDisplayを作ってみたくなってしまいます^^;

しかしそれにはテープを切り崩さなければならないうえ、配線にもちょっとした手間がかかりそう。いい方法がないかなあ・・思っていたら、既にプレート状に配線されている手ごろなのをみつけました。

f:id:a-tomi:20210802180545j:plain

これを並べる方がテープを切って並べるよりは簡単かな?しかし4x4のエレメントではどうにもなりません。そうはいっても数字を出す実験なら最低4x6でできそうだから、モノは試し、やってみよう・・・

というわけで、4つを次のように組み合わせてみます。

f:id:a-tomi:20210802181004j:plain

Arduinoからの信号線は1本。これでもかなり速度の速い表示が可能ですからやってみる価値はありますね。今回はFastLEDライブラリーを使います。

適当につなぎましたが、ややこしいことに次の接続順序になってます。

f:id:a-tomi:20210802181217j:plain

各行を左から右へとつなぐと使いやすいでしょうが、まあ、これでもよいとします。どっちみちソフトでコントロールするわけだから。

というわけで、2桁の数値を表示してみます。どうせならカウントダウン装置にしてみます。最小の4x6を2桁表示すると下に2行あまるわけなので、ここに下線を入れ、残り秒数が少なくなるにつれて下線の色が変わるとか・・

f:id:a-tomi:20210802181654j:plain

LEDがあまりにも明るくて写真が撮りにくいのなんの・・・

というわけできれいな実物と違って、次の動画も周りは暗く映らざるを得ませんが。

youtu.be

LEDの明るさ設定コントロールと撮影のテクニックでもっときれいに撮れるように思いますが、とりあえずはご勘弁くださいm(_ _ )m

Unoのテスト用スケッチは次の通りです。

/********************************************************
*	LED tape panel using FastLED  for Arduini-UNO	*
*	  Test version 00  Aug.1, 2021 by A.Tominaga	*
*********************************************************/
#include "FastLED.h"
#define nLEDs 64            	// number of total LEDs
#define dPin 14             	// data pin D14=A0
CRGB myTp[nLEDs];		// construct myTp array
// define pattern of numeric char
const byte Num[10][3] = {{0x69, 0x99, 0x96}, {0x26, 0x22, 0x27},
  {0x69, 0x12, 0x4F},  {0xF1, 0x21, 0x96}, {0x22, 0x6A, 0xF2},
  {0xF8, 0xE1, 0x1E},  {0x24, 0x8E, 0x9E}, {0xF1, 0x12, 0x48},
  {0x69, 0x69, 0x96},  {0x69, 0x71, 0x24}
};
// define color
#define White (18,18,18)
#define Blue (0,0,24)
#define Green (0,24,0)
#define Yellow (20,20,0)
#define Red (24,0,0)
#define Black (0,0,0)
// for count-down 50 to 0
int8_t Nr = 50;             	// number from 50 to 0
uint8_t lNr, rNr;           	// left & right digit of Nr

void setup() { // ***** Arsuino setup() *****
  Serial.begin(9600);
  delay(2000);
  FastLED.addLeds<WS2812, dPin, GRB>(myTp, nLEDs);
  clrLED();
}

void loop() { // ***** Arduino loop() *****
  lNr = Nr / 10;		// left digit
  rNr = Nr - lNr * 10;		// right digit
  editPat('L', lNr);		// edit left digit
  editPat('R', rNr);		// edit right digit
  drawBar();			// draw under-bar
  FastLED.show();		// and show them
  delay(1000);
  if (Nr==0){			// if counted done
    delay(5000);		// add long delay
  }
  Nr = Nr - 1;			// update number
  if (Nr < 0) {
    Nr = 50;
  }
  clrLED();			// clear LED tape
}

void editPat(byte LR, uint8_t Su) {
  for (uint8_t i = 0; i < 3; i++) {
    byte Byt = Num[Su][i];       // get row i
    for (uint8_t j = 0; j < 8; j++) { // column j
      uint8_t mask = B10000000  >> j;  // set mask
      if (mask & Byt) {         // if Num[Su,bit] on,
        uint8_t k = i * 8 + j;  // then calc. position
        //  if row 1,3,5,.. byte-sequences are opposite
        uint8_t l = k;
        if ((k / 4) % 2 == 1) { // if rows 1,3,5,..
          l = k + 3 - (k % 4) * 2; // reverse sequences
        }
        if (LR == 'L') {        // for left digit
          myTp[l].setRGB White;
        } else {                 // for right digit
          myTp[l + nLEDs / 2].setRGB White;
        }
      }
    }
  }
}

void drawBar(void) {
  for (uint8_t l = 28; l < 64; l++) {
    if ((l < 32) | (l >= 60)) {
      myTp[l].setRGB Blue;
      if (Nr < 40) {
        myTp[l].setRGB Green;
      }
      if (Nr < 30) {
        myTp[l].setRGB Yellow;
      }
      if (Nr < 20) {
        myTp[l].setRGB Yellow;
      }
      if (Nr < 10) {
        myTp[l].setRGB Red;
      }
    }
  }
}
  void clrLED(void) {
    for (int i = 0; i < nLEDs; i++) {
      myTp[i].setRGB(0, 0, 0);
    }
    FastLED.show();
  }

 

エレメントをどんどん増やせば明るくて見やすいきれいなディスプレイができますね!ただ、この状態でもLEDテープは100mAほど消耗しますから、エレメント数を大幅に増やすときは、別電源から供給する必要があります。

 

以上、ごく簡単ですが、どうしてもやってみたかったので^^ ・・・ 簡単ですが記録として残しておきます。

もしもお役にたてば幸いです。

 

©2021 Akira Tominaga, All rights reserved.