Lompat ke konten Lompat ke sidebar Lompat ke footer

Arduino Part 11. Cara Menghidupkan Dot Matrix LED Display Arduino

Dot matrix LED display merupakan rangkaian LED yang di susun secara baris dan kolom misalnya 8 X 8. Dot matrix LED display bisa digunakan untuk papan reklame, display angka atau huruf seperti di lift, atau bisa digunakan untuk display lainnya.

Dot matrix LED disusun dari titik-titik LED yang jika diatur penyalaannya maka bisa menampilkan karakter seperti huruf, angka atau gambar. Pada kali ini kita akan membahas cara menghidupkan Dot Matrix LED Display menggunakan Arduino Uno. 

Untuk menghidupkan lampu LED nya maka harus memberikan tegangan yang sesuai pada baris dan kolom. Dengan menata bagian-bagian mana saja LED yang menyala maka Dot Matrix LED bisa menampilakan karakter seperti huruf, angka atau gambar.

Untuk melihat susunan matriks LED secara baris dan kolom bisa di lihat pada gambar di bawah ini :



Pada gambar tersebut penyalaan LED di atur oleh Baris/Row(R) dan kolom (C). Untuk baris (R) akan terhubung dengan kutub anoda semua LED, dan kolom (C) akan terhubung ke kutub katoda semua LED. Jadi jika ingin menghidupkan salah satu LED misalnya LED yang berada di posisi baris 1 (R1) dan kolom 1 (C1) maka berilah tegangan positif (+) ke R1 dan ground (GND) ke C1. Begitu juga caranya untuk menghidupkan lampu LED yang lainnya.

Tegangan LED ini umumnya sekitar 3 volt, jadi kalau anda menggunakan tegangan 5 volt maka sebaiknya dipasang resistor 220 Ω - 330 Ω agar LED tidak cepat putus sehingga usianya akan jauh lebih lama.

Matriks LED memiliki 16 pin. Pembagiannya adalah 8 pin digunakan untuk mengontrol baris (R1 s.d R8) dan 8 pin digunakan untuk mengontrol kolom (C1 s.d C8). Penomoran pin diperlihatakan pada gambar di bawah ini:


Ujicoba pengujian Dot Matrix LED Display

Sekarang sebelum kita menggunakan Dot Matrix LED Display, maka pastikan dulu semua LED bisa menyala dengan normal. Untuk pengujian ini kita membuat program arduino yang sangat dasar sekali sekedar untuk memahami cara menghidupkan Dot Matrix LED Display.

Untuk ujicoba ini siapkan beberapa komponen yaitu:
  • Arduino Uno
  • Dot Matrix LED Display 8X8
  • Resistor 330 Ω
  • Kabel jumper
  • Komputer yang sudah terinstall Arduino IDE

Setelah semua sudah dipersiapkan maka rakitlah rangkaian sesuai gambar skema rangkaian ini:

Lalu ketiklah sketch program arduino ini :

// Program latihan/uji coba dot matrix led display
// oleh hendry kurniawan
const int BARIS1 = 6;
const int BARIS2 = 7;
const int BARIS3 = 8;
const int BARIS4 = 9;
const int BARIS5 = 10;
const int BARIS6 = 11;
const int BARIS7 = 12;
const int BARIS8 = 13;
 
const int KOLOM1 = 14;
const int KOLOM2 = 15;
const int KOLOM3 = 16;
const int KOLOM4 = 17;
const int KOLOM5 = 2;
const int KOLOM6 = 3;
const int KOLOM7 = 4;
const int KOLOM8 = 5;
 
void setup()
{
 pinMode(BARIS1, OUTPUT);
 pinMode(BARIS2, OUTPUT);
 pinMode(BARIS3, OUTPUT);
 pinMode(BARIS4, OUTPUT);
 pinMode(BARIS5, OUTPUT);
 pinMode(BARIS6, OUTPUT);
 pinMode(BARIS7, OUTPUT);
 pinMode(BARIS8, OUTPUT);
 pinMode(KOLOM1, OUTPUT);
 pinMode(KOLOM2, OUTPUT);
 pinMode(KOLOM3, OUTPUT);
 pinMode(KOLOM4, OUTPUT);
 pinMode(KOLOM5, OUTPUT);
 pinMode(KOLOM6, OUTPUT);
 pinMode(KOLOM7, OUTPUT);
 pinMode(KOLOM8, OUTPUT);
}
 
void loop()
{
 digitalWrite(BARIS1, HIGH);
 digitalWrite(BARIS2, HIGH);
 digitalWrite(BARIS3, HIGH);
 digitalWrite(BARIS4, HIGH);
 digitalWrite(BARIS5, HIGH);
 digitalWrite(BARIS6, HIGH);
 digitalWrite(BARIS7, HIGH);
 digitalWrite(BARIS8, HIGH);
 
 digitalWrite(KOLOM1, LOW);
 digitalWrite(KOLOM2, LOW);
 digitalWrite(KOLOM3, LOW);
 digitalWrite(KOLOM4, LOW);
 digitalWrite(KOLOM5, LOW);
 digitalWrite(KOLOM6, LOW);
 digitalWrite(KOLOM7, LOW);
 digitalWrite(KOLOM8, LOW);
 
 delay(1000);  //tunda waktu 1 detik
 
 digitalWrite(BARIS1, LOW);
 digitalWrite(BARIS2, LOW);
 digitalWrite(BARIS3, LOW);
 digitalWrite(BARIS4, LOW);
 digitalWrite(BARIS5, LOW);
 digitalWrite(BARIS6, LOW);
 digitalWrite(BARIS7, LOW);
 digitalWrite(BARIS8, LOW);
 
 digitalWrite(KOLOM1, HIGH);
 digitalWrite(KOLOM2, HIGH);
 digitalWrite(KOLOM3, HIGH);
 digitalWrite(KOLOM4, HIGH);
 digitalWrite(KOLOM5, HIGH);
 digitalWrite(KOLOM6, HIGH);
 digitalWrite(KOLOM7, HIGH);
 digitalWrite(KOLOM8, HIGH);
 
 delay(1000);   //tunda waktu 1 detik
}

Program diatas dipakai hanya cara untuk menguji coba atau mengetes Dot Matrix LED Display dengan tujuan agar anda benar-benar memahami konsep dasar dalam menghidupkan Dot Matrix LED Display. Program tersebut memang sederhana tetapi tidak efektif lagi  kalau ingin memvariasikan karakter yang ingin kita tampilkan atau saat ingin menggunakan lebih dari 1 buah Dot Matrix LED Display. Tetapi sebagai pengetahuan dasar maka sebaiknya anda harus memahaminya terlebih dahulu.

Multiplexing

Untuk pemograman berikutnya yang kita gunakan adalah dengan sistem Multiplexing. Multiplexing pada Dot Matrix LED Display adalah suatu teknik yang digunakan untuk menyalakan lampu LED secara bergiliran dari tiap baris R1,R2,R3,R4,R5,R6,R7,R8 kambali lagi ke proses awal baris lagi.

Proses multiplexing bisa digambarkan seperti gambar berikut :


Terlihat pada gambar bahwa proses multiplexing merupakan proses menyalakan LED yang digilir atau scanning mulai dari baris 1, lalu ke baris 2, dan seterusnya hingga baris 8, setelah selesai maka proses scanning kembali lagi ke awal yaitu baris 1, lalu baris 2, dan seterusnya secara berulang-ulang. Jika proses  multiplexing dibuat lambat maka karakter yang muncul tidak  bermakna, akan tetapi jika waktu multiplexing dibuat sangat cepat maka mata kita akan bisa melihat angka 12 yang tampil.

Apakah anda sudah mendapat gambaran tetang konsep Multiplexing?

Jika masih belum juga maka bisa diilustrasikan pada video dibawah ini.


Jadi pada video tersebut hanya terdapat satu buah saklar yang posisinya bisa berpindah-pindah seperti konsep scanning di multiplexing. Pada saat saklar Multiplexing digerakkan lambat maka kita hanya bisa melihat hanya 1 buah lampu saja yang menyala secara bergantian akan tetapi saat saklar multiplexing dibuat sangat cepat maka kita akan melihat 3 buah lampu menyala secara bersamaan. Supaya nyala 3 lampu tidak berkedip maka harus dibuat frekuensi yang tinggi pada pensaklarannya. Dengan frekuensi tinggi maka mata manusia tidak lagi mampu melihat perubahannya sehingga yang nampak adalah semua lampu menyala secara bersamaan.

Sketch program menampilkan angka 12

Setelah anda memahami konsep multiplexing maka kita akan membuat sketch program yang bisa menampilkan angka 12 menggunakan sistem multiplexing seperti dibawah ini :

// -------------------------------------------------------
//    Contoh untuk menampilkan Angka 12
//    di matriks LED
//    menggunakan multiplexing
//    Oleh : Hendry Kurniawan
// -------------------------------------------------------
 
#include <TimerOne.h>
 
// Baris->           1  2  3  4   5   6   7   8
const int BARIS[] = {-1, 6, 7, 8, 9, 10, 11, 12, 13};
 
//  Kolom->           1   2  3   4  5   6   7   8
const int KOLOM[] = {-1, 14, 15, 16, 17, 2, 3, 4,  5};
 
byte HURUF[] =
{
  B01000110,  // Baris 1
  B11001001,  // Baris 2
  B01000001,  // Baris 3
  B01000010,  // Baris 4
  B01000100,  // Baris 5
  B01001000,  // Baris 6
  B11101111,  // Baris 7
  B00000000   // Baris 8
};
 
int barisSebelum = 8;
 
void setup()
{
  for (int indeks = 1; indeks <= 8; indeks++)
  {
    pinMode(BARIS[indeks], OUTPUT);
    pinMode(KOLOM[indeks], OUTPUT);
 
    digitalWrite(BARIS[indeks], LOW);
    digitalWrite(KOLOM[indeks], HIGH);
  }
 
  // Atur timer
  Timer1.initialize(1000);
 
  // Pasang fungsi yang akan dijalankan
  Timer1.attachInterrupt(tampilkanHuruf);
}
 
void loop()
{
}
 
void tampilkanHuruf()
{
  byte barisSekarang;
 
  if (barisSebelum == 8)
     barisSekarang = 1;
  else
     barisSekarang = barisSebelum + 1;
 
  // Matikan baris sebelumnya
  digitalWrite(BARIS[barisSebelum], LOW);
  for (byte k = 1; k <= 8; k++)
    digitalWrite(KOLOM[k], HIGH);   
 
  // Tampilkan baris sekarang
  for (byte k = 1; k <= 8; k++)
  {
    if (bitRead(HURUF[barisSekarang - 1], 8-k) == HIGH)
      digitalWrite(KOLOM[k], LOW);   
 
    digitalWrite(BARIS[barisSekarang], HIGH);
  }
 
  // Update barisSebelum
  barisSebelum = barisSekarang;
}

Hasilnya akan tampil seperti ini :
 

Pemogrogram di atas menggunakan library TimerOne. Sehingga pada sketch program dimasukkan library tersebut


#include <TimerOne.h>

TimerOne bisa melakukan multiplexing secara periodis. Pada sketch program semua pin di Arduino dihubungkan ke baris-baris pada matriks LED didefenisikan di konstanta BARIS seperti berikut:


const int BARIS[ ] = (-1, 6, 7, 8, 9, 10, 11, 12, 13);

Anda lebih jelas pemakaian nomor pin bisa meihat skema rangkaian di atas.

Angka -1 bersifat dummy (tidak terpakai), karena indeks array dimulai dari 1, sedangkan penomoran baris dimulai dari 1. Oleh karena itu maka :

nilai 6 menyatakan pin yang digunakan pada baris 1
nilai 7 menyatakan pin yang digunakan pada baris 2
nilai 8 menyatakan pin yang digunakan pada baris 3
nilai 9 menyatakan pin yang digunakan pada baris 4
nilai 10 menyatakan pin yang digunakan pada baris 5
nilai 11 menyatakan pin yang digunakan pada baris 6
nilai 12 menyatakan pin yang digunakan pada baris 7
nilai 13 menyatakan pin yang digunakan pada baris 8

Sedangkan untuk KOLOM didefenisikan konstanta KOLOM seperti berikut :


const int KOLOM[ ] = (-1, 14, 15, 16, 17, 2, 3, 4, 5);

nilai -1 menyatakan pin yang tidak digunakan
nilai 14 menyatakan pin yang digunakan pada kolom 1
nilai 15 menyatakan pin yang digunakan pada kolom 2
nilai 16 menyatakan pin yang digunakan pada kolom 3
nilai 17 menyatakan pin yang digunakan pada kolom 4
nilai 2 menyatakan pin yang digunakan pada kolom 5
nilai 3 menyatakan pin yang digunakan pada kolom 6
nilai 4 menyatakan pin yang digunakan pada kolom 7
nilai 5 menyatakan pin yang digunakan pada kolom 8

Sedangkan untuk menampilkan angka 12 berdasarkan data ini :

byte HURUF[ ] =
{
  B01000110,  // Baris 1
  B11001001,  // Baris 2
  B01000001,  // Baris 3
  B01000010,  // Baris 4
  B01000100,  // Baris 5
  B01001000,  // Baris 6
  B11101111,  // Baris 7
  B00000000   // Baris 8
};

Tampilan angka bisa diganti dengan huruf, angka atau karakter lainnya dengan cara mengganti datanya. Gantilah pada sketch program tersebut dengan karakter yang diinginkan. Jadi kalau di isi logika “1” lampu LED menyala dan logika “0” lampu LED padam.

Pada sketch program melibatkan satu variabel global yang bernama barisSebelum, yang pada keadaan awal diberi nilai 8. Baris ini menyatakan bahwa baris yang baru saja diproses (sebelum yang sekarang). Karena jumlah baris hanya 8, maka baris berikutnya yang akan diproses pertama kali adalah baris 1. Kalau barisSebelum berisi baris 1, baris berikutnya yang akan diproses adalah 2.

Difungsi setup(), mula-mula mode setiap pin diatur sebagai keluaran (OUTPUT). Untuk pin baris disi dengan LOW dan pin kolom di isi dengan HIGH. Cara ini berlaku untuk jenis Matriks LED common anode. Setelah itu dilakukan pula pengaturan timer, yang diatur agar menjalankan suatu rutin atau fungsi per 1000 mikrodetik. Perintahnya yaitu :

Timer1.initialize (1000);

Adapun fungsi yang dimaksud adalah tampilkanHuruf, yang diatur melalui :

Timer1.attachInterrupt (tampilkanHuruf);

Berkat rutin inilah, di loop() tidak perlu lagi diisi dengan apa-apa. Oleh karena itu, kode di loop() hanya berupa :

Void loop
{
}

Difungsi tampilkanHuruf (), penentuan baris sekarang yang akan diproses didasarkan pada variabel global barisSebelum dan dinyatakan dalam variabel barisSekarang. Penentuannya dilakukan melalui :

If (barisSebelum == 8) 
   barisSekarang = 1;
else
   barisSekarang = barisSebelum + 1;

Setelah baris sekarang diperoleh, LED pada baris sebelumya perlu dimatikan. Hal ini dilakukan melalui :

digitalWrite (BARS[barisSebelum], LOW);
for (byte k = 1; k <= 8; k++)
  digitalWrite (KOLOM[k], HIGH);

Setelah itu, LED pada baris sekarang perlu dihidupkan kalau nilai bersangkutan di array HURUF bernilai 1. Pernyataan didalam programnya adalah :

for (byte k = 1; k <= 8; k++)
{
     If (bitRead (HURUF [barisSekarang  - 1], 8-k) == HIGH)
     digitalWrite (KOLOM[k], LOW);
     digitalWrite (BARIS[barisSekarang], HIGH); 
}

Terakhir, nilai barisSekarang perlu disalin ke barisSebelum supaya pada proses berikutnya, posisi baris sekarang bisa dibentuk kembali.

Jadi yang terjadi sesungguhnya adalah penyalaan dan pematian LED-LED pada setiap baris secara bergantian atau multiplexing yang berlangsung per 1000 mikrodetik (0,001 detik) sehingga mata manusia tidak mampu melihat nyala LED yang bergantian secara cepat, yang terlihat oleh mata LED mampu menyala secara bersamaan.

Itu saja tentang dasar penyalaan Matriks LED dan kedepan kita akan bahas pengendalian Dot matrix LED menggunakan driver modul MAX72XX yang bisa menyederhanakan perkabelan banyak pada Matriks LED dan memudahkan dalam pemograman jika menampilkan banyak karakter. Terimakasih yang telah membaca, silahkan isi kolom komentar jika ada yang perlu kita diskusikan.

5 komentar untuk "Arduino Part 11. Cara Menghidupkan Dot Matrix LED Display Arduino"

  1. kok pelit ya.... ga bisa di kopi kang....

    BalasHapus
  2. mantaps blognya Lengkap sekali untuk tampilan angka dot matriks pesan error di #include
    kenapa pak ya saya pake arduino droid

    BalasHapus
  3. pak hendry kok error di #include kenapa ya mohon pencerahannya, program flip-flop jalan tidak ada kendala terimakasih

    BalasHapus
  4. Terimakasih, bagus sekali bagi pemula seperti saya

    BalasHapus
  5. Saya ingin bisa membuat papan skor bulutangkis digital dengan LED dot metric.Mohon dibimbing

    BalasHapus