Saturday, April 23, 2016

Menampilkan Text Dot Matrix P10 Display (DMD) menggunakan Arduino

Kali ini saya membagikan tutorial tentang Arduino yang berjudul Menampilkan Text dengan Arduino + Modul P10. Sebelum melangkah lebih jauh saya akan meberikan penjelasan sedikit, tentang tutorial kali ini. Ditutorial ini saya menggunakan Arduino Mega 2560 dan Librari DMD, untuk librari bisa didownload dilink dibawah nanti. Dengan librari ini anda akan lebih mudah membuat program untuk menampilkan text dengan banyak fungsi -fungsi dari librari tersebut. Contoh bisa dilihat digambar berikut.

Demo Arduino P10 Fans Electronics

Disini saya menggunakan DMD2 karena Arduino Mega2560 belum support dengan DMD1, jika anda menggunakan Arduino UNO anda bisa menggunakan keduanya  ( ya sesuai selerah ). Oke sekarang kepembuatan konektor kabelnya, skematik nya dapat dilihat disini. Ini contoh buatan saya sendiri dengan menggunakan PCB dotmatrix.

DMD Conector Arduino P10 Fans Electronics

Untuk versi board DMD originalnya seperti ini.

DMD Conector P10 Fans Electronics

Oke, untuk layout PCB DMD Conectornya menyusul (saya update dilink download dibawah, mohon diingatkan jika belum ada). Untuk pasangan konektornya seperti ini.

  

Pasang kabel sesuai arah panah pada P10 jangan sampai terbalik, dan beri tegangan P10 sebesar 5V.


Nah jika sudah anda dapat upload program ke arduino, gunakan program yang ada di contoh library atau anda dapat mengupload program dibawah. ( ini menggunakan DMD 2, jika anda menggunakan DMD 1 maka gunakan contoh DMD 1 ).

/*
  Countdown on a single DMD display
 */

#include <SPI.h>
#include <DMD2.h>
#include <fonts/Arial14.h>

const int COUNTDOWN_FROM = 12;
int counter = COUNTDOWN_FROM;

SoftDMD dmd(1,1);  // DMD controls the entire display
DMD_TextBox box(dmd, 0, 2);  // "box" provides a text box to automatically write to/scroll the display

// the setup routine runs once when you press reset:
void setup() {
  Serial.begin(9600);
  dmd.setBrightness(255);
  dmd.selectFont(Arial14);
  dmd.begin();
}

// the loop routine runs over and over again forever:
void loop() {
  Serial.print(counter);
  Serial.println(F("..."));
  box.print(' ');
  box.print(counter);
  box.println(F("..."));
  counter--;
  delay(1000);

  if(counter == 0) {
    for(int i = 0; i < 3; i++) {
      dmd.fillScreen(true);
      delay(500);
      dmd.clearScreen();
      delay(500);
    }
    box.clear();
    counter = 12;
  }
}

Dari program diatas, P10 Display akan menampilkan angka menghitung mundur dari 12 samapi dengan 1 dan diplay akan berkedip 3 kali sebelum kembali menghitung. Nah anda dapat melihat video demonya di chanel youtube dibawah ini, semoga bermanfaat tutorial kali ini. Salam Solder!


Password Zip / Link : Fans-Electronics.com

45 comments:
Write komentar
  1. gan kalo display text saya terlihat inverse background gmn cara buat normal? sama pin MISO dan CLK arduino mega kan di pin 51 dan 52 apa konektornya g di rubah

    ReplyDelete
    Replies
    1. Kalau mas menggunakan arduino mega.. gunakan library DMD2, karena DMD 1 belum support dengan Arduino mega.. dan untuk pinnya tetep sesuai dengan skematik mas tidak berubah..

      Delete
  2. bang ako mau inverse gmna. saya pake p10smd, harus di inverse

    ReplyDelete
    Replies
    1. Maksudnya inverse gimana ya gan, mungkin bisa lebih detail maksudnya??

      Delete
  3. Mas,kl saya mau merubah font 5x7 saya rubah menjadi 5x9 gmana???

    ReplyDelete
    Replies
    1. Untuk font, anda bisa melihat pada folder libray DMD, disana terdapat folder font dan terdapat beberapa file font yang tersedia.. Namun jika anda ingin membuat sendiri, saya masih belum bisa memberikan tutorialnya. karena saya pun masih mempelajarinya..

      Delete
  4. kalau tampilannya terbalik/negatif (semua pixel hidup kecuali posisi text) . gmn solusinya mas admin?

    ReplyDelete
    Replies
    1. Oh, untuk masalah ini saya belum mendapat solusinya, mungkin nanti kalau saya sudah mendapatkan saya tulisakn artikelnya diblog ini. mungkin anda bisa tanya di website resmi DMD libray disini >> http://bit(dot)ly(slash)2kjf8a7

      Delete
    2. maap om. numpang nimbrug. udah nemu solusi yg invert gitu? font mati, backgroundnya nyala. soalnya sy kena juga

      Delete
  5. bang minta coding untuk selain text bejalan misalnya animasi minta tolong dlu bang

    ReplyDelete
    Replies
    1. Untuk contoh2 program lain, anda bisa lihat pada examples pada library arduino. Karena saya dasar codingnya dari sana.. mungkin nanti kalau sempat saya tuliskan artikel funsi-fungsi dari library Arduino

      Delete
  6. bang mnta tolong jelasin dlu coding ini misalnya coding untuk blueooth dri sini kesini coding untuk tulisan ini kesini misalnya mnta tlong jelasin dlu bang

    #include
    #include
    #include
    #include "SystemFont5x7.h"
    #include "Arial_black_16.h"

    #define DISPLAYS_ACROSS 2
    #define DISPLAYS_DOWN 1
    DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
    #define max_char 100
    char message[max_char];
    char r_char;
    byte index = 0;
    int i;

    void ScanDMD() {
    dmd.scanDisplayBySPI();
    }

    void setup(void) {
    Timer1.initialize( 5000 );
    Timer1.attachInterrupt( ScanDMD );
    dmd.clearScreen( true );
    Serial.begin(9600);
    }

    void loop(void) {
    if(Serial.available()){
    for(i=0; i<99; i++){
    message[i] = '\0';
    }
    index=0;
    }
    while(Serial.available() > 0){
    if(index < (max_char-1)) {
    r_char = Serial.read();
    message[index] = r_char;
    index++;
    message[index] = '\0';
    }
    }
    dmd.clearScreen( true );
    dmd.selectFont(Arial_Black_16);

    dmd.drawMarquee(message, max_char,(32*DISPLAYS_ACROSS)-1 ,0);

    long start=millis();
    long timer=start;
    boolean ret=false;
    while(!ret){

    if ((timer+30) < millis()) {
    ret=dmd.stepMarquee(-1,0);
    timer=millis();
    }
    }
    }

    sangat dtunggu bang

    ReplyDelete
    Replies
    1. Masnya mau bikin Running Text Update Via Android kah?? Kalau saya bahas disini agak panjang, habis ini saya tuliskan artikel project tersebut. dimohon untuk menunggu.. atau kalau memang keburu bisa diskusi di forum facebook kami..

      Delete
  7. coding nya kurang paham bang mohon penjelasan coding yang diatas aja misalnya
    #include
    #include
    #include
    #include "SystemFont5x7.h"
    #include "Arial_black_16.h"
    coding ini untuk coding text

    ini untuk coding led matrix nya misalnya bang, tolong jelasin dulu bang
    #define DISPLAYS_ACROSS 2
    #define DISPLAYS_DOWN 1
    DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
    #define max_char 100
    char message[max_char];
    char r_char;
    byte index = 0;
    int i;

    ReplyDelete
  8. Funsi #include adalah menyertakan/menyisipkan file lain / library

    Fungsi sintax #define adalah mendifinisikan sesuatu, pada program diatas angka 2 difinisikan sama dengan DISPLAY_ACROSS. Jadi pada pada program

    DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

    bisa juga ditulis
    DMD dmd(2, 1); // menggunakan 2 baris modul P10 dengan tinggi 1 buah

    untuk char adalah variable character berisi 1 byte data nilai character. Namun disitu juga terdapat variable char array( message[] ) itu sama saja cuma sifatnya array jadi dalam variable tersebuh isinya banyak tegantung pada array keberapa anda panggil. dan byte adalah variable nilai bilangan tunggal -255 s/d 255. Somoga bisa menjawab pertanyaan tersebut.

    ReplyDelete
  9. nanya sekali lagi bang , disini kan saya memakai bluetooth hc 05 yang saya tanyakan apakah coding bluetooh itu ada di bluetooth apa sudah ada di arduino itu sendiri dan faragraf mana coding bluetooth nya terimakasih bang

    ReplyDelete
  10. Tanya saja gpp mas:D haha.. Untuk modul bluetooth kan menggunkan komunikasi Serial ( RX dan TX) jadi programnya juga menggunakan serial.. Pada contoh masnya kan ada coding

    Serial.availble > 0 // itu untuk membaca port serial ada data masuk atau tidak dan juga terdapat
    Serial.read(); // ini untuk membaca data yang masuk

    masnya juga bisa menggunakan serial monitor untuk merubah text tanpa harus menggunakan modul bluetooth, semoga membantu

    ReplyDelete
  11. hhah, oke lah bang sangat-sangat membantu sekali, jadi tidak ada coding khusus di coding arduino di atas iya bang apa gimana

    ReplyDelete
    Replies
    1. Tidak ada yang khusus, semua sudah ada pada file library kalau memang itu fungsi dari library, tp kalau bawaan arduino, bisa dilihat pada menu reference

      Delete
  12. jadi coding bluetooh hc 05 sda dibaca oleh aplikasi arduino IDE di library iya bang apa masih harus di ketik ulang dia arduino

    ReplyDelete
    Replies
    1. ya pakai Serial. blabla.. dan jangan lupa samakan Baudrate arduino dan BT HC05, biasanya defaultnya pakai 9600

      Delete
  13. nnya lg bang max tex yang bisa ditampilkan di led matrix 100 kan tpi knapa pas di tampilkan cuma 64 karakter

    ReplyDelete
    Replies
    1. Kurang tau ya?? Cuma biasanya untuk running yang pertama ada errornya??

      Delete
  14. bang untuk jalur yang digunakan 0 apa 1 misal nya 1 bertemu satu led menyala dan strsnya

    ReplyDelete
  15. untuk led mtrix nya bang itu kan untuk menghidupkan led itu mengunakan simbol 0 dan 1 merubah biner ke hexsa yang mau saya tanyakan bang supaya led hidup 1 bertemu 1 led baru hidup apa 1 bertemu 0 baru hidup

    satu lagi bang 9600 itu untuk waktu apa digunakan untuk apa

    ReplyDelete
    Replies
    1. Mohon maaf mas, bisa mungkin bisa dikasih sedikit potongan program bagian mana.. saya masih belum paham maksudnya... dan untuk 9600 itu adalah Baudrate. kecepatan aliran data pada komunikasi serial... Harus disamakan antara hardware 1(bluetooth) dan 2(arduino)

      Delete
  16. oke bang makasih sangat atas penjelasan nya sangat membantu, tapi tolong jelasin sedikit lagi coding bluetooth ini bang

    while(Serial.available() > 0){
    if(index < (max_char-1)) {
    r_char = Serial.read();
    message[index] = r_char;
    index++;
    message[index] = '\0';
    }

    ReplyDelete
    Replies
    1. while(Serial.available() > 0){
      Berfungsi menunggu data yang masuk dari serial komunikasi..
      jika terdapat data masuk, data akan dipindahkan ke variable r_char,
      kemudian dipindah kan ke variable char arrat message[]..
      varibale index berfungsi memindah kotak array pada varible massage[]

      Delete
  17. minta bantuannya mas. untuk menentukan brightness gmn?

    ReplyDelete
    Replies
    1. gunakan fungsi dmd.setBrighness(255);
      rubah nilai 255.. range 0 s/d 255
      ini berlaku, jika anda menggunakan library DMD2, namum untuk DMD1 tidak bisa..

      Delete
  18. mas , minta bantuanya untuk program stopwatch apakah sama sperti diatas ? mungkin ada yang dirubah ?

    ReplyDelete
    Replies
    1. Hampir sama mas untuk penampilananya. cuma kreasi masnya saja mau gimana modelnya.. tinggal ditampilkan variable nilai dari stopwatchnya

      Delete
  19. siang ada yang untuk ESP8266 / node MCU?

    ini panel saya udah bisa cuman redup, terang, redup, terang gt terus, padahal pakai charger HP yang bagus dan coba power supply yang 20A jg g bs

    ReplyDelete
  20. Buka library --> pilih aja yg mana DMD atau DMD2 Library.
    Di file DMD.h atau DMD2.h
    Ganti semua void dari GRAPHIC_ON menjadi GRAPHIC_INVERSE

    ReplyDelete
  21. Assalamu'alaikum mas Indra,
    Minta bantuannya mas, kl misal mau ngasih buzzer di kedipan led yg terakhir itu gmn mas cara, kl gk keberatan minta sketch nya ya mas, yg sudah jd + buzzer, hehe... Terima kssih

    ReplyDelete
  22. Assalamu'alaikum mas Indra,
    Minta bantuannya mas, kl misal mau ngasih buzzer di kedipan led yg terakhir itu gmn mas cara, kl gk keberatan minta sketch nya ya mas, yg sudah jd + buzzer, hehe... Terima kssih

    ReplyDelete
  23. Mas Indra,Cara nya gmn mas, aktifkan buzzer dan matikan, maklumat baru belajar mengenal arduino ini mas,


    /*
    Countdown on a single DMD display
    */

    #include
    #include
    #include

    const int COUNTDOWN_FROM = 12;
    int counter = COUNTDOWN_FROM;

    SoftDMD dmd(1,1); // DMD controls the entire display
    DMD_TextBox box(dmd, 0, 2); // "box" provides a text box to automatically write to/scroll the display

    // the setup routine runs once when you press reset:
    void setup() {
    Serial.begin(9600);
    dmd.setBrightness(255);
    dmd.selectFont(Arial14);
    dmd.begin();
    }

    // the loop routine runs over and over again forever:
    void loop() {
    Serial.print(counter);
    Serial.println(F("..."));
    box.print(' ');
    box.print(counter);
    box.println(F("..."));
    counter--;
    delay(1000);

    if(counter == 0) {
    for(int i = 0; i < 3; i++) {
    dmd.fillScreen(true);
    delay(500);
    dmd.clearScreen();
    delay(500);
    }
    box.clear();
    counter = 12;
    }
    }

    ReplyDelete
    Replies
    1. Mematikan dan menyalakan buzzer bisa menggunakan perinta digitalWrite(pin_buzzer,HIGH);
      HIGH = 1, LOW = 0, disesuaikan logic dengan outputnya

      Delete
  24. Gan itu udah ada bluetooth
    Nya?

    ReplyDelete
  25. jasa design skematic dan cetak pcb apa bisa om..? kalo bisa minimal brp cm2

    ReplyDelete

>>Kami sangat menerima Kritik dan Saran dari para pembaca
>>Tutorial download terdapat navbar bagian atas

Jasa Pembuatan Project Elektro