Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung

Komponenten und Zubehör

Arduino UNO × 1
74HC595 8-Bit Shift Register × 7
Widerstand 475 Ω × 56
Male Header 40-polig (1 Reihe, 0,1″) × 2
Female Header 8-polig (1 Reihe, 0,1″) × 21
Universal-Lochrasterplatine 6″×4″ × 4
8×8 LED Matrix (gemeinsame Kathode) × 6
BC548 Transistor × 1

Benötigte Werkzeuge

Apps und Online-Dienste

Über dieses Projekt

Hallo zusammen!

Dieses Projekt zeigt den Bau einer 48×8 programmierbaren Scrolling-LED-Matrix mit Arduino UNO und 74HC595 Shift-Registern. Meine erste Arduino-Herausforderung (Lehrer-Auftrag) – ohne Vorwissen (nicht mal LED blinken). Mit Geduld & Verständnis auch für Einsteiger machbar.

Einzige Referenz: Schaltplan aus dem Internet. Recherche zu Shift-Registern & Multiplexing.

Die Schaltung

48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung
Prinzip: 1 Shift-Register für 8 Zeilen (Rows), 1 pro 8 Spalten (Columns = 1 Modul)

Ein 8×8 Modul beherrschen → Spalten-Steuerung replizieren & erweitern. Pro 8 Spalten (1 Modul) 1 weiteres 74HC595. Zeilen-Steuerung bleibt 1 Register. Kein Spalten-Limit.

Bauteile beschaffen

48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung
5mm 8×8 Common-Cathode Matrix (Online bestellt)

Prototyp bauen

48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung
Funktionierender 8×8 Prototyp

Lötphase

Zeilen- & Spaltensteuerung auf separaten Lochrasterplatinen, per Drähten & Headern verbunden.

48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung
48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung
48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung
48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung
48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung

Erfolgreiches 8×8 Modul → weitere Shift-Register für Spalten anketten (gemeinsamer Clock). Zeilen: nur 1 Register. Unbegrenzt erweiterbar.

Zweite Hälfte bauen

48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung
48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung
48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung
48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung

Gehäuse: Ohne 3D-Drucker beim Schreiner fertigen lassen – wurde größer als geplant. Besser: Fusion 360 designen & 3D-drucken. Bohrungen für USB/Strom.

48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung

Der Code

Code in Anhängen. Prinzip: Zeilen scannen, Spalten mit Logikpegeln füllen. Code bestimmt Scrollgeschwindigkeit & Text. Standard: Rechts-nach-Links, andere Richtungen per Modifikation möglich.

Arduino Code für 48×8 LED Matrix

/*////////////////////////////////////////////////////////////////////////////////
 * Arduino code to display scrolling characters on 6 or more 8x8 LED matrix.
 * Number of matrices adjustable with small code change.
 * Comments in each statement for editing.
 * Coded by Prasanth K S | Contact: kksjunior@hotmail.com
 *////////////////////////////////////////////////////////////////////////////////
char msg[] = "WELCOME WIZ"; // Text hier ändern
int scrollspeed = 5; // Scrollgeschwindigkeit (niedriger = schneller)
int x, y;

// Spalten-Pins (74HC595 Kette)
int clockPin1 = 2;
int latchPin1 = 3;
int dataPin1 = 4;

// Zeilen-Pins (einzelnes 74HC595)
int clockPin2 = 5;
int latchPin2 = 6;
int dataPin2 = 7;

// BITMAP: 8 Zeilen, 7 Zonen (6 Matrizen + 1 Reserve)
byte bitmap[8][7];
int numZones = sizeof(bitmap) / 8;
int maxZoneIndex = numZones - 1;
int numCols = numZones * 8;

// Font Definition (5x7 + 2 Spalten Abstand)
byte alphabets[][8] = {
  {0,0,0,0,0}, // @ = SPACE
  {31, 36, 68, 36, 31}, // A
  {127, 73, 73, 73, 54}, // B
  {62, 65, 65, 65, 34}, // C
  {127, 65, 65, 34, 28}, // D
  {127, 73, 73, 65, 65}, // E
  {127, 72, 72, 72, 64}, // F
  {62, 65, 65, 69, 38}, // G
  {127, 8, 8, 8, 127}, // H
  {0, 65, 127, 65, 0}, // I
  {2, 1, 1, 1, 126}, // J
  {127, 8, 20, 34, 65}, // K
  {127, 1, 1, 1, 1}, // L
  {127, 32, 16, 32, 127}, // M
  {127, 32, 16, 8, 127}, // N
  {62, 65, 65, 65, 62}, // O
  {127, 72, 72, 72, 48}, // P
  {62, 65, 69, 66, 61}, // Q
  {127, 72, 76, 74, 49}, // R
  {50, 73, 73, 73, 38}, // S
  {64, 64, 127, 64, 64}, // T
  {126, 1, 1, 1, 126}, // U
  {124, 2, 1, 2, 124}, // V
  {126, 1, 6, 1, 126}, // W
  {99, 20, 8, 20, 99}, // X
  {96, 16, 15, 16, 96}, // Y
  {67, 69, 73, 81, 97}  // Z
};

void setup() {
  pinMode(latchPin1, OUTPUT); pinMode(clockPin1, OUTPUT); pinMode(dataPin1, OUTPUT);
  pinMode(latchPin2, OUTPUT); pinMode(clockPin2, OUTPUT); pinMode(dataPin2, OUTPUT);
  // Bitmap leeren
  for (int row = 0; row < 8; row++)
    for (int zone = 0; zone <= maxZoneIndex; zone++)
      bitmap[row][zone] = 0;
}

// Display refreshen (Multiplexing)
void RefreshDisplay() {
  for (int row = 0; row < 8; row++) {
    int rowbit = 1 << row;
    digitalWrite(latchPin2, LOW);
    shiftOut(dataPin2, clockPin2, MSBFIRST, rowbit);
    digitalWrite(latchPin1, LOW);
    for (int zone = maxZoneIndex; zone >= 0; zone--)
      shiftOut(dataPin1, clockPin1, MSBFIRST, bitmap[row][zone]);
    digitalWrite(latchPin1, HIGH);
    digitalWrite(latchPin2, HIGH);
    delayMicroseconds(300);
  }
}

// Pixel setzen/löschen
void Plot(int col, int row, bool isOn) {
  int zone = col / 8;
  int colBitIndex = col % 8;
  byte colBit = 1 << colBitIndex;
  if (isOn) bitmap[row][zone] |= colBit;
  else bitmap[row][zone] &= ~colBit;
}

// Nachricht verarbeiten & scrollen
void XProcess() {
  for (int charIndex = 0; charIndex < (sizeof(msg) - 1); charIndex++) {
    int alphabetIndex = msg[charIndex] - '@';
    if (alphabetIndex < 0) alphabetIndex = 0;
    // Jedes Zeichen: 5 Spalten + 2 Spalten Abstand = 7 Spalten
    for (int col = 0; col < 7; col++) {
      for (int row = 0; row < 8; row++) {
        bool isOn = 0;
        if (col < 5) isOn = bitRead(alphabets[alphabetIndex][col], 7 - row) == 1;
        Plot(numCols - 1, row, isOn); // Rechts zeichnen, Shift scrollt links
      }
      for (int refreshCount = 0; refreshCount < scrollspeed; refreshCount++)
        RefreshDisplay();
      // Bitmap 1 Spalte nach links shiften
      for (int row = 0; row < 8; row++) {
        for (int zone = 0; zone < numZones; zone++) {
          bitmap[row][zone] >>= 1;
          if (zone < maxZoneIndex)
            bitWrite(bitmap[row][zone], 7, bitRead(bitmap[row][zone + 1], 0));
        }
      }
    }
  }
}

void loop() {
  XProcess();
}

Schaltplan (Referenz)

48×8 Scrolling LED Matrix mit Arduino – Schritt-für-Schritt Anleitung
Pin-Belegung siehe Code-Kommentare

Danke! :)

Herstellungsprozess

  1. Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
  2. LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung
  3. Interaktive LED-Matrix Tür-Anzeige mit PIR-Bewegungssensor – Arduino Feiertagsgruß
  4. Intelligenten Arduino-Vierbeiner-Roboter bauen: Schritt-für-Schritt-Anleitung
  5. Stufenlose LED-Helligkeitssteuerung mit Bolt IoT und Arduino UNO
  6. Arduino Flip Clock mit 8×8 LED-Matrix – DIY Echtzeituhr-Projekt
  7. Arduino RGB-LED-Farbmischer – Einsteigerfreundliches DIY-Projekt
  8. 8×8 LED-Matrix mit Arduino Uno meistern: Schritt-für-Schritt-Anleitung
  9. Kompaktes FM-Radio mit Arduino Nano und RDA5807M selbst bauen
  10. Outdoor DMX-fähige RGB-LED-Fluter – Günstig & Hochleistungsstark