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:
// Program latihan/uji coba dot matrix led display// oleh hendry kurniawanconst 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 :
Apakah anda sudah mendapat gambaran tetang konsep
Multiplexing?
Jika masih belum juga maka bisa diilustrasikan pada
video dibawah ini.
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 :
// di matriks LED
// menggunakan multiplexing
// Oleh : Hendry Kurniawan
// -------------------------------------------------------
const int BARIS[] = {-1, 6, 7, 8, 9, 10, 11, 12, 13};
const int KOLOM[] = {-1, 14, 15, 16, 17, 2, 3, 4, 5};
{
B01000110, // Baris 1
B11001001, // Baris 2
B01000001, // Baris 3
B01000010, // Baris 4
B01000100, // Baris 5
B01001000, // Baris 6
B11101111, // Baris 7
B00000000 // Baris 8
};
{
for (int indeks = 1; indeks <= 8; indeks++)
{
pinMode(BARIS[indeks], OUTPUT);
pinMode(KOLOM[indeks], OUTPUT);
digitalWrite(KOLOM[indeks], HIGH);
}
Timer1.initialize(1000);
Timer1.attachInterrupt(tampilkanHuruf);
}
{
}
{
byte barisSekarang;
barisSekarang = 1;
else
barisSekarang = barisSebelum + 1;
digitalWrite(BARIS[barisSebelum], LOW);
for (byte k = 1; k <= 8; k++)
digitalWrite(KOLOM[k], HIGH);
for (byte k = 1; k <= 8; k++)
{
if (bitRead(HURUF[barisSekarang - 1], 8-k) == HIGH)
digitalWrite(KOLOM[k], LOW);
}
barisSebelum = barisSekarang;
}
Pemogrogram di atas menggunakan library TimerOne.
Sehingga pada sketch program dimasukkan library tersebut
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:
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 :
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 :
{
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 :
{
}
Difungsi tampilkanHuruf (), penentuan baris sekarang yang akan diproses didasarkan pada variabel global barisSebelum dan dinyatakan dalam variabel barisSekarang. Penentuannya dilakukan melalui :
barisSekarang = 1;
else
barisSekarang = barisSebelum + 1;
Setelah baris sekarang diperoleh, LED pada baris sebelumya perlu dimatikan. Hal ini dilakukan melalui :
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 :
{
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.
kok pelit ya.... ga bisa di kopi kang....
BalasHapusmantaps blognya Lengkap sekali untuk tampilan angka dot matriks pesan error di #include
BalasHapuskenapa pak ya saya pake arduino droid
pak hendry kok error di #include kenapa ya mohon pencerahannya, program flip-flop jalan tidak ada kendala terimakasih
BalasHapusTerimakasih, bagus sekali bagi pemula seperti saya
BalasHapusSaya ingin bisa membuat papan skor bulutangkis digital dengan LED dot metric.Mohon dibimbing
BalasHapus