Arduino Elektronik Elektronik modüller Kodlama

Arduino DS1302 ile saat yapımı

Tarafından yazılmıştır suatcicek

Merhaba bu makalemizde size arduinoda kullanılan ds1302 saat modülünün kullanımından bahsedeceğim. 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.

Buna benzer birçok projelerde bu modül çok işinize yarayabilir.

Ş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)

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

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.

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() {

}

Makalemizi beğendiyseniz beğenmeyi ve yorum yapmayı esirgemeyin. Siz beğendikçe yeni makaleler gelecektir. Takıldığınız bir yer olursa yorum atın, en yakın zamanda cevaplayamaya çalışacağım. Kolay gelsin.

Yazar Hakkında

suatcicek

Yorumu yanıtla