テキストをスクロールさせる看板を作る

コロナウイルスの影響で知り合いのカレー屋さんの来店が激減。テイクアウトを強化したいとのことなので急きょこんな電子看板を作りました。

必要なもの

Arduino UNOWS2812b 8×32ジャンパーワイヤー
113
あとはUSBケーブル、USBアダプタ

接続の仕方

こんなかんじで接続してください

参考サイト

Cyan Infinite - Scrolling text with flexible 32x8 RGB LED Matrix
Needed a way to display scrolling text or messages? This Flexible 32x8 RGB LED Matrix display may suit your needs! With 256 LEDs on it, you can display

Amazonで買ったもの

Amazon.co.jp: Longruner デジタル フレキシブル LEDパネル 8x32cm 5050 SMD WS2812B IC 個別にアドレス可能 256ピクセルLEDライト RGB LED パネル LEDスクリーン LED壁広告ボードなど作成 LWS03 : DIY・工具・ガーデン
Amazon.co.jp: Longruner デジタル フレキシブル LEDパネル 8x32cm 5050 SMD WS2812B IC 個別にアドレス可能 256ピクセルLEDライト RGB LED パネル LEDスクリーン LED壁広告ボードなど作成 LWS03 : DIY・工具・ガーデン

はそのままでは動かなかったので。コードを変えます。もとのコードは26行目から

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 8, PIN,
  NEO_MATRIX_BOTTOM    + NEO_MATRIX_RIGHT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);

となっています。しかし上記の商品では左上が一番最初のLEDなおかつ横配列なので下記に変更。

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 8, PIN,
  NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
  NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);

またもともとのテキストがtestのみなのにこちらは「take out 20% off !」と表示したいので

void loop() {
  matrix.fillScreen(0);    //Turn off all the LEDs
  matrix.setCursor(x, 0);
  matrix.print(F("Test"));

  if( --x < -30 ) {
    x = matrix.width();

    if(++pass >= 8) pass = 0;
    matrix.setTextColor(colors[pass]);
  }
  matrix.show();
  delay(30);
}

こちらから

void loop() {
  matrix.fillScreen(0);    //Turn off all the LEDs
  matrix.setCursor(x, 0);
  matrix.print(F("Take out 20% off!"));

  if( --x < -150 ) {
    x = matrix.width();

    if(++pass >= 5) pass = 0;
    matrix.setTextColor(colors[pass]);
  }
  matrix.show();
  delay(40);
}

こちらに変更。matrix.widthを150としたのはテキストが途中で切れるのを防ぎます。最後のdelay(40)で若干スピードを遅くして読みやすくしました。

完成コード

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

#define PIN 6

// MATRIX DECLARATION:
// Parameter 1 = width of NeoPixel matrix
// Parameter 2 = height of matrix
// Parameter 3 = pin number (most are valid)
// Parameter 4 = matrix layout flags, add together as needed:
//   NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT:
//     Position of the FIRST LED in the matrix; pick two, e.g.
//     NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner.
//   NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs are arranged in horizontal
//     rows or in vertical columns, respectively; pick one or the other.
//   NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns proceed
//     in the same order, or alternate lines reverse direction; pick one.
//   See example below for these values in action.
// Parameter 5 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 8, PIN,
  NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
  NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);

const uint16_t colors[] = {
  matrix.Color(255, 0, 0), matrix.Color(255, 69, 0), matrix.Color(255, 255, 0),matrix.Color(0, 0, 255), matrix.Color(255, 0, 255), matrix.Color(0, 255, 255), matrix.Color(255, 255, 255)};

void setup() {
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(10);
  matrix.setTextColor(colors[0]);
}

int x    = matrix.width();
int pass = 0;

void loop() {
  matrix.fillScreen(0);    //Turn off all the LEDs
  matrix.setCursor(x, 0);
  matrix.print(F("Take out 20% off!"));

  if( --x < -150 ) {
    x = matrix.width();

    if(++pass >= 5) pass = 0;
    matrix.setTextColor(colors[pass]);
  }
  matrix.show();
  delay(40);
}

次はスマホから文字をかえられるように

次はスマホなどから文字を変えられるようにするために、ESP8266でも使ってみようと思います。コロナがおさまったら時間によって「Beer 300yen」とか曜日によって「ladies day」とか表示するのもいいかもですね。

今後のアップデート用にgithubにも上げておきます。

GitHub - SatohAtsushi1101/textscrollWs2812b: WS2812b+Arduino UNO
WS2812b+Arduino UNO. Contribute to SatohAtsushi1101/textscrollWs2812b development by creating an account on GitHub.

CircuitPythonでスクロール看板を作る

いまCircuitPythonでのスクロール看板を作成中です。現在は上記のプログラムをCircuitPythonに移植完了。CircuitPythonはコンパイルが不要なのがいいですね。速度は出ませんが、スクロール看板は機能しています。

#15でいよいよスマホからwifiを使ってAdafruit IO経由でテキスト、カラーを指定できるようにしたいと思います。

一応完成しました。これならスマホから自由に文字や文字色、背景色まで指定できるのでとても便利です。

この記事が気に入ったら
いいね!しよう
最新情報をお届けします。
電子工作
webclimbers
タイトルとURLをコピーしました