DS1307 ile Gerçek Zaman Saati (RTC) Yapımı ve Arduino ile Kullanımı


Arduino
projelerimizde zaman zaman gerçek zaman saatine ihtiyaç duyarız. Saate göre açılıp kapanan röleler, tarih veya saate göre veri kaydetme gibi konularda enerji kayıplarından (elektrik kesilmesi vs.) etkilenmeyen bir saate ihtiyaç duyuyorsanız DS1307 ile bu temel devreyi kurarak ihtiyacınızı karşılayabilirsiniz.

Gerekli Malzemeler:

  1. 1 adet 32.768 KHz kristal
  2. 1 adet CR2032 pil
  3. 1 adet CR2032 pil yuvası
  4. 1 adet DS1307
  5. 1 adet 0.1?F kondansatör
  6. 3 adet 10K direnç

Yukarıda şemasını verdiğim devreyi breadboard ya da delikli bakır plakete kurduktan sonra SDA-Arduino Analog4 ve SCL-Arduino Analog5 bağlantılarını yapıyoruz. İnternette DS1307 gerçek zaman saati (RTC) pek çok kütüphane mevcut.


Aşağıda DS1307new kütüphanesi ile çalışan, (en alttaki bağlantılardan dosyalarını indirebilirsiniz.) düzenleyip sadeleştirdiğim örnek bir programı paylaşıyorum. Program eğer daha önce ayarlanmamışsa saat ve tarih verilerini sizin girdiğiniz değerlere göre DS1307 NV-RAMine kaydediyor.  Daha sonra saniyede bir tarih ve saat bilgilerini serial monitorde yazdırıyor.

Programda içerisinde açıklamalarda da belirttim fakat yine yazayım. Saat ve tarihi tekrar ayarlamak için DS1307nin pil ve 5v bağlantısını kesip bir süre beklemek gerekiyor. Daha sonra sketchdeki değerleri değiştirerek saat ve tarih değerlerini ayarlayabilirsiniz.

// ##################################################################################
// # Yazar     : Peter Schmelzer, Oliver Kraus
// # Düzenleme : İsmail BUÇGÜN
// # DS1307new kütüphanesi için test programı. CR2032 pil desteği ile hazırladığınız 
// # DS1307 devrenizi Arduinonuzun I2C pinlerine bağladıktan sonra  programı
// # yükleyerek  devrenizi test edebilirsiniz.
// ##################################################################################

#include <Wire.h> // Wire kütüphanesini ekliyoruz.
#include <DS1307new.h> // DS1307new kütüphanesini ekliyoruz.

// Değişkenler
uint16_t startAddr = 0x0000;            // NV-RAM'de saklamak için başlangıç adresi
uint16_t lastAddr;                      // NV-RAM'de saklamak için yeni adres
uint16_t TimeIsSet = 0xaa55;            // Saatin tekrar ayarlanmamasına yardımcı olur.

void setup()
{
  Serial.begin(9600);
  // Store startAddr in NV-RAM address 0x08 
  RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));

  RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
  if (TimeIsSet != 0xaa55) 
  // Saat ve tarih daha önce ayarlanmış mı kontrol ediyoruz. Eğer ayarlanmamışsa 
  // TimeIsSet değişkeni 0xaa55 değerine eşit değilse aşağıda girdiğimiz 
  // verilerle saati ayarlamış oluruz.
  {
    RTC.stopClock();

// Bu kısımdan sketchi yüklemeden önce tarih ve saati ayarlayabilirsiniz.
// Bir kez ayarlayıp yükledikten sonra tekrar tarih saat ayarı yapabilmek
// için entegreye bağlı batarya bağlantısı ve Arduinodan sağladığımız
// 5v enerjiyi kesip bir süre beklemek gerekiyor. Daha sonra programda tarih
// ve saati ayarladıktan sonra yüklediğinizde NV-RAMe ayarladığınız tarih ve
// saat bilgileri kaydedilecektir. İlk satırı (Yıl,Ay,Gün), ikinci satırı 
// (Saat,Dakika,Saniye) formatında yazmanız gerekiyor.

    RTC.fillByYMD(2011,4,8);
    RTC.fillByHMS(22,7,0);

    RTC.setTime();
    TimeIsSet = 0xaa55;
    RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
    RTC.startClock();
  }
  else
  {
    RTC.getTime();
  }

  Serial.println("DS1307new Kutuphanesi Test Programi");
  Serial.println("Tarih Saat Formati "SS:DD:ss GG-AA-YYY DDD"");
  Serial.println("Her saniye alt satira gecerek o anki zamani gosterir.");
  Serial.println();
}
void loop()
{
  RTC.getTime(); // Saat ve Tarih verilerini al

  if (RTC.hour < 10)                  
  {
    Serial.print("0");
    Serial.print(RTC.hour, DEC);
  } 
  else
  {
    Serial.print(RTC.hour, DEC);
  }
  Serial.print(":");
  if (RTC.minute < 10)
  {
    Serial.print("0");
    Serial.print(RTC.minute, DEC);
  }
  else
  {
    Serial.print(RTC.minute, DEC);
  }
  Serial.print(":");
  if (RTC.second < 10) 
  {
    Serial.print("0");
    Serial.print(RTC.second, DEC);
  }
  else
  {
    Serial.print(RTC.second, DEC);
  }
  Serial.print(" ");
  if (RTC.day < 10)                  
  {
    Serial.print("0");
    Serial.print(RTC.day, DEC);
  }
  else
  {
    Serial.print(RTC.day, DEC);
  }
  Serial.print("-");
  if (RTC.month < 10)              
  {
    Serial.print("0");
    Serial.print(RTC.month, DEC);
  }
  else
  {
    Serial.print(RTC.month, DEC);
  }
  Serial.print("-");
  Serial.print(RTC.year, DEC);   // Yılda herhangi bir değişikliğe gerek yok
  Serial.print(" ");
  switch (RTC.dow)   // Haftanın günü
  {
    case 1:
      Serial.print("PZT");
      break;
    case 2:
      Serial.print("SAL");
      break;
    case 3:
      Serial.print("CAR");
      break;
    case 4:
      Serial.print("PER");
      break;
    case 5:
      Serial.print("CUM");
      break;
    case 6:
      Serial.print("CTS");
      break;
    case 7:
      Serial.print("PAZ");
      break;
  }
  Serial.println();
  delay(1000);   // 1 saniye bekle
}

DS1307new kütüphanesinde pek çok fonksiyon bulunmakta. Yukarıdaki örnekte sadece saat ve tarih verilerini ayarlama ve alma fonksiyonlarını kullanılmış. Kütüphanedeki diğer fonksiyonlar hakkındaki bilgilere kütüphane sayfasındaki Wiki bölümünden ulaşabilirsiniz.

İyi çalışmalar…

Kaynaklar:

Gerekli Olabilecek Bağlantılar:

İsmail

Üniversite öğrencisi, Arduino meraklısı.

126 comments

  1. Mücahit dedi ki:

    devre çalısıyor ama zaman işlemiyor.

  2. İsmail Buçgün dedi ki:

    Merhaba,
    Geç cevap verdiğim için kusura bakmayın. Devreyi breadboarda kurup tekrar denedim sorunsuz çalışıyor. Tam olarak sorunu tarif edebilir misiniz?

  3. zafer dedi ki:

    ben bu konulara yenıyım bu devreyı lcd de nasıl gostercem serial.print yerıne lcd yazdırma parametresını kullansam olurmu ,ayrıca bu yazdgınız programı kopyala yapıstır yapsam calısırmı??

  4. kaanceyhan dedi ki:

    @Zafer 16×2 LCD yazısının yorumlarında Sıcaklık sensöründen alınan bilginin LCD’de görüntülenmesi ile ilgili kod yazdım. orayı DS1307’den gelen bilgi olarak değiştirirsen istediğin olmuş olur.

  5. Şamil Çark dedi ki:

    Elektronik Tamirci siyim. Çalışma Pano’mda Sabit Kullanabileceğim.
    2×16 LCD Gösterge’li Tarih ve Zaman Dilim ini Gösterecek Digital Devre’ye ihtiyacım var.
    İstediği Özellik ise.
    1. Satırda Gün/Ay/Yıl Zaman Dilimi.
    2. Satırda İse Saat/Dkk/Sn Zaman Dilimi

    Bu İki Karakter’lerin LCD Ekran ına Ortalanması Talep Ediyorum.
    Bu Konu Yardımcı Olabilecek Pic Prog İlgilerinden Dolay Teşekkür lerini Sunuyorum.
    Konu İle Alakadar Olup, İrtibat Kurmak İsteyen let E-posta Adres’imden iritbat Kurabilir.

  6. Ersen Kubilay Bayrak dedi ki:

    ds1302 devresi gerçekten çok yanlış eski projelerimden bağlantı şemasını veriyim;

    http://u1312.hizliresim.com/1j/l/vn3sx.png

  7. Ersen Kubilay Bayrak dedi ki:

    kondansatörün 1F olmasına şaşırmayın bu devre için süper kondansatör kullanılmıştır

  8. Ömer Koman dedi ki:

    ersen kubilay bayrak sizin verdiğiniz örnek ds1302 entegresine ait bu yazıdaki ise ds1307 dir. projelerinizde dikkat ve başarılar dilerim…

  9. hülya dağdelen dedi ki:

    kodlar çalışıyor fakat saat değeri birkaç dakika geç yazıyor. örneğin 16.6.0 yaptığımda 16.3.0 dan başlatıyor. sebebi öğrenebilir miyim projem için çok gerekli. yardımınız için şimdiden teşekkürler…

  10. ÖZAY YILMAZ dedi ki:

    yukardaki örnekte bu satırda bir hata verdi
    Serial.println(“Tarih Saat Formati “SS:DD:ss GG-AA-YYY DDD””);
    ama bu şekilde düzeltince çalıştırabildim
    Serial.println(“Tarih Saat Formati \”SS:DD:ss GG-AA-YYY DDD\””);
    güzel örnek elinize emeğinize sağlık

  11. efe dedi ki:

    mrb hocam bu devreye atmega328 i bağlama olasılığımız nedir karttan haricen atmegayı devreye bağlayamayız mı ?

  12. Ömer Koman dedi ki:

    efecim bu sitede gördüğün herşeyi atmega328e bağlama olasılığın yüzde yüzdür yeterki sen iste.

    yukarıdaki şemeada
    SDA bağlantısını analog 4 pinine,
    SCL bağlantısını analog 5 pinine bağlayacaksın. +5v ve gnd leri de bağlayacaksın.
    şu sayfadaki 16.resimde atmega328 e nasıl bağlayacağın var
    http://arduinoturkiye.com/arduino-temel-baglantilar-arduino-basic-connections/

    %100 olasılıkla kolay gelsin.

  13. ogün uzun dedi ki:

    merhaba bu projenin proteusta çizilmiş örneği varmı? teşekkürler.

  14. muhammet sarıkaya dedi ki:

    iyi günler
    ben yol bilgisayarı yapıyorum
    belirttiğiniz SQW SDA SCL pinlerine ekran geliyor diğer pinleri kullanamaz mıyım? ve nasıl olur ?

    arduino mega kullanıyorum

    teşekkürler

  15. Emir dedi ki:

    Merhaba hocam,
    Serial.println(?Tarih Saat Formati ?SS:DD:ss GG-AA-YYY DDD?”);
    bu satırda tarih ve saati nasıl tanımlayacağız. Üstteki arkadaşın dediği şekilde de denedim aynı satırda hata verdi.
    Şu anki zamanı RTC’ye gömüp otomatik saydırmam gerekiyor.

    • Ömer Koman dedi ki:

      programın setup bölümünde yazıyor

      // Bu kısımdan sketchi yüklemeden önce tarih ve saati ayarlayabilirsiniz.
      // Bir kez ayarlayıp yükledikten sonra tekrar tarih saat ayarı yapabilmek
      // için entegreye bağlı batarya bağlantısı ve Arduinodan sağladığımız
      // 5v enerjiyi kesip bir süre beklemek gerekiyor. Daha sonra programda tarih
      // ve saati ayarladıktan sonra yüklediğinizde NV-RAMe ayarladığınız tarih ve
      // saat bilgileri kaydedilecektir. İlk satırı (Yıl,Ay,Gün), ikinci satırı
      // (Saat,Dakika,Saniye) formatında yazmanız gerekiyor.

      RTC.fillByYMD(2011,4,8);//<<<<<<<< buraya tarih gir RTC.fillByHMS(22,7,0);//<<<<<<<<<<<<< buraya saati gir çıktı formatı ise Serial.println(?Tarih Saat Formati \?SS:DD:ss GG-AA-YYY DDD\?");

  16. Emir dedi ki:

    Hocam tekrar selamlar,
    Tarih ve saati arduino aracılığı ile bir LCD’ye yazdırdım verdiğiniz kodlar ile. LCD’deki zamanı nasıl anlık olarak yazdırabilirim ? Kısaca dijital saat gibi olacak fakat saat/dk/saniye saymıyor aynı kalıyor

    • Ömer Koman dedi ki:

      genel mantık aşağıda ona göre duzenle, loop içindeki kodlar devamlı tekrarlanır. belirli peryotlarla gettime yaparsın sonucu biryerlerde gösterirsin

      void loop()
      {
      RTC.getTime(); // Saat ve Tarih verilerini al
      // buraya lcd veya serial monitorde göstermek için gerekli kodları yaz.
      delay(1000); // 1 saniye bekle
      }

      • Emir dedi ki:

        halletim, çok teşekkür ederim. son bir sorum kaldı. değerlerimi lcd’ye yazdım.
        sdcard shield’im var.şu şekilde dosyayı oluşturup içini dolduruyor.
        File dataFile = SD.open(“data.txt”, FILE_WRITE);
        ben data.txt yerine rtc’den çektiğim tarih adıyla dosya oluşturmak istiyorum.denediklerim;
        (“now.day()”, FILE_WRITE);
        (now.day(), FILE_WRITE);
        (‘now.day()’, FILE_WRITE);
        olmadı tabiki. nasıl yapabiliriz ?

  17. Emir dedi ki:

    Teşekkürler ama olmadı artık başka bir yolla çözmeye çalışacağım.
    Başka bir yönteminiz varsa yazarsanız sevinirim.

  18. levent dedi ki:

    hata veriyor anlam veremedim derleme hatası…

  19. Emre Özdemir dedi ki:

    Merhabalar,Ben arduino kütüphanesine ds1307 indirip koydum açınca derleme hatası veriyor (RTC_DS1307 rtc; (“RTC_DS1307” does not name a type) bu siteden
    kopyalayıncada (RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));
    “RTC”was not declared in this scope) hatası veriyor bir türlü anlayamadım yardım edebilirmisiniz.

  20. Ömer Koman dedi ki:

    Buyuk kucuk harf yazimina dikkat et.

  21. Emre Özdemir dedi ki:

    ben kopyalıyorum Klavye ile elle mi yazmam gerekiyor buyuk kuçuk harf nerde yanlış olabilirki ayrıca bende bazı yerler yazıdaki gibi turuncuya dönmüyor örneğin setRAM
    getRAM
    stopClock ,fazlasıda var

  22. Ömer Koman dedi ki:

    RTC kutuphanesini de bulup lokal kutuphanelere eklemen gerekiyor birde. şöyle yapılıyor http://arduino.cc/en/Guide/Libraries

    • elif dedi ki:

      Meraba ,RTC devresini çalıştıırınca gerçek zamanlı saat çalışmıyor, programda girilen saatleri çalışıtıyor. ayrıca dirençleri bağlayınca ekran çıktısı almadım . sonrasında direnç değerlerini düşüürp devreyi yeniden kurunca her saniyede aynı çıktııyı aldım. ne yapmam gerekiyor, yardımcı olabilir misininz?

      • Ömer Koman dedi ki:

        bence rtc bağlantılarınızı kontrol edin, saat calışmıyor bir sorun var,
        programın setup kısmındaki değerleri alıyorsunuz sadece, ondan değişmiyor.
        rtc nin pilini de takın arduinoıyu kapatıp açtıkça zaman ilerliyormu ilerlemiyorsa veya rastgele şeyler geliyorsa. bağlantınız olmamış demektir.

  23. elif dedi ki:

    Merhaba , COM3’te sürekli şu çıktıyı alıyorum
    165:165:85 165-165-2165 PZT
    165:165:85 165-165-2165 PZT
    arduino yu kapatıp açamadan kastınız tam olarak ne? bigisayardan gücünü kesme mi, yoksa reset atma mı. ikisini de yaptım ama yine aynı sorunla karşılaşıyorum.
    proje çalışınca zaman gerçek zaman oalrak mı ilerleyecek?

  24. elif dedi ki:

    sizce sorun nerede?

  25. elif dedi ki:

    kullandığım kristalden mi kaynaklanıyor acaba?

    • Ömer Koman dedi ki:

      kristal 32,768 hz lik olmalı,genel bir montaj hatanız var sanırım devrenizi anlayarak tekrardan kurun hatta yazıdaki şekli ile kurun bir çalıştırın sonra kendinize göre değişiklikleri yaparsınız.

  26. elif dedi ki:

    cristalimi değiştirdim, hatta devrenin dirençlerini 4 k yaptım . ama sürekli aynı yerde hata oluyor, bcd den decimala çeviri olmuyor ve hep aşağıdaki çıktıyı veriyor.
    165:165:85 165-165-2165 PZT
    165:165:85 165-165-2165 PZT

    • Ömer Koman dedi ki:

      yazının altındaki kütüphaneleri arduinoya kopyaladınız mı?
      birde şunları
      RTC.fillByYMD(2011,4,8);
      RTC.fillByHMS(22,7,0);
      değiştir bakalım çıkan sonuçda değişecek mi

  27. elif dedi ki:

    entegremi değiştirdim, zaman doğru çalıştı. acaba buna buzzer ile alarm ekleyebilir miiyim.

    • Ömer Koman dedi ki:

      ds1307 de 64byte hafıza var alarm zamanını oraya yaz arduino her açıldığında setup kısmında bu değerleri oku hafızaya al. program içinde kontrol et eşit veya büyük olduğunda buzzer çaldırırsın

  28. emre dedi ki:

    İyi günler.Arduino mega ile sıcaklık ölçüm için proje üzerinde uğraşıyorum.Arduıno üzerine daha önceden yazdığım programı silmeye uğraşıyorum fakat silemiyorum.Sıkıntının arduıno programı üzerindeki yardımcı butonlardan sketch>verify/compile seçeneğine yanlışlıkla tıkladığım için olduğunu düşünüyorum.Ama kesin olarak bilmiyorum.Sorunun ne olduğunu anlayamıyorum.Yardımcı olursanız sevinirim.Teşekkür ederim.

  29. mehmet dedi ki:

    iyi günler RTC modülde saat ve tarih verilerini enerji kesilse dahi kalması İçin EEPROM da verileri nasıl saklayabilirim

    • Ömer Koman dedi ki:

      rtc modüllerde saat pili kullanılabiliyor istenirse, böylece elektrik kesilse bile saat çalışmaya devam eder rtc lerin çoğunda bir kaç byte lık silinebilir hafıza olabiliyor bazılarında ise eprom olabiliyor ds1307 de eprom yok rtc saatlerin epromlarına veya hafızalarına komut yazmak için bir yazma komutu olur hafıza adresi ve hafıza içriği byte olarak kaydedilir. ilgili rtc nin datasheet ine veya kutuphanesine bir bakmanız lazım…

  30. serdar dedi ki:

    bu devre ardiuno ile çalısmıyo neden

    • Ömer Koman dedi ki:

      yazıdaki devreyi ve programı kontrol ettik bizde sorun yok tekrar bağlantılarınızı kontrol edin.

  31. Murat dedi ki:

    Merhaba, ben arduino kullanarak servo motorumun günün belirli saatlerinde rtc kullanarak çalışmasını istiyorum bunu nasıl yapabilirim acaba yardımcı olur musunuz ?

    • Ömer Koman dedi ki:

      arduinoda bir çalışma planı oluşturacaksın başlama zamanı-bitiş zaman diye daha sonra her saniye değiştiğinde bu planla karşılaştıracasın, plandaki zamanın içine denk geliyorsa ledi yak veya motoru çalıştır.

  32. mustafa can dedi ki:

    merhaba,bu saati alabileceğimiz bir adres varmı.teşekkür ederim.
    saygılarımla.

  33. eser dedi ki:

    tarih ayarlayamıyorum nasıl bi yol izlemem gerek yardım.
    #include
    #include “RTClib.h”

    // include the library code:
    #include
    // initialize the library with the numbers of the interface pins
    LiquidCrystal_I2C lcd(0x20,16,2);

    /* ——————-
    | LCD | Arduino |
    ——————-
    LCD RS pin to digital pin 7 | RS | D7 |
    LCD Enable pin to digital pin 6 | E | D6 |
    LCD D4 pin to digital pin 5 | D4 | D5 |
    LCD D5 pin to digital pin 4 | D5 | D4 |
    LCD D6 pin to digital pin 3 | D6 | D3 |
    LCD D7 pin to digital pin 2 | D7 | D2 |
    LCD R/W pin to ground | R/W | GND |
    ——————-
    */

    RTC_DS1307 RTC;

    byte SW0 = A0;
    byte SW1 = A1;
    byte SW2 = A2;

    // use for hexa in zecimal conversion
    int zh, uh, ore;
    int zm, um, miniti;

    //#include // dht11 kütüphanesini ekliyoruz.
    //#define DHT11PIN 8// DHT11PIN olarak Dijital 2’yi belirliyoruz.

    //dht11 DHT11;

    void setup () {
    //DHT init
    //dht11.begin();
    // set up the LCD’s number of columns and rows:
    lcd.init();
    //lcd.begin(16, 2);
    // Print a logo message to the LCD.
    lcd.print(“www.tehnic.go.ro”);
    lcd.setCursor(0, 1);
    lcd.print(“creat de niq_ro”);
    delay (1000);
    lcd.clear();

    // Serial.begin(9600);
    Wire.begin();

    // part code from http://tronixstuff.wordpress.com/
    Wire.beginTransmission(0x68);
    Wire.write(0x07); // move pointer to SQW address
    Wire.write(0x90); // sends 0x10 (hex) 00010000 (binary) to control register – turns on square wave
    Wire.endTransmission();
    // end part code from http://tronixstuff.wordpress.com/

    RTC.begin();
    if (! RTC.isrunning()) {
    /// Serial.println(“RTC is NOT running!”);
    //following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
    }

    pinMode(SW0, INPUT); // for this use a slide switch
    pinMode(SW1, INPUT); // N.O. push button switch
    pinMode(SW2, INPUT); // N.O. push button switch

    digitalWrite(SW0, HIGH); // pull-ups on
    digitalWrite(SW1, HIGH);
    digitalWrite(SW2, HIGH);

    }

    void loop () {
    DateTime now = RTC.now();
    lcd.setCursor(0, 0);
    if ( now.hour() < 10)
    {
    lcd.print(" ");
    lcd.print(now.hour(),DEC);
    }
    else
    {
    lcd.print(now.hour(),DEC);
    }
    lcd.print(":");
    /////////////////////////////////////////
    if ( now.minute() < 10)
    {
    lcd.print("0");
    lcd.print(now.minute(),DEC);
    }
    else
    {
    lcd.print(now.minute(),DEC);
    }
    lcd.print(":");
    /////////////////////////////////////////
    if ( now.second() < 10)
    {
    lcd.print("0");
    lcd.print(now.second(),DEC);
    }
    else
    {
    lcd.print(now.second(),DEC);
    }
    lcd.print(" ");

    lcd.setCursor(0, 1);
    if ( now.day() < 10)
    {
    lcd.print("0");
    lcd.print(now.day(), DEC);
    }
    else
    {
    lcd.print(now.day(), DEC);
    }
    lcd.print("/");
    if ( now.month() 0 ; i–) {
    displayNumber01(ore*100+miniti);
    }
    */
    lcd.setCursor(4, 0);
    if ( ore < 10)
    {
    lcd.print(" ");
    lcd.print(ore);
    }
    else
    {
    lcd.print(ore);
    }
    lcd.print(":");
    if ( miniti 9) minutes = minutes + 6;
    if (minutes > 0x59) minutes = 0;
    Serial.print(“Minutes = “);
    if (minutes >= 9)// Serial.print(“0”);
    Serial.println(minutes, HEX);
    delay(150);
    }

    while(!digitalRead(SW2)) // set hours
    {
    hours++;

    // converting hexa in zecimal:
    zh = hours / 16;
    uh = hours – 16 * zh ;
    ore = 10 * zh + uh;
    zm = minutes / 16;
    um = minutes – 16 * zm ;
    miniti = 10 * zm + um;

    /*
    for(int i = 20 ; i >0 ; i–) {
    displayNumber01(ore*100+miniti);
    }
    */
    lcd.setCursor(4, 0);
    if ( ore < 10)
    {
    lcd.print(" ");
    lcd.print(ore);
    }
    else
    {
    lcd.print(ore);
    }
    lcd.print(":");
    if ( miniti 9) hours = hours + 6;
    if (hours > 0x23) hours = 0;
    Serial.print(“Hours = “);
    if (hours 0 ; i–) {
    displayNumber01(ore*100+miniti);
    }
    // delay(150);
    */

    lcd.setCursor(4, 0);
    if ( ore < 10)
    {
    lcd.print(" ");
    lcd.print(ore);
    }
    else
    {
    lcd.print(ore);
    }
    lcd.print(":");
    if ( miniti < 10)
    {
    lcd.print("0");
    lcd.print(miniti);
    }
    else
    {
    lcd.print(miniti);
    }
    //lcd.print(":");
    //lcd.print("00");

    }
    }
    /*void afisare_temperatura()//////////////////////////////////////////////////////////////////////
    {
    int chk = DHT11.read(DHT11PIN);
    lcd.setCursor(0, 1);
    //lcd.write(1);
    //lcd.setCursor(2, 1);
    lcd.print((float)DHT11.temperature, 0);
    lcd.setCursor(2, 1);
    lcd.print((char)223); //degree sign
    lcd.print("C");

    lcd.setCursor(5, 1);
    //lcd.write(2);
    //lcd.setCursor(10, 1);
    lcd.print((float)DHT11.humidity, 0);
    lcd.print("%");
    delay(1000);

    }
    */

    • Ömer Koman dedi ki:

      kodun setup kısmında zaman ayarı için şu satır var
      RTC.adjust(DateTime(__DATE__, __TIME__));
      kolaylık olsun diye compile ettiğiniz andaki pc deki tarih ve saat bilgisini __DATE__ __TIME__ ile rtc.adjust fonksiyonuna yollamış
      rtc.adjust komutunun içine istediğiniz tarih zamanı yazarsan olur. hengi formatta yazılır bılemıycem bıldığım bşr rtc kutuphanesi değil. rtc kutuphanesini yazanın bir linki vardır oraya gidip örneklere bır bakın

  34. eser dedi ki:

    kütüphanesini bulamadım.
    güzel menülü saat buldum nextbuton döngüsünden takılı kalıyor
    bakabilirmisiniz.

    //V1 – original release
    //V2 – added new setting menu/gui
    // added 12/24 hour operation
    // changed minimum settable year to 2013
    // added feature to quickly reset seconds to ’00’ by pressing the down button

    #include
    #include
    #include
    // initialize the library with the numbers of the interface pins
    LiquidCrystal_I2C lcd(0x20,16,2);

    int seconds;
    int minutes;
    int hours;
    int adjHours;
    int dayOfWeek;
    int dayOfMonth;
    int month;
    int year;

    int nextButton = 2;
    int upButton = 3;
    int downButton = 4;

    int buttonCount = 0; //start at zero starts clock in run mode

    bool display12HrMode;
    int address = 0;
    byte savedMode;

    void setup()
    {
    lcd.init();
    pinMode (nextButton, INPUT);
    pinMode (upButton, INPUT);
    pinMode (downButton, INPUT);

    Wire.begin();
    //lcd.begin(16, 2);
    Serial.begin(9600);

    ////////////////////////////////
    /* force time setting:
    seconds = 00;
    minutes = 00;
    hours = 00;
    dayOfWeek = 1;
    dayOfMonth = 01;
    month = 01;
    year = 13;
    initChrono();//just set the time once on your RTC
    */
    ///////////////////////////////

    lcd.begin(16, 2); // tells Arduino the LCD dimensions

    //L
    byte customCharL[8] = {
    0b11000,
    0b11000,
    0b11000,
    0b11000,
    0b11000,
    0b11000,
    0b11111,
    0b11111
    };

    //C
    byte customCharC[8] = {
    0b01111,
    0b11111,
    0b11000,
    0b11000,
    0b11000,
    0b11000,
    0b11111,
    0b01111
    };

    //D
    byte customCharD[8] = {
    0b11110,
    0b11111,
    0b11011,
    0b11011,
    0b11011,
    0b11011,
    0b11111,
    0b11110
    };

    //O
    byte customCharO[8] = {
    0b01110,
    0b11111,
    0b11011,
    0b11011,
    0b11011,
    0b11011,
    0b11111,
    0b01110
    };

    //K
    byte customCharK[8] = {
    0b11011,
    0b11011,
    0b11110,
    0b11100,
    0b11100,
    0b11110,
    0b11011,
    0b11011
    };

    //V
    byte customCharV[8] = {
    0b00000,
    0b00000,
    0b11011,
    0b11011,
    0b11011,
    0b11111,
    0b01110,
    0b00100
    };

    //2
    byte customChar2[8] = {
    0b01110,
    0b11111,
    0b11011,
    0b00011,
    0b00110,
    0b01100,
    0b11111,
    0b11111
    };

    //.
    byte customCharP[8] = {
    0b00000,
    0b00000,
    0b00000,
    0b00000,
    0b00000,
    0b00000,
    0b00110,
    0b00110
    };

    lcd.createChar(0, customCharL);
    lcd.createChar(1, customCharC);
    lcd.createChar(2, customCharD);
    lcd.createChar(3, customCharO);
    lcd.createChar(4, customCharK);
    lcd.createChar(5, customCharV);
    lcd.createChar(6, customChar2);
    lcd.createChar(7, customCharP);

    lcd.setCursor(0,0);

    lcd.print(” “); // print space
    lcd.write((uint8_t)0); //L
    lcd.write((uint8_t)1); //C
    lcd.write((uint8_t)2); //D
    lcd.print(” “); // print space
    lcd.write((uint8_t)1); //C
    lcd.write((uint8_t)0); //L
    lcd.write((uint8_t)3); //O
    lcd.write((uint8_t)1); //C
    lcd.write((uint8_t)4); //K
    lcd.print(” “); // print space
    lcd.write((uint8_t)5); //V
    lcd.write((uint8_t)6); //2
    lcd.write((uint8_t)7); //.
    lcd.write((uint8_t)3); //0

    lcd.setCursor(0,1); //move cursor to start of next line
    lcd.print(“Kevin Rye – 2012”);
    delay(3000);
    lcd.clear(); // clear LCD screen

    //read 12/24 hr setting from EEPROM
    savedMode = EEPROM.read(address);
    if(savedMode == 0) { //0 = 12 hr mode //1 = 24 hr mode
    display12HrMode = true; //savedMode value stored in EEPRMOM is 0 , so set clock to display 12 hr mode
    Serial.print(“time mode is 12 hr mode”);
    }
    else {
    display12HrMode = false; //savedMode value stored in EEPRMOM is 1 , so set clock to display 24 hr mode
    Serial.print(“time mode is 24 hr mode”);
    }
    }

    void loop()
    {
    //poll the DS3231 for the date and time
    get_time();
    get_date();

    lcd.clear(); // clear LCD screen //do I need this? is this causing the ‘blink’?
    lcd.setCursor(0,0);

    /////////////////////////////////////////////////////

    //display set menus if nextButton is pressed
    if (digitalRead(nextButton) == HIGH) {

    buttonCount = buttonCount + 1;

    if (buttonCount == 7) {
    buttonCount = 0;
    }
    delay(100);
    }

    /////////////////////////////////////////////////////

    if(buttonCount == 0) {
    //first line – TIME
    if (display12HrMode == false) { //display 24 hour format

    //display hours
    if(hours < 10) {
    lcd.print(" 0");
    }
    else {
    lcd.print(" ");
    }

    lcd.print(hours);
    lcd.print(":");

    //display minutes
    if(minutes < 10)
    {
    lcd.print("0");
    }
    lcd.print(minutes);
    lcd.print(":");

    //display seconds
    if(seconds < 10) {
    lcd.print("0");
    }
    lcd.print(seconds);
    }
    else { //display 12 hour format

    //display hours
    switch(hours){
    case 0:
    lcd.print(" 12");
    break;
    case 1:
    lcd.print(" 1");
    break;
    case 2:
    lcd.print(" 2");
    break;
    case 3:
    lcd.print(" 3");
    break;
    case 4:
    lcd.print(" 4");
    break;
    case 5:
    lcd.print(" 5");
    break;
    case 6:
    lcd.print(" 6");
    break;
    case 7:
    lcd.print(" 7");
    break;
    case 8:
    lcd.print(" 8");
    break;
    case 9:
    lcd.print(" 9");
    break;
    case 10:
    lcd.print(" 10");
    break;
    case 11:
    lcd.print(" 11");
    break;
    case 12:
    lcd.print(" 12");
    break;
    case 13:
    lcd.print(" 1");
    break;
    case 14:
    lcd.print(" 2");
    break;
    case 15:
    lcd.print(" 3");
    break;
    case 16:
    lcd.print(" 4");
    break;
    case 17:
    lcd.print(" 5");
    break;
    case 18:
    lcd.print(" 6");
    break;
    case 19:
    lcd.print(" 7");
    break;
    case 20:
    lcd.print(" 8");
    break;
    case 21:
    lcd.print(" 9");
    break;
    case 22:
    lcd.print(" 10");
    break;
    case 23:
    lcd.print(" 11");
    break;
    }

    lcd.print(":");

    //display minutes
    if(minutes < 10)
    {
    lcd.print("0");
    }
    lcd.print(minutes);
    lcd.print(":");

    //display seconds
    if(seconds < 10) {
    lcd.print("0");
    }
    lcd.print(seconds);

    //display AM/PM
    if(hours < 12) {
    lcd.print(" AM");
    }

    else if (hours = 0) {
    lcd.print(" AM");
    }
    else {
    lcd.print(" PM");
    }
    }
    ////////////////////////////////////////////////////
    //second line – date
    //display day of week
    lcd.setCursor(0, 1);
    lcd.print(" ");
    switch(dayOfWeek){
    case 1:
    lcd.print("Sun");
    break;
    case 2:
    lcd.print("Mon");
    break;
    case 3:
    lcd.print("Tue");
    break;
    case 4:
    lcd.print("Wed");
    break;
    case 5:
    lcd.print("Thu");
    break;
    case 6:
    lcd.print("Fri");
    break;
    case 7:
    lcd.print("Sat");
    break;
    }
    lcd.print(" ");

    //display month
    if(month < 10){
    lcd.print("0");
    }

    lcd.print(month);
    lcd.print("/");
    if(dayOfMonth < 10) {
    lcd.print("0");
    }

    lcd.print(dayOfMonth);
    lcd.print("/");

    //display year
    if(year < 10){
    lcd.print("0");
    }
    lcd.print(year);

    delay(200);
    }

    //hours
    if (buttonCount == 1) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("HOURS:");
    lcd.setCursor(0,1);

    if (display12HrMode == false) { //display 24 hour format
    if (hours < 10) {
    lcd.print("0");
    }
    lcd.print(hours);
    }

    else { //in 12 hr mode
    switch(hours){
    case 0:
    lcd.print("12 AM");
    break;
    case 1:
    lcd.print("1 AM");
    break;
    case 2:
    lcd.print("2 AM");
    break;
    case 3:
    lcd.print("3 AM");
    break;
    case 4:
    lcd.print("4 AM");
    break;
    case 5:
    lcd.print("5 AM");
    break;
    case 6:
    lcd.print("6 AM");
    break;
    case 7:
    lcd.print("7 AM");
    break;
    case 8:
    lcd.print("8 AM");
    break;
    case 9:
    lcd.print("9 AM");
    break;
    case 10:
    lcd.print("10 AM");
    break;
    case 11:
    lcd.print("11 AM");
    break;
    case 12:
    lcd.print("12 PM");
    break;
    case 13:
    lcd.print("1 PM");
    break;
    case 14:
    lcd.print("2 PM");
    break;
    case 15:
    lcd.print("3 PM");
    break;
    case 16:
    lcd.print("4 PM");
    break;
    case 17:
    lcd.print("5 PM");
    break;
    case 18:
    lcd.print("6 PM");
    break;
    case 19:
    lcd.print("7 PM");
    break;
    case 20:
    lcd.print("8 PM");
    break;
    case 21:
    lcd.print("9 PM");
    break;
    case 22:
    lcd.print("10 PM");
    break;
    case 23:
    lcd.print("11 PM");
    break;
    }

    }

    delay(200);
    }
    //mins
    if (buttonCount == 2) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("MINUTES:");
    lcd.setCursor(0,1);
    if(minutes < 10) {
    lcd.print("0");
    }
    lcd.print(minutes);
    delay(200);
    }
    //day of week
    if (buttonCount == 3) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("DAY OF WEEK:");
    lcd.setCursor(0,1);
    switch(dayOfWeek){
    case 1:
    lcd.print("Sun");
    break;
    case 2:
    lcd.print("Mon");
    break;
    case 3:
    lcd.print("Tue");
    break;
    case 4:
    lcd.print("Wed");
    break;
    case 5:
    lcd.print("Thu");
    break;
    case 6:
    lcd.print("Fri");
    break;
    case 7:
    lcd.print("Sat");
    break;
    }
    delay(200);
    }
    //month
    if (buttonCount == 4) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("MONTH:");
    lcd.setCursor(0,1);
    if(month < 10) {
    lcd.print("0");
    }
    lcd.print(month);
    delay(200);
    }
    //day of month
    if (buttonCount == 5) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("DAY OF MONTH:");
    lcd.setCursor(0,1);
    if(dayOfMonth 23) hours = 0;

    //send update to RTC
    set_time();
    }

    //mins
    else if ((digitalRead(upButton) == HIGH) && (buttonCount == 2)) {

    minutes++;
    if (minutes > 59) minutes = 0;

    //reset seconds to ‘0’
    seconds = 0;

    //send update to RTC
    set_time();
    }

    //day of week
    else if ((digitalRead(upButton) == HIGH) && (buttonCount == 3)) {

    dayOfWeek++;
    if(dayOfWeek > 7) dayOfWeek = 1;

    //send update to RTC
    set_date();
    }

    //month
    else if ((digitalRead(upButton) == HIGH) && (buttonCount == 4)) {

    month++;
    if (month > 12) month = 1;

    //send update to RTC
    set_date();
    }

    //day of month
    else if ((digitalRead(upButton) == HIGH) && (buttonCount == 5)) {

    dayOfMonth++;

    //if feb
    if (month == 2) {
    if (dayOfMonth > 28) dayOfMonth = 1;
    }

    //if leap year
    //still to do

    //if month has 30 days: Apr, Jun, Sep, Nov
    if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
    if (dayOfMonth > 30) dayOfMonth = 1;
    }

    //if month has 31 days: Jan, Mar, May, Jul, Aug, Oct, Dec
    if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10)) {
    if (dayOfMonth > 31) dayOfMonth = 1;
    }

    //send update to RTC
    set_date();
    }

    //year
    else if ((digitalRead(upButton) == HIGH) && (buttonCount == 6)) {

    year++;

    //send update to RTC
    set_date();
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //pressing ‘down’ button should decrement field being set
    //hours
    if ((digitalRead(downButton) == HIGH) && (buttonCount == 1)) {

    if (hours == 0) hours = 23;
    else if ((hours > 0) && (hours 0) && (minutes <= 59)) minutes–;

    //reset seconds to '0'
    seconds = 0;

    //send update to RTC
    set_time();
    }

    //day of week
    else if ((digitalRead(downButton) == HIGH) && (buttonCount == 3)) {

    dayOfWeek–;
    if(dayOfWeek < 1 ) dayOfWeek = 7;

    //send update to RTC
    set_date();
    }

    //month
    else if ((digitalRead(downButton) == HIGH) && (buttonCount == 4)) {

    month–;
    if (month < 1) month = 12;

    //send update to RTC
    set_date();
    }

    //day of month
    else if ((digitalRead(downButton) == HIGH) && (buttonCount == 5)) {

    dayOfMonth–;

    //if feb
    if (month == 2) {
    if (dayOfMonth < 1) dayOfMonth = 28;
    }

    //if leap year
    //still to do

    //if month has 30 days: Apr, Jun, Sep, Nov
    if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
    if (dayOfMonth < 1) dayOfMonth = 30;
    }

    //if month has 31 days: Jan, Mar, May, Jul, Aug, Oct, Dec
    if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10)) {
    if (dayOfMonth < 1) dayOfMonth = 31;
    }

    //send update to RTC
    set_date();
    }

    //year
    else if ((digitalRead(downButton) == HIGH) && (buttonCount == 6)) {

    year–;
    if (year < 13) year = 13;

    //send update to RTC
    set_date();
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //button error handling
    if ((digitalRead(upButton) == HIGH) && (digitalRead(downButton) == HIGH) && (buttonCount != 0)) {

    lcd.setCursor(0,1);
    lcd.print("BOOM! ");

    delay(1000);
    }

    ////////////////////////////////////////
    //set seconds to '00' shortcut
    if ((digitalRead(downButton) == HIGH) && (buttonCount == 0)) {

    //reset seconds to '0'
    seconds = 0;

    //send update to RTC
    set_time();
    }

    //toggle 12/24 mode
    if ((digitalRead(upButton) == HIGH) && (buttonCount == 0)) {

    //toggle 12/24 mode
    display12HrMode = !display12HrMode;

    if (display12HrMode == false) {

    savedMode = 1; //24 hr mode
    //send update to EEPROM for 24 hr mode
    EEPROM.write(address, savedMode); //this sets the savedMode in EEPROM to true //24 hr mode

    }

    else {
    savedMode = 0; //12 hr mode
    //send update to EEPROM for 12 hour mode
    EEPROM.write(address, savedMode); //this sets the savedMode in EEPROM to fasle //12 hr mode

    }
    }

    } //end of loop

    /////////////
    //DS3231 RTC interface
    void initChrono()
    {
    set_time();
    set_date();
    }

    void set_date()
    {
    Wire.beginTransmission(104);
    Wire.write(3);
    Wire.write(decToBcd(dayOfWeek));
    Wire.write(decToBcd(dayOfMonth));
    Wire.write(decToBcd(month));
    Wire.write(decToBcd(year));
    Wire.endTransmission();
    }

    void get_date()
    {
    Wire.beginTransmission(104);
    Wire.write(3);//set register to 3 (day)
    Wire.endTransmission();
    Wire.requestFrom(104, 4); //get 5 bytes(day,date,month,year,control);
    dayOfWeek = bcdToDec(Wire.read());
    dayOfMonth = bcdToDec(Wire.read());
    month = bcdToDec(Wire.read());
    year = bcdToDec(Wire.read());
    }

    void set_time()
    {
    Wire.beginTransmission(104);
    Wire.write(0);
    Wire.write(decToBcd(seconds));
    Wire.write(decToBcd(minutes));
    Wire.write(decToBcd(hours));
    Wire.endTransmission();
    }

    void get_time()
    {
    Wire.beginTransmission(104);
    Wire.write(0);//set register to 0
    Wire.endTransmission();
    Wire.requestFrom(104, 3);//get 3 bytes (seconds,minutes,hours);
    seconds = bcdToDec(Wire.read() & 0x7f);
    minutes = bcdToDec(Wire.read());
    hours = bcdToDec(Wire.read() & 0x3f);
    }

    ///////////////////////////////////////////////////////////////////////

    byte decToBcd(byte val)
    {
    return ( (val/10*16) + (val%10) );
    }

    byte bcdToDec(byte val)
    {
    return ( (val/16*10) + (val%16) );
    }

  35. metin dedi ki:

    meraba ben ünüverstede bı proje yapmam gerekıyo bır quadcopter yapmam lazım ama hoca hazır kart almamızı kabul etmıyo arducoper dıe bır kart var ve ardunio mega2560 tabanlı yardımcı olurmusunuz eger bıtırırsem okulu gecıcem yoksa 1 sene daha uzıcak yardımlarınızı fıkırlerınızı beklıorm

  36. Coşkun Taşdemir dedi ki:

    Quadcopter projesini sen mi seçtin hoca mı verdi?

    • Ömer Koman dedi ki:

      önce quadkopteri yap arduino tabanlı bir kart olsun sonra kartı standart malzemelerle toparlarsın.

  37. ali dedi ki:

    meraba devrenin satini ayarladıktan sonra neden bir süre beklememiz gerekiyor. yüklenen yeni saat neden hemen çalışmıyor

    • Ömer Koman dedi ki:

      yeni saatin yüklenmesinde bekleme dediğiniz sanırım siz arduino kodunu yazdıktan sonra arduinoya attığınızda geçen süreden bahsediyorsunuz. programın içinde çalışırken saat ayarlama mantığı olmadığı için bu ayarlanmış zaman bilgisi programın başlangıcına yazılmış, mecburen bu yöntemle her ayar yapmak istediğinden yeni zaman bilgisini kodun içine atıp compile edip bu kodu arduino atmak için bir zaman harcamak gerekiyor. ama siz isterseniz bu kodu geliştirip 2-3 buton ekleyip saat ayarını program içinden kullanıcıya yaptırabilirsiniz. ayrıca saatin pilini bağlarsanız arduino kapalı bile olsa rtc zamanı ilerletmeye devam eder her açtığınınzda doğru zamanı görürsünüz…

  38. ali dedi ki:

    saat ayarını dışarıdan eklediğim butonla birlikte kendim yapmama rağmen 2 dakika bekledikten sonra yeni saat ayarım çalışmaya devam ediyor. o 2 dakikaklık bekleme süresini ortadan kalddıramadım.

    • Ömer Koman dedi ki:

      yukarıdaki kodda bu kadar zaman geçikmesi yok siz kodunzu buraya kopyalayın kontrol edelim hata nerede

      • ali dedi ki:

        ömer bey, saat konusunda yaptığınız yardımlarla projemde karşılaştığım sorunları büyük ölçüde giderdim. donanım bilginizi bir başka proje için paylaşmanızı rica edeceğim. yine arduino ilgili bir proje; ultrasonik sensör(servo motora bağlıbir şekilde) ortamı tarıyor ve tararken agıladığı engellerin geometrik şeklini ayırt ederek hangi cisim olduğunu anlıyor. mesala bir küpün ve kürenin ne olduğunu biliyor, tarama esnasında buna benzer bir bir cisim görünce o cismin konumunu belirlior. cisimlerin şekillerinin algılanmasını arduionyaya nasıl sağlatırım. bir fikriniz varsa paylaşmanızı rica ederim.

        • Ömer Koman dedi ki:

          ultrasonıc sensorler genelde cisim tanıma için kullanılmaz, engel tanıma daha uygun. cismin yuzeyini cok yuksek hassasıyetle tarayamadımıgımız ıcın kup ve kureyı pek ayıramayabılırız ama labırent ıcınde dolaşan fare uygulaması yazsanız odanın boşluklarını bulup dolaşan bir şey yapmak daha uygun olur. cisim tanıma ıcın cısmın yuzeyını 5- değişik noktadan ornek alıp bu noktaları bırleştirip fıkır sahıbı olabılırsınız ama bu cısımlerın boyutu buzdolobı kadar fılan olması lazım. kucuk cısımlerı mesela bir elma ıle rubıc kupunu ayıramayabılırsınız. foruma gelin oraya yazın başka bir fikir veren de cıkabılır

  39. metin dedi ki:

    aynen quad copterı hoca verdı herseyını hazırladım kasnagı falanda hazır sadece ardunıo ile programlaması kaldı yardımcı olrsanız cok ii olr nası yapacaımnı bılmıorm ve zamanımda azaldı

  40. metin dedi ki:

    kart olarakda ardunio mega 2560 ı aldı doru secım yapmısmıyımmotorları falan aldım escleride aldım bırtek ardunioyu programlaması kaldı

    • Ömer Koman dedi ki:

      bu yazı ds1307 ile alakalı. siz alakasız bir konu ile yazıyı tamamen bozdunuz buraya rtc ile ilgili gelen insanların hakkını yediniz bu bencillikten başka bir şey değil. foruma gelin derdiniz neyse oraya yazın ayıp yaaa. foruma giriş yaptığınızda haber verin buradaki alakasız konuları sileceğim

      • metin dedi ki:

        kusura bakmayın buraya yazmamın sebebı en fazla burdan cevap geldıı ıcın ve en sn son burdan cvp geldıı ıcın foruma yazdım ılgılenen olmadı yardıma ıhtıyacım var ayıp konusuna gelıncede bn burda ahlaksız bı kelımede konusmadım sadece yardım ısdedım burda sızden yardım ısdıyen ınsanları bu şekılde elestırmenız kırıcı doğrusu

  41. iskender dedi ki:

    merhaba,

    http://arduinotehniq.blogspot.com.tr/2014/09/manual-adjust-for-rtc-clock-with.html
    linkteki devreyi kurdum. 3 buton kontrollü ds1307 ile kurulmuş bir rtc devresi. Arduino 5V bağlantısını kesip tekrar bağladığımda ayarladığım saat bilgileri kaybolmakta ve her defasında tekrar ayarlamam gerekmekte. Bu sorunu nasıl çözebilirim?

  42. michael dedi ki:

    Merhaba, arduinoda zamanlamayla alakalı uğraştığım fakat çözemediğim bir problem var mailden ulaşmanız mümkün mü acaba? şimdiden teşekkür ederim.

  43. delikanlı dedi ki:

    Hocam merhaba bu uygulamayı yaptım sağolun güzel çalışıyor fakat bu rtc den gelen saate göre örneğin saat 10.00-10.20 arasında motor çalışsın diye nasıl yazabiliriz.buradaki saati ifle yazarken rtc den saat 10 diye mi bilgi geliyor yoksa hex olarak mı?sağolun hocam.hayırlı akşamlar

  44. delikanlı dedi ki:

    Hocam
    RTC.fillByYMD(2011,4,8);
    RTC.fillByHMS(22,7,0);
    böyle yazınca doğru çalıştı.Ama
    RTC.fillByYMD(2015,11,9);
    RTC.fillByHMS(18,45,0);
    yazınca
    165:165:85 165-165-2165 PZT
    165:165:85 165-165-2165 PZT diye yazıyor.Sizce sebebi ne olabilir?

    • Ömer Koman dedi ki:

      yazarımız işlerinin yoğunluğu nedeni ile siteye uğramıyor forumdan sorularınızı sorabilirsiniz…

  45. mumin dedi ki:

    ıkı tane arduıno ile nrf24l01 modulu ile seri port ekranına yazı aktarmakdım bu aktardım yazıyı seri port ekranın lcd ekranda gözükmeyi beceremedim yardımcı olur musunuz alıcı :
    #include
    #include

    nRF24L01p receiver(7,8);//CSN,CE

    void setup(){
    delay(150);
    Serial.begin(9600);
    Serial.println(“RX baglanti saglandi”);
    SPI.begin();
    SPI.setBitOrder(MSBFIRST);
    receiver.channel(90);
    receiver.RXaddress(“Artur”);
    receiver.init();
    }

    String message;

    void loop(){
    if(receiver.available()){
    receiver.read();
    receiver.rxPL(message);
    if(message.length()>0)
    {
    Serial.println(message);
    message=””;
    }
    }
    }
    gönderici:
    #include
    #include

    nRF24L01p receiver(7,8);//CSN,CE

    void setup(){
    delay(150);
    Serial.begin(9600);
    Serial.println(“RX baglanti saglandi”);
    SPI.begin();
    SPI.setBitOrder(MSBFIRST);
    receiver.channel(90);
    receiver.RXaddress(“Artur”);
    receiver.init();
    }

    String message;

    void loop(){
    if(receiver.available()){
    receiver.read();
    receiver.rxPL(message);
    if(message.length()>0)
    {
    Serial.println(message);
    message=””;
    }
    }
    }

    • Ömer Koman dedi ki:

      yazının konusu dışında konu açmanın yeri sırası değil. foruma gelirseniz daha hızlı cevap bulabilirsiniz…

  46. Fatih BEY dedi ki:

    Merhabalar,
    Devreyi aynen yaptım, library yi de uzun uğraştan sonra halledebildim ve arduino normalde iken kod çalışıyor sadece ds1307 entegresi monte olmadığı için zaman sabit kalıyor.

    ds1307 entegresi ni bağlayınca çalışmıyor. A4 ve A5 analog pinlerini niye kullanıyoruz aceba? paylaştığınız code ta böyle pinler set edilmemiş. SQW, SCL ve SDA uçlarını nereye bağlıyacağımı da tam anlayamadım.
    Yardımcı olabilir misiniz?
    Şimdiden teşekkürler

  47. Ömer Koman dedi ki:

    bu kodu ve devreyi ben daha önce test etmiştim sorun yok çalışmasında. ds1307 zamanı hesaplayarak aklında tutan ve arduino ile iletişim kurup gerçek zaman ve tarihi arduinoya iletmektedr. i2c ptotocolunu kullanmaktadır yazıdaki kutuphane a4 ve a5 pinlerini devreler arasında haberleşme için kullanmaktadır bu pinleri bağlamazsanız zaman bilgisini elde edemezsiniz. bağlantılarınızı kontrol edin rtc devresine 3v pilini bağlayın rtc modulu ile arduino gnd hatları ortak olmalı eksik bir bağlantı olmasın dikkat edin.

  48. ali osman dedi ki:

    Sat ekranı kodlarını kopyaladım fakat derlerken aşağıdaki hataları veriyor yardımcı olurmusunuz lütfen
    :In file included from C:\Users\exper\AppData\Local\Temp\arduino_d21688d77ac8679ed08ea48f7cc40f66\sketch_feb21a.ino:2:0:

    C:\Users\exper\Documents\arduino-1.6.7\libraries\DS1307new/DS1307new.h:24:22: fatal error: WProgram.h: No such file or directory

    #include “WProgram.h”

    ^

    compilation terminated.

    • Ömer Koman dedi ki:

      yazıyı incelediyseniz kodların altında indirilecek kütüphanelerin linkleri var en yeni tarihli lib dosyaları zip olarak orada var bilgisayarınıza indirin açtıktan sonra arduino kurulum klasörü altında lib klasörü vardır oraya kopyalayın düzelir.

  49. ali osman dedi ki:

    Ömer hocam öncelikle yardımların için teşekürler. kütüphaneleri indirdim lib bölümüne attım bu defa da:
    Serial.println(“Tarih Saat Formati “SS:DD:ss GG-AA-YYY DDD””);
    hatası verdi.
    Serial.println(?Tarih Saat Formati \?SS:DD:ss GG-AA-YYY DDD\?”);
    şeklinde değiştirdim yine aynı. yardımcı olursan sevinirim. şimdiden teşekürler.

  50. ali osman dedi ki:

    bir de hocam kullandığım saat modülü hazır modül.
    TinyRTC I2C DS1307n modülü bu programla çalışır mı?

    • Ömer Koman dedi ki:

      yuarıda şeması var aldığınız modulun şemeası ile karşılaştırın aynı ise çalışması lazım.

  51. ali osman dedi ki:

    hocam dediklerinizi yaptım kod yüklemedeki hatalar ortadan kalktı fakat modülü bağladığımda yazı çıkmıyor. bağlamadığımda ise sürekli alttaki yazı çıkıyor.
    165:165:85 165-165-2165 PZT

    • Ömer Koman dedi ki:

      ben bu modulu ve kodu denemiştim sorun yaşamadım. bağlantılarınız voltajları tekrar kotrol edin kullandığınız modülün bir linki varsa verin kontrol edelin. foruma gellin yazın daha hızlı olur başka uğraşanlar da var. forumda sorular anında yayınlanıyor, burada bir kaç gun gecikmeli çıkabilir projeniz boşuna zaman kaybetmesin.

    • Ömer Koman dedi ki:

      belittiğiniz urun içinde eprom da var kullanımı farklı olabilir satın aldığınız yere sorun. yazıda sadece ds1307 urunu anlatılıyor diğer kullanımını biz bilmiyoruz denemedik

  52. ali osman dedi ki:

    hocam a4 ve a5 nolu pimleri bağladığım zaman serialde yazı çıkmıyor. bağlantıyı kestiğim zaman ise
    165:165:85 165-165-2165 PZT sürekli bu yazıyıçıkartıyor.

  53. Mustafa Berkan Demir dedi ki:

    Merhaba,ben CR2032 pil yerine 2 adet 1.5V AA pil kullandım bu bir sorun yaratır mı? ve projemde lcd de saat ve tarih şu şekilde çıkıyor ;
    saat 165:165:85 , tarih 185/185/21 bunun bir çözümü var mıdır?
    Teşekkürler.

    • Ömer Koman dedi ki:

      cr2032 kullan diğer piller gereksiz. saat modulundeki bağlantıları tekrar kontrol et buyuk ihtimal hatalı bir bağlantı var. yukarıdaki kodu ve bağlantıları şemasından duzgun kontrol ederek bağlarsanır ve kutuphaneleri duzgun kurarsanız çalışmaması için sebep yok.

  54. Osman dedi ki:

    Hocam merhabalar devreyi kurdum programda da hiç bir sıkıntı yok seri port ekranında sorunsuz çalışıyor yalnız lcd ekranına yazdırma işlemini başaramadım diğer kaynaklardan da yardım aldım fakat ekrana yazdırma işlemi buradaki programla uyumlu olmadığı için düzgün yazdırmıyor örneğin gün isimleri çıkmıyor. Lcd ye yazdıran program varsa buraya atabilir misiniz çok araştırdım fakat bulamadım programlama bilgimde olmadığı için de başaramadım.Teşekkürler

  55. Abdurrezak atman dedi ki:

    hocam konuyla ilgi değil ama cevaplıya bilecekseniz bir sorum olacak..
    kuluçka makinesi yapıyorum tarih saat yazdırmak için DS1302 RTC.zip kutuphanesini indirdim ancak arduıno hata veriyor ne yapmam lazım başka kutuphanede yok
    çözebilirseniz sevinirim

    • Ömer Koman dedi ki:

      aldıgınız hata mesajını da yazsaydınız daha hızlı sonuc alabılırdık.

      şuradan faydalanın http://playground.arduino.cc/Main/DS1302RTC

      arduino uzerındeki herseyı kaldırın sadece rtc modulu belirtilen pinlere bağlayın ornek programmı yukleyın çalıştırmaya calısın. kutuphaneyı de kurun. sorun cıkarsa foruma gelin…

  56. İbrahim Ethem Özer dedi ki:

    Hocam saatlerdir uğraşıyorum derleme hatalı
    Verdiğiniz kütüphaneler mi eksik acaba birde buna alarm koyabilitmiıiyz
    Arduino:1.6.8 (Windows 10), Kart:”Arduino/Genuino Uno”

    In file included from D:\Yedek\Documents\Arduino\Ds1307new\Ds1307new.ino:2:0:

    D:\Yedek\Documents\Arduino\libraries\DS1307new/DS1307new.h:24:22: fatal error: WProgram.h: No such file or directory

    #include “WProgram.h”

    ^

    compilation terminated.

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

  57. Abdulkerim dedi ki:

    bu devreye alarm nasıl ekleyebilirim

    • Ömer Koman dedi ki:

      Tarih saat dakika bilgileri belli. bunlari bir if le kontrol edip istedigin seyi surebilirsin. Foruma gel sor yapanlar var…

  58. Gültekin Aslan dedi ki:

    sevgili arkadaşlar ds1302 ve lcd ekran kullanarak bunu kutulayıp butonlu filan bir saat yapmayı planlıyorum. aşağıdaki koda benzer bir kod ile doğum günleri olduğunda alarm çalan, ekranda gösterip ve kırmızı led yakmasını istiyorum. kod aşağıdaki haliyle çalışıyor.
    şunu sormak istiyorum. ekranın bir köşesinde en yakın doğum gününe kalan gün sayısını nasıl yazdırabilirim? (içinde 5 doğum günü olacak.)
    if (t.date==30 and t.mon==08)
    {
    Serial.print(“*** Dogum Gununuz Kutlu Olsun *** “);
    }

  59. gultekin aslan dedi ki:

    Teşekkür ederim. iyi günler dilerim.

  60. Umut dedi ki:

    devre çalışıyor teşekkürler ben gün saydırmak istiyorum hangi yolu izlemem gerekiyor teşekkürler

    • Ömer Koman dedi ki:

      gün saydırmanın normal yolu datedif komutu kullanmaktı normal standart c de var ama arduinoda göremedim. bu komut iki tarihi birbirinden çıkarıp geçen zamanı verebiliyor. siz zamanı devamlı ölçerken gün ay ve gün değerlerini bir sayısal değer haline getirin ve saklayın geçen her saniye de veya siz kontrol ettikçe sakladığınız değeri kontrol edin. aklıma en kısa yol bu geliyor.

  61. pisagor dedi ki:

    hocam devremiz budur.
    kutuphaneyi indirip kodu aynen yapıstırdık.bi iste saati okuma kısmına 2 tane \ ekleyerek düzeltme yaptık.ardunio ve boardda secili eminiz.calıstırıp kodu ardunioya atıyoruz.bi hata vermiyor. ama serial port ekranında hiç bir şey goremiyoruz.void setupta yazanlar bile yazmıyor serial portta.hatamız nerede.devrenin dagınıklıgı ıcın k bakmayın.kısa kabloya sahip degılız malesef.sag olun

    https://scontent-amt2-1.xx.fbcdn.net/v/t34.0-12/15226420_1903016773265140_339247713_n.jpg?oh=26319570a56a9b2978546d1f2540d1a4&oe=583C8363
    https://scontent-amt2-1.xx.fbcdn.net/v/t34.0-12/15226471_1903016779931806_1741873449_n.jpg?oh=d295f3d0679deb6487cbec9aba1c9a3e&oe=583C77A5
    https://scontent-amt2-1.xx.fbcdn.net/v/t34.0-12/15240133_1903016769931807_251058395_n.jpg?oh=fe874d33bad9c8a1f63b546152b34097&oe=583C729B
    https://scontent-amt2-1.xx.fbcdn.net/v/t34.0-12/15218464_1903016783265139_500335909_n.jpg?oh=27751ad230d71afef0344649a71b2249&oe=583B8A62

    • Ömer Koman dedi ki:

      programda sorun yok 2 yorum yukarıda sorunsuz çalıştıran var. arduino duzgun çalışıyordur değilmi yeni bir programda serial.print le birşeyler yollayın ekranda görünüyor mu? ozellıkle tx bacaklarına yanlışlıkla bir kablo bağladıysanız çıkış alamayabilirsiniz.

      • Pisagor dedi ki:

        Hocam kurdugumuz devrede hata yok degil mi ? Biraz acemiyizde boardda kurdugumuz devreyi attim yorumda, baksaniz iyi olur.normalde println ile deger alabiliyprum hoam bugun bile aldkm.
        eger devre aaglamsa kablolari kontrol ederim bi

  62. Abdullah dedi ki:

    Selamlar hocam biz bu devreyi yapacagızda bize tam net bir bilgi verebilir misiniz

    • Ömer Koman dedi ki:

      malzemelerin hepsi türkiyede bulunabiliyor malzeme lehimleme montaj işlerini biliyorsanız kolayca yapilabilir. ya malzemeleri tek tek alın yada hazır modul olarak alın farketmez her turlü çalışır. modül olarak alırsanız sade bir şey tercih edin yanında hafıza entegresi olanları tercih etmeyin kafa karıştırmaktan başka bişey değil. foruma da gelin

  63. Abdullah dedi ki:

    Hocam iyigünler biz tarih ve saat arduino ile birlikte çalıştıracağız bize bu proje hakında daha geniş bir fotoğraf ve devre şemasını atarsanız çok güzel olur saygılar

    • Ömer Koman dedi ki:

      yukarıda şema var arduino bağlantısı da var program zaten yazılmış paylaşılmış, çok standart ve bilinen bir uygulama internette arayarak da çok fazla kaynak bulabilirsiniz. yazıyı yazan arkdaşımız işlerinin yoğunluğundan pek ilgilenemiyor, foruma da gelin sorun daha çabuk ilerlersiniz.

  64. Abdullah dedi ki:

    Hocam bİz devreyi yaptık ama çalışmadı devre şemamızda yanlışlık var bize tam devre şemasının fotoğrafını atabilirmisiniz

    • Ömer Koman dedi ki:

      mevcut yazıda en tepesınde gayet açık bir şema var ona göre yapacaksınız yada hazır ds1307 modul alıp google da aratınca arduinoya bağlantısı ıle beraber gelecektır. şu an elimizde yukarıdaki bilgiler dışında başka kaynak yok ama yazıda anlatılanlar ve kod doğru. dıkkatli bir şekilde yapmaya çalışırsanız çalışması lazım. foruma gelın

  65. Abdullah dedi ki:

    Hocam şemada lcd ekran nereye bağlanıyor onu çözemedim

    • Ömer Koman dedi ki:

      bu şemada lcd ekran yok sarıalmonıtore verılerı yollar ama yazının altındaki yorumlarda lcd ile kullanan olmuş orada pinler kodun içinde tanımlı bir dene olmuyorsa foruma gel.

  66. Abdullah dedi ki:

    Hocam size kot iye devre şemasını bi atsam kontrol edermisiniz

    • Ömer Koman dedi ki:

      daha once turkce olarak 6 kez yazdıgım gibi foruma atın link koyun bakan yardımcı olan olacaktır. burada bır onay mekanızması oldugu ıcın vakit kaybetmeyın dıye foruma gelın dıyorum. bireysel kişisel projelere zaten tek tek yetişmemiz yapmamız mumkun değil paylaşırsanız sorunun nerede oldugunu soyleyebılırız bıldıgımız kadar

  67. kaan dedi ki:

    Arkadaşlar şu 165-165 görünme sorununu hallettim adım adım anlatıyorum

    1)RTC nin 5v ve grd bağlantılarını kesiyoruz. haberleşme pinleri bağlı kalacak
    2)RTC nin pilini de çıkartıyoruz.
    3)arduino programındaki tarih ve saat kısmını ayarlıyoruz.
    4)programı arduinoya atıyoruz.
    5)burada 145-145 şeklinde sayılar geliyodu bende
    6)sonra RTC nin 5v grd ve PİL bağlantılarını bağlıyoruz. pili bağlamayı unutmayın
    7) bağlantıları yaptıktan sonra saat ayarı falan 00.00.00 şekline geliyo
    8) arduinoya reset attığımızda programa girdiğimiz saat ayarından çalışmaya başlıyo

  68. Mehmet Akif Demir dedi ki:

    Hocam elinize emeğinize sağlık çok güzel bir çalışma
    dijital saat yapmaya çalışıyorum saat ayarını butonla girmek için ne yapabiliriz teşekürederim.

    • Ömer Koman dedi ki:

      buton kullanımı ıcın once ekran olarak bırşey kullanıyormusunuz yoksa cıktıyı serıdenmı alıyorsunuz onu bılmek lazım yada herseye uyan bırsey tasarlayacaksınız.
      mesela tek butonla bıle olur, butonu 1sn den fazla basınca programlama moduna gırer sonra her bastıgınızda bır dijit seçer son bastıgınızda ıse dıgıtlerı arttırırsınız tekrar uzun basınca son deger kalır ve program modundan cıkar mesela. bu işlerde patron sızsınız bu dunyayı sız oluşturuyorsunuz canınızın ıstedıgı gıbı yaparsınız oyle dusunun. tek yol yok.

  69. Mehmet Akif Demir dedi ki:

    öncelikle açıklamanız için teşekürederim hocam lcd 20*4 kullanıyorum buton kontrolünde sıkıntım yok tek girişten 5 butonla kontrol ediyorum test ettim çalışmasında sıkıntı yok hocam yukardaki kodları arduino’ya yükledim (arduino’yu harici için harici güç kaynağı kullandım enerjisini hiç kesmedim) yaklaşık 17 saattir çalışıyor 7 saniye gibi bir zaman kayması var ne den olabilir.

    • Ömer Koman dedi ki:

      bu tip modullerın sapma oranı biraz fazla olabılır ayda 1 dk cıvarı sapar. krıstalın toleransı hava sıcaklıgı hep etkıler. daha hassar rtc modulleri deneyebılırsınız.

  70. Mehmet Akif Demir dedi ki:

    Teşekür ederim Ömer Bey

E-posta adresiniz gösterilmeyecek. Gerekli alanlar * ile işaretlidir.

*



Sosyal Ağlar