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 LED. Matriks 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
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
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();
}







Mas mau tanya kalau dot matrix ini di kasih program jam bagaiman dan apakah d tmbah rngkaian nya, Terima kasih
ReplyDeleteijin copy projek arduino nya mas..
ReplyDelete