DMD (dot matrix display) yang dikontrol dengan arduino dengan segala keterbatasannya memiliki permasalahan saat panel DMD disusun dalam lebih dari 4 panel. Flicker terjadi karena proses pengiriman data serial dari arduino harus mengantri sekian lama sehingga pergantian aktifasi baris per baris tertangkap oleh mata seperti berayun (berkedip) dan tentu membuat mata tidak nyaman.
Untuk itu saya melakukan improvisasi terhadap library arduino –DMD2– dengan prinsip kerja satu clock untuk lebih dari satu baris. contohnya untuk ukuran panel 4 kolom 2 baris kelompok DMD dibagi menjadi 2 bagian (baris 1 dan baris 2) dengan entri data yang sama setiap clock-nya.
Kelebihan alat DMD2 arduino:
- Sensor DHT11 untuk memantau keadaan suhu dan kelembaban sekitar
- Database waktu sholat 5 waktu (statis) dan dilengkapi buzzer yang menandakan waktu sholat telah masuk.
Komponen yang dibutuhkan :
- 8 Panel P10
- Arduino Mega 2560
- RTC DS1307
- DHT11
- Buzzer
DS1307 dapat diganti dengan DS3231 untuk keperluan presisi RTC.
berikut skema-nya :
berserta sketch atau program nya:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | #include <DMD2.h> #include <fonts/SystemFont5x7.h> #include <fonts/Arial14.h> #include <TimeLib.h> #include <DS1307RTC.h> #include "DHT.h" byte DataPins[2] = {33, 35}; //pin jalur out SoftDMD dmd(4, 2, 23, 25, 27, 31, 29, 2, DataPins); //kolom, baris, OE, A, B, SCK, CLK, jumlah jalur out, pin jalur out //SoftDMD dmd(4,2,23,25,27,31,29,33); //standard DMD_TextBox box(dmd, 0, 0, 78, 32); DHT dht(A0, DHT11); String namaSholat[] = { " Subuh" , " Zuhur" , " Asar" , " Maghrib" , " Isya" }; byte waktuSholat[][2] = {{5, 12}, {12, 32}, {15, 45}, {18, 35}, {19, 44} }; #define waktunyaSholat 1 #define pesanSMS 2 int n = 123; byte lastSecond = 60; byte lastDay = 32; byte lastH = 60; byte lastT = 32; String Sholat; String pesanDisplay; byte pesan; int buzzer = 8; bool buzz; byte buzzCounter; void setup() { Serial.begin(9600); Serial.println( "Running text dengan Arduino bebas kedip" ); dht.begin(); dmd.setBrightness(255); dmd.begin(); pesan = pesanSMS; pesanDisplay = " Selamat\n datang" ; dmd.selectFont(Arial14); box.print(pesanDisplay); } void loop() { tmElements_t tm ; byte h = (byte)dht.readHumidity(); byte t = (byte)dht.readTemperature(); RTC.read( tm ); if (pesan == waktunyaSholat) { buzzCounter++; if (!(buzzCounter % 32)) { buzz = !buzz; digitalWrite(buzzer, buzz); pinMode(buzzer, OUTPUT); } } if ( tm .Second != lastSecond) { String waktu = "" ; if ( tm .Hour < 10) waktu += "0" ; waktu += tm .Hour; waktu += ":" ; if ( tm .Minute < 10) waktu += "0" ; waktu += tm .Minute; waktu += ":" ; if ( tm .Second < 10) waktu += "0" ; waktu += tm .Second; lastSecond = tm .Second; dmd.selectFont(SystemFont5x7); dmd.drawString(80, 0, waktu); if ((pesan == waktunyaSholat) && ( tm .Second >= 58)) { box.clear(); dmd.selectFont(Arial14); box.print(pesanDisplay); pesan = pesanSMS; digitalWrite(buzzer, LOW); } else if ( tm .Second <= 1) { for (byte i = 0; i < 5; i++) { if ((waktuSholat[i][0] == tm .Hour) && (waktuSholat[i][1] == tm .Minute)) { Sholat = namaSholat[i]; box.clear(); dmd.selectFont(Arial14); box.println( " Sholat" ); box.print(Sholat); pesan = waktunyaSholat; } } } } if ( tm .Day != lastDay) { String tanggal = "" ; if ( tm .Day < 10) tanggal += "0" ; tanggal += tm .Day; tanggal += "/" ; if ( tm .Month < 10) tanggal += "0" ; tanggal += tm .Month; tanggal += "/" ; if (tmYearToCalendar( tm .Year) < 10) tanggal += "0" ; tanggal += tmYearToCalendar( tm .Year); lastDay = tm .Day; dmd.selectFont(SystemFont5x7); dmd.drawString(80, 8, tanggal); } if ((h != lastH) || (t != lastT)) { String suhu = "" ; if (t < 10) suhu += "0" ; suhu += t; suhu += "'C " ; if (h < 10) suhu += "0" ; suhu += h; suhu += "%" ; lastT = t; lastH = h; dmd.selectFont(SystemFont5x7); dmd.drawString(80, 16, suhu); } } |
dokumentasi Galeri DMD arduino anti flicker
Library yang sudah dimodifikasi: DMD-GL
Jika menginginkan jadwal sholat yang dinamis (waktu matahari) bisa menggunakan library “PrayerTimes.h”.
mas,tolong minta skema arduino ke display p4.75 dong..trmksh.
DMD/running text yang digunakan dalam proyek ini memakai pinout/interface HUB12,
P4.75 yang mau dipake menggunakan hub type apa, misalnya HUB08 HUB75
klo hub08 gmn wiring nya gan?
Belum pernah program hub08, baru hub12 dan hub75
Assalamualaikum, kang asep kalau pake dmd3 gmana ngerubah nya ya, terus untuk ngerubah kecepatan transfer dibagian mana ya, udah nyoba kalau lebih dari 3 panel suka ada kedip2 line
kodingan ini me-modifikasi library dmd2,
untuk dmd3 jika ingin menggunakan teknik ‘multi line data’ ini mesti modif juga (defaultnya spi saja)
di dmd3 fungsi scan ada di ‘void DMD3::refresh()’
mohon izin kang asep , saya mau bikin video tutor dengan koding hasil modifikasi kang asep , apakah di izinkan ?
ya, silahkan
Kang asep
Mau tanya file library yang di modif itu di file yg mana dan baris keberapa ya, saya mau coba buat 4 baris ke bawah
dmd.cpp bagian scanDisplay() softSPI
gan eror disini #include cara mengatasinya gimanan
install library yang diperlukan
kok ngk bisa ya masuk library nya ke Arduino dan error
library DMD-GL.zip bisa dinstall melalui arduino
atau manual : extract, lalu copy paste ke mydocument/arduino/libraries
SoftDMD doent not type, gimana mas?
gunakan library yang sudah di modif, bisa di download di link yang ada di halaman ini
buat esp enggak bisa mas ya?
ngga bisa pake metode dua jalur ini
kalo pake esp, bisa menggunakan library standar saja, karena clock esp lebih cepat
Bang mw tnya..untuk timbangn digital..disply nya sy mw ganti dengan modul p10..gimana cara nya bang..maklum pemula
contoh menampilkan text di modul p10 sudah ada di example library, pilih saja salah satu library standar : DMD, DMD2, DMD3
tinggal gabungin saja dengan koding timbangan
Cara hapus tulisan selain box.clear gimana bang?
dmd.drawBox(x1,y1,x2,y2);
bang kalo mau buat 2 jalur . 6×1 dan 6×1 gimana bang
secara prinsip ngga bisa menggunakan library modif ini, hanya efektif untuk 2 baris
Mas coding di atas digunakan untuk esp8266
Ngga bisa, librarynya khusus arduino AVR