Konular

Arduino DS1302 ile Saat İşlemleri

Bu modül ile saat bilgileri anlık ds1302 entegresinde tutulur. Modülün üzerindeki pil sayesinde arduino yu güçten çekseniz bile saat bilgisi kaybolmayacaktır. Zaman ilerlemeye devam edecektir.

Bu modülü kullanarak sadece saat yapılır gibi düşünmeyin. Farklı projelerde, zamanlanmış görevlere ihtiyacınız olduğunda bu modül sizin işinizi görecektir. Bu modül ile yapılabilecek benim aklıma gelen bazı projeler şöyle ;

  • Evinizde ki kombilerinizi bu modül ile belirli saatlerde açıp kapatabilirsiniz. Bunu yaparken sadece ekstra röle modülüne  ihtiyacınız olacaktır.
  • Kuluçka makinesi yaparken kuluçka zamanını bu modül ile ayarlayabilirsiniz elektrik kesilip gelse bile saat verisi kaybolmayacak ve kaldığı yerden devam edecektir.
  • MFRC 522 kartlı giriş  projesinde giriş ve çıkış zamanlarını hesaplamak istediğinizde bu modül size yardımcı olacaktır.

Şimdi kendi konumuz olan saat yapımına geçelim. Bu iş için bize gerekli olan parçalar şu şekilde;

  • Arduino herhangi bir modeli
  • lcd5110 display (isterseniz başka bir lcd 16×2 kullanabilirsiniz)
  • DS1302 modülü
  • Birkaç adet jumper kablo (dişi -erkek ve erkek erkek kablo)

 DS1302'nin temel kullanım şeması

Arduino DS1302 ile Saat İşlemleri

Arduino DS1302 ile Saat İşlemleri

Devrenin bağlantılarını aşağıdaki resimde görüldüğü gibi yapın.

Arduino DS1302 ile Saat İşlemleri

Bağlantıyı yaptıktan sonra Arduino IDE yi açıyoruz. Bize ilk başta iki adet kütüphane gerekiyor. 5110 lcd kütüphanesi ve DS1302 kütüphanesi.

indirdiğiniz kütüphaneleri Arduino IDE ye dahil etmek için Arduino IDE menüsünden Taslak  –  Library ekle  – ZIP kitaplığı ekle yoluna girin. Açılan pencereden indirdiğiniz kütüphaneleri seçip open’ e tıklayın.

Bazı forumlarda I/O (Data) ucuna 1Klık direnç takılması tavsiyesi var.

Bu işlemide tamamladıktan sonra aşağıdaki kodu arduinoya yükleyin.

#include <stdio.h>
#include <DS1302.h>
#include <LCD5110_Basic.h>
int lcdledi=12;
extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];
LCD5110 myGLCD(7,8,5,4,6); //CLK,DİN, DC, RST,CE
int i=0;
namespace {
const int kCePin   = 11;  // Chip Enable
const int kIoPin   = 10;  // Input/Output
const int kSclkPin = 9;  // Serial Clock


DS1302 rtc(kCePin, kIoPin, kSclkPin);

String dayAsString(const Time::Day day) {
  switch (day) {
    case Time::kSunday: return "Pazar";
    case Time::kMonday: return "Pazartesi";
    case Time::kTuesday: return "Salı";
    case Time::kWednesday: return "Çarşamba";
    case Time::kThursday: return "Perşembe";
    case Time::kFriday: return "Cuma";
    case Time::kSaturday: return "Cumartesi";
  }
  return "(unknown day)";
}

void printTime() {
  // Get the current time and date from the chip.
  Time t = rtc.time();

  // Name the day of the week.
  const String day = dayAsString(t.day);

  // Format the time and date and insert into the temporary buffer.
  String saat = String(t.hr);
  String dakika = String(t.min);
  String saniye = String(t.sec);
  String gun=String(day.c_str());
  String ay;
  String kaci=String(t.date);
  switch (t.mon){
    case 1: ay="Ocak"; break;
    case 2: ay="Şubat"; break;
    case 3: ay="Mart"; break;
    case 4: ay="Nisan"; break;
    case 5: ay="Mayıs"; break;
    case 6: ay="Haziran"; break;
    case 7: ay="Temmuz"; break;
    case 8: ay="Ağustos"; break;
    case 9: ay="Eylül"; break;
    case 10: ay="Ekim"; break;
    case 11: ay="Kasım"; break;
    case 12: ay="Aralık"; break;
    }
         

  myGLCD.print(saat,28,0);
  myGLCD.print(":",40,0);
  myGLCD.print(dakika,46,0);
  myGLCD.print(":",58,0);
  myGLCD.print(saniye,64,0);
   myGLCD.print(kaci,0,18);
   myGLCD.print(ay,20,18);
   myGLCD.print(gun,50,18);
   
}

}  

void setup() {
  pinMode(lcdledi, OUTPUT);
  myGLCD.InitLCD();
 myGLCD.setContrast(60);
  Serial.begin(9600);

  rtc.writeProtect(false);
  rtc.halt(false);
}

void loop() {
  String a= String(i);
i +=1;
   myGLCD.setFont(SmallFont);
   
   digitalWrite(lcdledi, LOW);
   delay(1000);
  printTime();
}

   Eğer tarihi ve saati değiştirmek isterseniz aşağıdaki kodda belirtmiş olduğum yeri değiştirip yükleyin ardından tekrar üstteki kodu yükleyin.

#include <stdio.h>
#include <DS1302.h>

namespace {

const int kCePin   = 11;  // Chip Enable
const int kIoPin   = 10;  // Input/Output
const int kSclkPin = 9;  // Serial Clock

// Create a DS1302 object.
DS1302 rtc(kCePin, kIoPin, kSclkPin);

}  

void setup() {
  rtc.writeProtect(false);
  rtc.halt(false);
  Time t(2013, 9, 22, 1, 38, 50, Time::kSunday);  //Buradan değiştireceğini zamanı yıl,ay gün,saat,dakika,saniye olarak yazıp yükleyin

  rtc.time(t);
}

void loop() {

}

 

Projeye Alarm Ekleyelim

#include <stdio.h>
#include <DS1302.h>

int i = 0;

namespace {
  const int kCePin   = 11;  // Chip Enable
  const int kIoPin   = 10;  // Input/Output
  const int kSclkPin = 9;  // Serial Clock
 
  DS1302 rtc(kCePin, kIoPin, kSclkPin);
 
  String dayAsString(const Time::Day day) {
    switch (day) {
      case Time::kSunday: return "Pazar";
      case Time::kMonday: return "Pazartesi";
      case Time::kTuesday: return "Salı";
      case Time::kWednesday: return "Çarşamba";
      case Time::kThursday: return "Perşembe";
      case Time::kFriday: return "Cuma";
      case Time::kSaturday: return "Cumartesi";
    }
    return "(unknown day)";
  }
 
  void printTime() {
    // Get the current time and date from the chip.
    Time t = rtc.time();
 
    // Name the day of the week.
    const String day = dayAsString(t.day);
 
    // Format the time and date and insert into the temporary buffer.
    String saat = String(t.hr);
    String dakika = String(t.min);
    String saniye = String(t.sec);
    String gun = String(day.c_str());
    String ay;
    String kaci = String(t.date);
    switch (t.mon) {
      case 1: ay = "Ocak"; break;
      case 2: ay = "Şubat"; break;
      case 3: ay = "Mart"; break;
      case 4: ay = "Nisan"; break;
      case 5: ay = "Mayıs"; break;
      case 6: ay = "Haziran"; break;
      case 7: ay = "Temmuz"; break;
      case 8: ay = "Ağustos"; break;
      case 9: ay = "Eylül"; break;
      case 10: ay = "Ekim"; break;
      case 11: ay = "Kasım"; break;
      case 12: ay = "Aralık"; break;
    }
 
    Serial.print(String(t.hr));
    Serial.print(":");
    Serial.print(String(t.min));
    Serial.print(":");
    Serial.print(String(t.sec));
    Serial.print("n");
 
  }
 
  void SaatiKur() {
    Time t(2019, 6, 6, 4, 14, 05, Time::kSaturday);  //Buradan değiştireceğini zamanı yıl,ay gün,saat,dakika,saniye olarak yazıp yükleyin
    rtc.time(t);
  }
 
  void Alarm() {
    Time t = rtc.time();
 
    if (t.min % 5 == 0) { //dakika 5'in katıysa alarm led yakıyoruz
      digitalWrite(13, HIGH);
    }
    else {
      digitalWrite(13, LOW);
    }
  }
}

void setup() {

  pinMode(13, OUTPUT);
  Serial.begin(9600);

  //SaatiKur();
  rtc.writeProtect(false);
  rtc.halt(false);
}

void loop() {
  delay(1000);
  printTime();

  Alarm();
}

 

Kaynaklar

Yorumunuzu Ekleyin
ESP-12E (ESP8266) İle Arduino Uno Wifi Bağlantısı

ESP-12E, popüler ESP8266 WiFi modülünün gömülü projelerde kullanılmak üzere tasarlanmış SMD sürümüdür. Internet Of Things (IOT) uygulamalarınız için mükemmel bir seçimdir. ESP8266 WiFi Modülü, WiFi ağınıza herhangi bir mikrodenetleyici erişimi verebilen dahili TCP / IP protokolüne sahip, kendi kendine yeten bir modüldür.

1,215 Okunma 0 Yorum 10/07/2019 20:05:25 13/07/2019 05:25:14

Arduino UNO ve PIR Sensörü

PIR sensörü, kızılötesi ısı radyasyonlarını tespit etmek için kullanılır. Bu durum, kızılötesi ısı ışınımı yayan hareketli canlı nesnelerin algılanmasını içeren uygulamalarda kullanılmaya müsait kılar.

560 Okunma 0 Yorum 04/07/2019 01:21:00

NodeMCU Nedir ve Nasıl Kullanılır

NodeMCU'nun alt-metninde "kolay şekilde bağlanın" mesajı vardır. Evet kesinlikle mesajda olduğu gibidir bu iş. Küçük cihazların iletişimi şaşırtacak derecede kolaydır.

546 Okunma 0 Yorum 17/07/2019 18:25:49 17/07/2019 18:55:25

Motor Sürücü Kartları

Sürücü kartları sayesinde ardunio kartınız üzerinde istediğiniz voltaj ve güçte motoru kontrol edebilirsiniz.

534 Okunma 0 Yorum 04/07/2019 15:26:53 04/07/2019 15:36:33

Arduino UNO ve Serial Komutları

Arduino programlama dilinde seri haberleşme portunu kullanımı için tanımlanmış bir Serial nesnesi bulunmaktadır. Serial nesnesi işimizi kolaylaştırıcı bir çok fonksiyona sahiptir.

520 Okunma 0 Yorum 12/07/2019 18:35:55 12/07/2019 18:41:54

Yükleniyor...