back to top

Dot Matrix ve Arduino ile Saat Yapalım

Herkese merhabalar! Bu yazımızda önceki yazılarımızda yakından tanıdığımız dot matrixlerden yararlanarak bir saat projesi gerçekleştireceğiz. Eğer dot matrixler ile ilgili önceki yazımıza göz atmadıysanız öncelikle onu okumanızı tavsiye ederiz.


Dot matrix üzerinde saat dışında DHT11 sensörünü kullanarak ısı ve nem değerlerini de görebileceğiz. Aynı zamanda projeyi kutulayarak devamlı olarak kullanabilirsiniz. Biz kutulama yapmadığımızdan dolayı Arduino Uno kullandık, ancak projenizi sabit hale getirecekseniz Arduino Nano kullanmanızı tavsiye ederiz.

Malzemeler

NOT: Eğer projenizi bir adaptör ile beslemeyecekseniz 9 V pil ve pil yuvasını da malzemelerinize eklemelisiniz. Projenizi kutulamayı düşünürseniz proje kutularına göz atabilirsiniz.


PİN BAĞLANTILARI
Dot Matrix PinArduino PinDHT11 PinArduino PinRTC PinArduino Pin
CLKpin 13DATApin 2CLKpin 6
DATApin 11VCC5 VDATpin 7
CSpin 10GNDGNDRSTpin 8
VCC5 VVCC5 V
GNDGNDGNDGND

Proje Kodu

Dot matrix yazısında yaptığımız projede LedControl kütüphanesini kullanmıştık. Bu projede ise daha fazla fonksiyona sahip, işimizi çok daha az kod kullanarak çözmemizi sağlayacak bir kütüphane kullanacağız. Dot matrixi kullanmamızı sağlayacak MD_MAX72XX ve MD_Parola kütüphaneleriyle beraber DHT sensörü ve RTC modülü kütüphanelerini kodumuza ekliyoruz.

Asıl kodumuzu eklemeden önce RTC modülümüzün saat ayarını yapmamız gerekiyor. Kod içerisindeki myRTC.setDS1302Time() fonksiyonu içine güncel tarih ve saat değerlerini doğru sırayla giriyoruz. Ayarlamayı yaptıktan sonra seri monitör yardımıyla doğru değerleri girip girmediğimizi kontrol ediyoruz.

#include <virtuabotixRTC.h>     //Kütüphanemizi ekliyoruz

virtuabotixRTC myRTC(6, 7, 8); //pin tanımlamaları
void setup() {
Serial.begin(9600);

//Bu kısımda saat ayarlamasını yapıyoruz
myRTC.setDS1302Time(00, 59, 23, 5, 10, 3, 2019); //saniye, dakika, saat, haftanın günü, gün, ay, yıl
}
void loop() {
myRTC.updateTime();
Serial.print(myRTC.dayofmonth);
Serial.print("/");
Serial.print(myRTC.month);
Serial.print("/");
Serial.print(myRTC.year);
Serial.print(" ");
Serial.print(myRTC.hours);
Serial.print(":");
Serial.print(myRTC.minutes);
Serial.print(":");
Serial.println(myRTC.seconds);
delay(1000);
}
Dot Matrix Saat Kodu

Saat ayarımızı yaptıktan sonra proje kodumuzu Arduino’ya yüklüyoruz.

#include <MD_Parola.h>       //Kütüphanelerimizi ekliyoruz
#include <MD_MAX72xx.h>
#include <virtuabotixRTC.h>
#include "DHT.h"

#define DHTPIN 2 //DHT pin tanımlaması
#define DHTTYPE DHT11 //DHT modeli tanımlaması
DHT dht(DHTPIN, DHTTYPE);

int CLK = 6; //RTC modülümüzün pin bağlantılarını tanımlıyoruz
int DAT = 7;
int RST = 8;
virtuabotixRTC myRTC(CLK, DAT, RST);

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4 //4 Dot Matrix kullanacağımızdan dolayı 4 seçiyoruz
#define CLK_PIN 13 //Dot matrix board pin tanımlamaları
#define DATA_PIN 11
#define CS_PIN 10

MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

const long int WAIT_TIME = 1000;
void setup()
{
P.begin();
dht.begin();
}
void loop()
{
myRTC.updateTime(); //Zaman güncellemesi
int h = dht.readHumidity(); //Nem değerini alıyoruz
int t = dht.readTemperature(); //Sıcaklık değerini alıyoruz
if(myRTC.minutes<10 && myRTC.minutes>=0)
P.print(" " + String(myRTC.hours) + ":" + "0" + String(myRTC.minutes)); //Dakika değeri 0-9 aralığındaysa formatı bozmamak için başına 0 ekleyerek yazdırıyoruz
else
P.print(" " + String(myRTC.hours) + ":" + String(myRTC.minutes)); //Saat yazdırma
delay(2000);
P.print(" "+String(t)+" C"); //Sıcaklık değeri yazdırma
delay(2000);
P.print(" %" + String(h)); //Nem değeri yazdırma
delay(2000); //2 saniye bekleme
}

Bir tavsiye: Dot matrixin önüne yarı saydam bir nesne koyarsanız çok daha net ve güzel bir görüntü elde edebilirsiniz.

Projemizi tamamladık, bu haliyle yalnızca saat, nem ve sıcaklık değerlerini gösteriyor. Bu projeyi nasıl geliştirebiliriz, başka ne gibi eklemeler yapabiliriz? Benim aklıma bir alarm modu eklemek geldi mesela, yorumlarda fikirlerinizi bekliyoruz. Aynı zamanda dot matrixlerle yapılabilecek proje fikirlerinizi de yorumlarda bekliyorum 🙂 Başka bir projede görüşmek dileğiyle, hoşça kalın!

Son Çıkan Yazılar

85 YORUMLAR

    • Merhaba, örnekler kısmından kullandığımız kütüphanedeki örnek uygulamalara bakabilirsiniz.
      Dosya->Örnekler->MD_Parola->Parola_Scrolling Örneklerdeki uygulamalar yardımcı olacaktır.

    • Merhaba, Fritzing şemasından mı bahsediyorsunuz? Bağlantı şeması dışında şemanın altında pin bağlantılarını gösteren bir tablo ekledim oradan da yararlanabilirsiniz.

  1. merhaba tarih göstermiyordu tarihi göstermesi için aşağıdaki kodu yükledim ama tarih sığışmıyor.tarih kısmını kayan yazı yapmak için ne yapmam lazım.
    P.print(“” + String(myRTC.dayofmonth) + “.” + String(myRTC.month) + “.” + String(myRTC.year)); //tarih yazdırma
    delay(5000);

    • Merhaba, örnekler kısmından kullandığımız kütüphanedeki örnek uygulamalara bakabilirsiniz.
      Dosya->Örnekler->MD_Parola->Parola_Scrolling Örneklerdeki uygulamalar yardımcı olacaktır. Bizim koda uyarlayarak kullanabilirsiniz.

    • Merhaba, modülün iki tarafında da pin olduğunu göreceksiniz. Tek bir tanesi için bizim şemadaki bağlantıyı yaptıktan sonra geri kalan üçünü ard arda birleştirmeniz gerekiyor. Modülün öbür yanında boşta kalan pinleri diğerinin giriş pinine takarak devam etmeniz gerekiyor. CLK, CS, VCC ve GND pinleri aynı olacak fakat DOUT pinlerini diğer modülün DIN pini ile birleştirmeniz gerekiyor. Bunları uygulayarak ard arda istediğiniz kadar bağlayabilirsiniz.

    • Merhaba, hatalar için şu yazıyı inceleyebilirsiniz: maker.robotistan.com/arduino-hata/

      COM portunu doğru seçtiğinizden emin olun.

    • Saat için soruyorsanız saat ayarını bir kere yaptıktan sonra modül üzerindeki pil sayesinde güncel saat hafızada saklanır. Tekrar tekrar kod atmanıza gerek yok.

  2. BAĞLANTILARI TEK-TEK MULTİ METREYLE KONTROL ETTİM KISADEVRE FELAN YOK BAĞLANTILARIM DOĞRU SAAT 0:12 BU ŞEKİL GÖSTERİYOR AMA SAYIYOR NEM VE SICAKLIK DA 0 YAZIYOR DHT ‘NIN LEDİ YANIYOR AMA DEGER LER YANLIŞ ???? NEDEN ACABA

    • Merhaba,
      Yanlış bir saat değeri alıyorsanız ilk kodu kullanarak ayarlamayı tekrar yapın ve kontrol edin. DHT kısmında da 0 almanızın sebebi sensörden veri alamamanız, bağlantıları tekrar kontrol etmenizde fayda var.

  3. Merhaba,
    Saat modülünün saat ayarının nasıl yapacaz? Ayrıca iki kodu birlikte mi kullanıyoruz yoksa sadece dot matrix saat kodu yazan ikinci kodu mu kullanıyoruz? Yardımcı olur musunuz?

    • Merhaba,
      İlk verdiğim kodu kullnarak saatinizi ayarlayın, sonrasında asıl kod olan ikinci kodu yükleyin. Saati ayarladıktan sonra ilk kodla bir daha işinizi olmayacak. Kolay gelsin 🙂

    • Bu projede kayan yazı kullanmadık fakat kütüphane içerisindeki örneklerden yararlanabilirsiniz.
      Dosya->Örnekler->MD_Parola->Parola_Scrolling Örneklerdeki uygulamalar yardımcı olacaktır.

    • Kısa devre durumlarından her zaman kaçınmak lazım ama altında iletken bir şey olmadığı sürece bir sıkıntı olmaz. Bağlantılardaki ani temassızlıklar tüm ledleri yakıyor olabilir.

  4. #define HARDWARE_TYPE MD_MAX72XX::FC16_HW FC16_HW yerine PAROLA_HW yazarsanız ekran kendisine geliyor yoksa saçmalıyor ekran karman çorban bir şey çıkartıyor

  5. Merrhaba iyi günler
    Benim yaptığım projede dotmatrix te yazılar tam olarak gözükmüyor parça parça gözüküyor bunu nasıl düzeltebilirim.?

  6. Hocam merhaba emeğinize sağlık,ben şöyle birşey yapmak istiyorum ama kod kısmında zorlanıyorum:sipariş proje gibi algılanmasın ama …
    Elimde Ardiuno uno,4×4 keypad ve 8×8 dotmatrix led ve entegresi mevcut.ben keypad den mesela 1 tusuna bastıgımda led de gülen surat oluşsa ve 9 tusuna bastıgımda uzgun surat oluşsa,bir tuştan diğerine hemen basılmasa;basarken bir gecikme olsa.
    ve bana saat 09 ile 16 arasında bir veri çıkarsa; 16 dan sonra gulen surat :)…tusa basılma sayısı / üzgun surat :(.. tuşa basılma sayısı…. şeklinde kayan yazı olarak gösterse ertesi gun 9 da veriler sıfırlanıp tekrardan başlasa….
    nasıl bir kod yazmalıyım.şimdiden tşkler

  7. İyi günler. Verdiğiniz kod ve şemaya göre devreyi kurdum. Arduino bilgisayara bağlı iken saat,sıcaklık ve nem değeri güzel bir şekilde okunuyor. Yanlız arduinonun bilgisayar bağlantısını kesip pille çalıştırdığım zaman çalışmıyor. Saat sabit kalıyor, değişmiyor. Ne yapmam gerekiyor. Yardımcı olabilir misiniz.

      • Arduino bilgisayara bağlı iken saat,sıcaklık ve nem değerlerini okuyorum sorunsuz bir şekilde. Ama arduinoyu pille çalıştırdığında hiç bir değer okuyamıyorum. Saat,sıcaklık ve nem hiç birini okuyamıyorum. Pili taktığımda sadece saat ekrana geliyor öyle kalıyor değişmiyor diğer değerlerde ekrana gelmiyor. 9volt pil kullandım

      • Arduino bilgisayara bağlı iken hiç bir sıkıntı olmadan saat, sıcaklık ve nem değerlerinin görebiliyorum dot matrixte. Arduinonun bilgisayarla olan bağlantısını kesip pil ile çalıştırdığım zaman saat sıcaklık ve nem değerlerinin okuyamıyorum bu konuda problem yaşıyorum. Pille çalışırken saat açılıyor ve öyle kalıyor saat ilerlemiyor sıcaklık ve nem değerlerini hiç göremiyorum

  8. Hocam şimdi bundan ısı ve nem sensorunu çıkarıp kurmaya çalışsak nasıl kurarız bı yardımcı olursanız çok makbule geçer ödev verdiler de

    • Merhaba, kodda DHT ile ilgili satırları çıkararak düzenleyebilirsin, sensör dışındaki bağlantıları da aynı şekilde yaparak projeni yapabilirsin.

  9. Araya animasyon lar ekleyebilirsiniz iki göz olr arada açılıp sağa sola bakan küçük bir araba olur bazen çıkıp sağa sola giden vs vs 😊

  10. #include //Kütüphanelerimizi ekliyoruz
    #include
    #include
    #include “DHT.h”

    #define DHTPIN 2 //DHT pin tanımlaması
    #define DHTTYPE DHT11 //DHT modeli tanımlaması
    DHT dht(DHTPIN, DHTTYPE);

    int CLK = 8; //RTC modülümüzün pin bağlantılarını tanımlıyoruz
    int DAT = 7;
    int RST = 6;
    virtuabotixRTC myRTC(CLK, DAT, RST);

    #define HARDWARE_TYPE MD_MAX72XX::FC16_HW
    #define MAX_DEVICES 4 //4 Dot Matrix kullanacağımızdan dolayı 4 seçiyoruz
    #define CLK_PIN 13 //Dot matrix board pin tanımlamaları
    #define DATA_PIN 11
    #define CS_PIN 10

    MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

    const long int WAIT_TIME = 1000;
    void setup()
    {

    P.begin();
    dht.begin();
    }
    void loop()
    {

    myRTC.updateTime(); //Zaman güncellemesi
    int h = dht.readHumidity(); //Nem değerini alıyoruz
    int t = dht.readTemperature(); //Sıcaklık değerini alıyoruz
    int yy=(myRTC.year-2000);
    for(int i=1; i < 8; i++){

    if(myRTC.minutes=0)
    P.print(” ” + String(myRTC.hours) + “:” + “0” + String(myRTC.minutes)); //Dakika değeri 0-9 aralığındaysa formatı bozmamak için başına 0 ekleyerek yazdırıyoruz
    else
    P.print(” ” + String(myRTC.hours) + “:” + String(myRTC.minutes)); //Saat yazdırma
    delay(1000);
    if(myRTC.minutes=0)
    P.print(” ” + String(myRTC.hours) + ” ” + “0” + String(myRTC.minutes)); //Dakika değeri 0-9 aralığındaysa formatı bozmamak için başına 0 ekleyerek yazdırıyoruz
    else
    P.print(” ” + String(myRTC.hours) + ” ” + String(myRTC.minutes)); //Saat yazdırma
    delay(1000);

    }

    P.print(” “+String(t)+” C”); //Sıcaklık değeri yazdırma
    delay(4000);
    P.print(” % ” + String(h)); //Nem değeri yazdırma
    delay(4000); //2 saniye bekleme

    P.print(” “+String(myRTC.dayofmonth)+”/”+ String(myRTC.month)); //Saat yazdırma
    delay(4000);

    P.print(” “+ String(myRTC.year)); //Saat yazdırma
    delay(4000);

    }

  11. Merhaba,
    Aşağıda kayan yazı örneği var. Seri port ekranından girdiğiniz yazıyı yazıyor. İstediğiniz kadar değiştirebilirsiniz yazıyı. Ayrıca düğme ve potansiyometre ekleyerek yazının hızını, yönünü ve duruş tarafını değiştirebilirsiniz. Koddaki yönergeleri izleyin. Ama bu hali ile de rahatlıkla kullanılıyor. Kayma hızını normale düşürdüm.İngilizce bilmeyenlere yardımcı olurum. Sadece sorun.Birileri de saat, sıcaklık ve nem okumaya nasıl adapte edeceğimizi gösterse keşke…
    İyi çalışmalar.

    // Use the Parola library to scroll text on the display
    //
    // Demonstrates the use of the scrolling function to display text received
    // from the serial interface
    //
    // User can enter text on the serial monitor and this will display as a
    // scrolling message on the display.
    // Speed for the display is controlled by a pot on SPEED_IN analog in.
    // Scrolling direction is controlled by a switch on DIRECTION_SET digital in.
    // Invert ON/OFF is set by a switch on INVERT_SET digital in.
    //
    // UISwitch library can be found at https://github.com/MajicDesigns/MD_UISwitch
    // MD_MAX72XX library can be found at https://github.com/MajicDesigns/MD_MAX72XX
    //

    #include
    #include
    #include

    // set to 1 if we are implementing the user interface pot, switch, etc
    #define USE_UI_CONTROL 0

    #if USE_UI_CONTROL
    #include
    #endif

    // Turn on debug statements to the serial output
    #define DEBUG 0

    #if DEBUG
    #define PRINT(s, x) { Serial.print(F(s)); Serial.print(x); }
    #define PRINTS(x) Serial.print(F(x))
    #define PRINTX(x) Serial.println(x, HEX)
    #else
    #define PRINT(s, x)
    #define PRINTS(x)
    #define PRINTX(x)
    #endif

    // Define the number of devices we have in the chain and the hardware interface
    // NOTE: These pin numbers will probably not work with your hardware and may
    // need to be adapted
    #define HARDWARE_TYPE MD_MAX72XX::FC16_HW
    #define MAX_DEVICES 4
    #define CLK_PIN 13
    #define DATA_PIN 11
    #define CS_PIN 10

    // HARDWARE SPI
    MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
    // SOFTWARE SPI
    //MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

    // Scrolling parameters
    #if USE_UI_CONTROL
    const uint8_t SPEED_IN = A5;
    const uint8_t DIRECTION_SET = 8; // change the effect
    const uint8_t INVERT_SET = 9; // change the invert

    const uint8_t SPEED_DEADBAND = 5;
    #endif // USE_UI_CONTROL

    uint8_t scrollSpeed = 60; // default frame delay value
    textEffect_t scrollEffect = PA_SCROLL_LEFT;
    textPosition_t scrollAlign = PA_LEFT;
    uint16_t scrollPause = 2000; // in milliseconds

    // Global message buffers shared by Serial and Scrolling functions
    #define BUF_SIZE 75
    char curMessage[BUF_SIZE] = { “” };
    char newMessage[BUF_SIZE] = { “Hello! Enter new message?” };
    bool newMessageAvailable = true;

    #if USE_UI_CONTROL

    MD_UISwitch_Digital uiDirection(DIRECTION_SET);
    MD_UISwitch_Digital uiInvert(INVERT_SET);

    void doUI(void)
    {
    // set the speed if it has changed
    {
    int16_t speed = map(analogRead(SPEED_IN), 0, 1023, 10, 150);

    if ((speed >= ((int16_t)P.getSpeed() + SPEED_DEADBAND)) ||
    (speed = BUF_SIZE-2)) // end of message character or full buffer
    {
    *cp = ‘\0’; // end the string
    // restart the index for next filling spree and flag we have a message waiting
    cp = newMessage;
    newMessageAvailable = true;
    }
    else // move char pointer to next position
    cp++;
    }
    }

    void setup()
    {
    Serial.begin(9600);
    Serial.print(“\n[Parola Scrolling Display]\nType a message for the scrolling display\nEnd message line with a newline”);

    #if USE_UI_CONTROL
    uiDirection.begin();
    uiInvert.begin();
    pinMode(SPEED_IN, INPUT);

    doUI();
    #endif // USE_UI_CONTROL

    P.begin();
    P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);
    }

    void loop()
    {
    #if USE_UI_CONTROL
    doUI();
    #endif // USE_UI_CONTROL

    if (P.displayAnimate())
    {
    if (newMessageAvailable)
    {
    strcpy(curMessage, newMessage);
    newMessageAvailable = false;
    }
    P.displayReset();
    }
    readSerial();
    }

    • Yukarıda kütüphaneler çıkmamış. Ekliyorum.
      MD_Parola.h
      MD_MAX72xx.h
      SPI.h
      başına include eklemeyi ve kütüphaneleri küçüktür ve büyüktür işaretleri içine almayı unutmayın.

  12. Github ve arduino forumlarını taradım. DS 1302 ‘yle matrixe kayan yazı yazdıracak kod yazımı hiçbir yerde yok. Birisi yardım ederse çok sevinirim…

  13. In file included from C:\Users\MUSTAFA ERDEM\Documents\Arduino\libraries\DHT-sensor-library-master\DHT_U.cpp:15:0:

    C:\Users\MUSTAFA ERDEM\Documents\Arduino\libraries\DHT-sensor-library-master\DHT_U.h:36:29: fatal error: Adafruit_Sensor.h: No such file or directory

    compilation terminated.

    exit status 1
    Arduino/Genuino Uno kartı için derleme hatası.

    bu hatayı alıyorum kütüphaneti heryerden bildim defalarca indirdim, başka yerden de indirip denedim kütüphaneyi denedim yine olmadı, yardımcı olurmusunuz

  14. hocam kolay gelsin 3 adet 5×7 dotmatrix 595 li bir sistem ve nano var sizin uygulamanız max72 li 595 e çevirebilir miyiz yardımcı olursanız sevinirim

  15. Merhaba emekleriniz için teşekkür ederim.
    Yazı fontunu büyültebilir miyim veya küçültebilir miyim?
    “:” ifadesini ilgili kütüphane aracılığıyla gönderdiğimde “::” çıkmakta.

    Yardımcı olabilecek var mı?

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz