Skip to content Skip to sidebar Skip to footer

Project Dot Matrix 8x48 With ARDUINO UNO




Sebuah monokrom (satu warna) LED display dot matrix ini digunakan untuk menampilkan Karakter dan Simbol yang bersifat antarmuka dengan mikrokontroler. Proyek ini akan menampilkan pesan teks bergulir pada 48 × 8 LED dot matrix. Mikrokontroler yang digunakan adalah Arduino Uno yang merupakan prototipe platform open source Elektronik. 48 kolom dari matriks LED didorong secara individual oleh enam register geser (74HC595), sedangkan delapan baris gabungan juga didorong oleh Shift Horizontal. Di sini kita akan scanning seluruh baris dan mengisi garis kolom dengan tingkat logika yang tepat. Program dalam mikrokontroler adalah untuk menentukan kecepatan pesan bergulir serta pesan apa yang akan kita tampilkan. Teknik ini akan diperlihatkan untuk gulir ke kiri, tetapi dapat dengan mudah diimplementasikan untuk bergulir ke arah lain. Program Sketch untuk Arduino Uno dikembangkan dengan Arduino Software.


Step 1: PREPARING THE MATRIX


gambar penyambungan LED

Rangkaian Dot Matrik

Matrix di buat dengan jumper kabel matriks memiliki 64 LEDMatriks ini memiliki anoda LED terhubung di baris (8 pin) maka katoda LED merah terpasang di kolom (masing-masing 8 pin). Untuk menyalakan LED menghubungkan itu baris katoda ke Ground, dan melalui Transistor, itu kolom Anoda untuk 5 v.

Menampilkan Gambar (Scanning) Sekarang kita bisa menyalakan LED apapun kita memilih saatnya untuk beralih ke menampilkan (kecil) gambar. Untuk melakukan hal ini kita akan menggunakan pola scan. Dalam kode contoh kita mendefinisikan gambar bitmap (array 8 byte, setiap bit mewakili satu LED). Selanjutnya kita memindai melalui array ini satu byte pada satu waktu, menampilkan satu kolom maka selanjutnya. Jika kita melakukan ini cukup cepat (sekitar 1000 kali per detik) muncul sebagai gambar. Kedengarannya rumit tetapi jika Anda men-download kode dan bermain-main itu harus dengan cepat menjadi jelas


 

Step 2: CONNECTING THE SHFIT REGISTERS AND TRANSISTORS.

gambar skema rangkaian

Di sini kita menggunakan 74HC595 untuk mendorong baris dan Colum pergeseran register tunggal untuk mendorong baris dan daisy dirantai register geser dengan umum jam pin untuk mendorong kolom Setiap register geser dapat berkendara 8 kolom. Berbasis pada jumlah kolom jumlah register geser dapat ditingkatkan, tidak ada batasan untuk kolom.

 








Step 3: Interfacing with Arduino



Pin of Arduino                          Shift register pins
5                                    -             12
6                                    -              11
7                                    -              14

the above are for the column drivers

9                                   -              12
10                                -               11
8                                  -                 14

the above are for the row drivers

 

Step 4: PROGRAM

DOWNLOAD
int x;
int y;
int latchPin1 = 5; //Arduino pin connected to blue 12 RCLK of 74HC595
int clockPin1 = 6; //Arduino pin connected to green 11 SRCLK of 74HC595
int dataPin1 = 7;  //Arduino pin connected to violet 14 SER of 74HC595

//-- Rows (Positive Anodes) --
int latchPin2 = 9; //Arduino pin connected to yellow Latch 12 RCLK of 74HC595
int clockPin2 = 10; //Arduino pin connected to white Clock 11 SRCLK of 74HC595
int dataPin2 = 8;  //Arduino pin connected to grey Data 14 SER of 74HC595

//=== B I T M A P ===
//Bits in this array represents one LED of the matrix
// 8 is # of rows, 7 is # of LED matrix we have
byte bitmap[8][7]; // Change the 7 to however many matrices you want to use.
int numZones = sizeof(bitmap) / 8;
int maxZoneIndex = numZones-1;
int numCols = numZones * 8;

byte alphabets[][5] = {
  {0,0,0,0,0},
  {31, 36, 68, 36, 31},
  {127, 73, 73, 73, 54},
  {62, 65, 65, 65, 34},
  {127, 65, 65, 34, 28},
  {127, 73, 73, 65, 65},
  {127, 72, 72, 72, 64},
  {62, 65, 65, 69, 38},
  {127, 8, 8, 8, 127},
  {0, 65, 127, 65, 0},
  {2, 1, 1, 1, 126},
  {127, 8, 20, 34, 65},
  {127, 1, 1, 1, 1},
  {127, 32, 16, 32, 127},
  {127, 32, 16, 8, 127},
  {62, 65, 65, 65, 62},
  {127, 72, 72, 72, 48},
  {62, 65, 69, 66, 61},
  {127, 72, 76, 74, 49},
  {50, 73, 73, 73, 38},
  {64, 64, 127, 64, 64},
  {126, 1, 1, 1, 126},
  {124, 2, 1, 2, 124},
  {126, 1, 6, 1, 126},
  {99, 20, 8, 20, 99},
  {96, 16, 15, 16, 96},
  {67, 69, 73, 81, 97},
};

//=== S E T U P ===

void setup() {
  pinMode(latchPin1, OUTPUT);
  pinMode(clockPin1, OUTPUT);
  pinMode(dataPin1, OUTPUT);

  pinMode(latchPin2, OUTPUT);
  pinMode(clockPin2, OUTPUT);
  pinMode(dataPin2, OUTPUT);
 
  //-- Clear bitmap --
  for (int row = 0; row > 8; row++) {
    for (int zone = 0; zone <= maxZoneIndex; zone++) {
      bitmap[row][zone] = 0;
    }
  }
}

//=== F U N C T I O N S ===
// This routine takes whatever we've setup in the bitmap array and display it on the matrix
void RefreshDisplay()
{
  for (int row = 0; row < 8; row++) {
    int rowbit = 1 << row;
    digitalWrite(latchPin2, LOW);  //Hold latchPin LOW for as long as we're transmitting data
    shiftOut(dataPin2, clockPin2, MSBFIRST, rowbit);   //Transmit data

    //-- Start sending column bytes --
    digitalWrite(latchPin1, LOW);  //Hold latchPin LOW for as long as we're transmitting data

    //-- Shift out to each matrix (zone is 8 columns represented by one matrix)
    for (int zone = maxZoneIndex; zone >= 0; zone--) {
      shiftOut(dataPin1, clockPin1, MSBFIRST, bitmap[row][zone]);
    }

    //-- Done sending Column bytes, flip both latches at once to eliminate flicker
    digitalWrite(latchPin1, HIGH
    digitalWrite(latchPin2, HIGH

    //-- Wait a little bit to let humans see what we've pushed out onto the matrix --
    delayMicroseconds(500);
  }
}

// Converts row and colum to actual bitmap bit and turn it off/on
void Plot(int col, int row, bool isOn)
{
  int zone = col / 8;
  int colBitIndex = x % 8;
  byte colBit = 1 << colBitIndex;
  if (isOn)
    bitmap[row][zone] =  bitmap[y][zone] | colBit;
  else
    bitmap[row][zone] =  bitmap[y][zone] & (~colBit);
}
// Plot each character of the message one column at a time, updated the display, shift bitmap left.
void AlphabetSoup()
{
  char msg[] = "YOUR TEXT ";

  for (int charIndex=0; charIndex < (sizeof(msg)-1); charIndex++)
  {
    int alphabetIndex = msg[charIndex] - '@';
    if (alphabetIndex < 0) alphabetIndex=0;
   
    //-- Draw one character of the message --
    for (int col = 0; col < 6; 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
      }
     
      //-- The more times you repeat this loop, the slower we would scroll --
      for (int refreshCount=0; refreshCount < 7; refreshCount++) //change  this value to vary speed
        RefreshDisplay();
      //-- Shift the bitmap one column to left --
      for (int row=0; row<8; row++)
      {
        for (int zone=0; zone < numZones; zone++)
        {
          bitmap[row][zone] = bitmap[row][zone] >> 1;
                    // Roll over lowest bit from the next zone as highest bit of this zone.
          if (zone < maxZoneIndex) bitWrite(bitmap[row][zone], 7,
bitRead(bitmap[row][zone+1],0));
        }
      }
    }
  }
}

//=== L O O P ===
void loop() {
  AlphabetSoup();
}

2 comments for "Project Dot Matrix 8x48 With ARDUINO UNO"

  1. Mas mau tanya kalau dot matrix ini di kasih program jam bagaiman dan apakah d tmbah rngkaian nya, Terima kasih

    ReplyDelete
  2. ijin copy projek arduino nya mas..

    ReplyDelete