工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Bluetooth対応8×8 LEDマトリックス スクロール文字表示 Arduinoプロジェクト

部品と材料

部品名数量備考
Arduino Nano R31
HC-05 Bluetoothモジュール1
8×8 LEDマトリックスモジュール(MAX7219搭載)7
6.8 kΩ 抵抗1
2.2 kΩ 抵抗2

必要な工具と機器

アプリとオンラインサービス

プロジェクト概要

8×8 LEDマトリックスでスクロール文字表示を実現するため、Embedded Labの記事(Portable Bluetooth Enabled Scrolling LED Matrix Display Part 1)を参考に制作しました。

構成:Arduino Nano、Bluetoothモジュール(スマホからデータ受信)、MAX7219搭載の8×8 LEDマトリックスモジュール7枚。オリジナル記事では自作マトリックスでしたが、安価な完成品モジュールを使用。手元に7枚しかなかったためコードを少し修正しています。Androidアプリ「Bluetooth SPP Pro」はGoogle Playから削除されているため、上記リンクから入手してください。スクロール速度、輝度、一時停止、テキスト消去、定型文ボタンなどを操作できます。

最終的にはPVC素材の箱に黒い壁紙を貼って収納しました。

使用ライブラリ:

コード

メインスケッチ(Arduino)
/* Arduinoが認識するコマンド:
1. 表示したい文字列は括弧で囲んで送信。例:(Hello! How are you doing?)
   '(' を受信すると表示データとみなし、')' までをスクロール表示。
2. 輝度調整:'/+' でアップ、'/-' でダウン(16段階)
3. スクロール速度:'/> ' で遅く、'/< ' で速く
4. '/p' で一時停止/再開
5. '/e' でバッファクリア・画面消去

接続:
Easy Matrix    Arduino
VCC            +5V
DIN            MOSI (Pin 11)
LOAD           pinCS (下記定義)
CLK            SCK (Pin 13)
GND            GND

UART通信:9600ボーレート
作成:Rajendra Bhatt (admin@embedded-lab.com)
*/

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>

int pinCS = 10;
int numberOfHorizontalDisplays = 7;
int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

int scrollspeed = 100;
int spacer = 1;
int width = 5 + spacer;
boolean inChar = false, NewData = false, pause = false;
boolean dataAvailable = false;
char inputString[512];
int count = 0, BTvalue = 5;

void setup() {
  matrix.setIntensity(1);
  matrix.setPosition(0, 0, 0);
  matrix.setPosition(1, 1, 0);
  matrix.setPosition(2, 2, 0);
  matrix.setPosition(3, 3, 0);
  matrix.setPosition(4, 4, 0);
  matrix.setPosition(5, 5, 0);
  matrix.setPosition(6, 6, 0);
  matrix.fillScreen(0);
  matrix.write();
  Serial.begin(9600);
  pinMode(2, INPUT);
  digitalWrite(2, LOW);
  attachInterrupt(0, serialInterrupt, CHANGE);
}

void loop() {
  if (dataAvailable) {
    display_data();
  }
}

void display_data() {
  for (int i = 0; i < width * count + matrix.width() - 1 - spacer; i++) {
    matrix.fillScreen(0);
    int letter = i / width;
    int x = (matrix.width() - 1) - i % width;
    int y = (matrix.height() - 8) / 2;
    while (x + width - spacer >= 0 && letter >= 0) {
      if (letter < count) {
        matrix.drawChar(x, y, inputString[letter], HIGH, LOW, 1);
      }
      letter--;
      x -= width;
    }
    matrix.write();
    if (!dataAvailable) {
      i = width * count + matrix.width() - 1 - spacer;
      matrix.fillScreen(LOW);
      matrix.write();
    }
    if (NewData) {
      i = 0;
      matrix.fillScreen(LOW);
      matrix.write();
      NewData = false;
    }
    while (pause == true) {
      delay(0);
    }
    delay(scrollspeed);
  }
}

volatile boolean inService = false;

void serialInterrupt() {
  if (inService) return;
  inService = true;
  interrupts();
  while (!Serial.available());
  while (Serial.available()) {
    char ch = Serial.read();
    if (ch == '(') {
      count = 0;
      inChar = true;
      while (inChar) {
        if (Serial.available()) {
          ch = Serial.read();
          if (ch == ')') {
            inChar = false;
            dataAvailable = true;
          } else {
            inputString[count] = ch;
            count++;
          }
          if (count > 0) NewData = true;
        }
      }
    }
    if (ch == '/') {
      inChar = true;
      while (inChar) {
        if (Serial.available()) {
          ch = Serial.read();
          if (ch == '+') {
            if (BTvalue < 15) { BTvalue++; matrix.setIntensity(BTvalue); }
            break;
          }
          if (ch == '-') {
            if (BTvalue > 0) { BTvalue--; matrix.setIntensity(BTvalue); }
            break;
          }
          if (ch == '>') {
            if (scrollspeed < 200) scrollspeed += 20;
            break;
          }
          if (ch == '<') {
            if (scrollspeed > 10) scrollspeed -= 10;
            break;
          }
          if (ch == 'e') {
            dataAvailable = false;
            break;
          }
          if (ch == 'p') {
            pause = !pause;
            break;
          }
          else break;
        }
      }
    }
  }
  inService = false;
}

回路図

Bluetooth対応8×8 LEDマトリックス スクロール文字表示 Arduinoプロジェクト

製造プロセス

  1. スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
  2. Arduino NanoとMAX7219で作る24×16 LEDポングゲーム機
  3. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  4. Bluetoothテキストテレポーター:Arduino + Androidプロジェクト
  5. 音声で家電を操作:GoogleアシスタントとBluetoothでArduino家電制御
  6. Arduino Unoで8×8 LEDマトリックスを制御:ステップバイステップガイド
  7. Arduino UNOとEthernetシールドで太陽放射を測定する自作ピラノメーター
  8. Arduino UnoとBluetoothでラジコンカーを遠隔操作:ステップバイステップガイド
  9. Arduino MegaとGSM SIM900シールドでSMS送受信を簡単実装
  10. Arduino搭載HID UPS:ダミー電源をUSB対応バックアップにアップグレード
  11. スマホ操作のBluetoothマウス:バーチャルジョイスティックを自作しよう