Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

DS3231 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
DS3231 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

28 Nisan 2021 Çarşamba

Arduino ile DS3231 RTC Modülü - Tarih ve Saati Ayarlama / Okuma

 

Arduino ile DS3231 RTC Modülü - Tarih ve Saati Ayarlama / Okuma

DS3231 RTC modülü, doğru sonuçları nedeniyle piyasadaki ünlü bir gerçek zamanlı saattir. Burada, RTC gerçek zamanlı saat anlamına gelir. Saat ve Tarihi yüksek hassasiyetle yöneten uygun fiyatlı bir sistemdir. Bu küçük boyutlu modülün altı pimi, veri aktarımı için entegre (I2C) bir arabirimi ve güç yedekleme için bir pil hücresi vardır. DS3231 Gerçek Zamanlı Modül, bir TWI arayüzü, iki alarm saati ve dahili bir sıcaklık dengelemeli kristal Osilatör ile birlikte gelir. RTC modülü, tüketici ürünlerindeki uygulamalarını endüstriyel düzeyde bulur.





DS3231 RTC Modülü Pinout

Aşağıdaki şekil DS3231 RTC Modülünün pim şemasını göstermektedir:

DS3231 RTC Modülü pin çıkışı şeması

 PIN konfigürasyonu

DS3231 Gerçek Zamanlı Modülün pinout'unu tartışalım. Tablodaki pim yapılandırma ayrıntısı aşağıda belirtilmiştir:

Pin AdıFonksiyon
VCCGüç Kaynağı pimi
GNDZemin pimi
SQWKare dalga Çıkış pimi
SCLSeri Saat pimi
SDASeri Veri pini
32 bin32KHz Açık tahliye Çıkış pimi
  • SQW: Kare dalga oluşturmak veya alarmlar için kesinti olarak kullanılmak üzere kullanılır.
  • SCL: Veri aktarımlarını senkronize etmek için kullanılan bir seri saat hattı. I2C arayüzünün bir parçasıdır.
  • SDA: Bir seri veri iletim hattı. I2C arayüzünün bir parçasıdır.
  • 32K: Bu pin bir referans saat için kullanılır.

DS3231 RTC Modülü Özellikleri ve Teknik Özellikleri

  • Çalışma Gerilimi: 2.3 - 5.5 Volt
  • Çalışma Sıcaklığı: -45 - 800C
  • Maksimum Voltaj: VCC + 0.3 Volt
  • Akü Yedek Akımı: 500 mA
  • -40 - 800C'de doğruluk: ± 3,5 ppm
  • 0 - 400C'de doğruluk: ± 2,0 ppm
  • Sıcaklık Doğruluğu: 30C
  • Paket Tipi: 16, 300-mil SO paketi

Ayrıntılı Özellikler

Ayrıntılı özelliklerden bazıları aşağıda listelenmiştir:

  • Düşük voltajlarla çalışabilir
  • İhtiyaca göre programlanabilir Kare dalga çıkışı
  • Güç olmasa bile güncel kalmak için bir pil yedeği
  • Hızlı iletim için çift yönlü, 400 kHz I2C arayüzü
  • Veri okumak / yazmak veya kaydetmek için 32 bayt EEPROM
  • 2 Günün saati çalar saatler
  • Zamanı sıfırlamak için bir basma düğmesi
  • RTC, 12 saat veya 24 saat biçiminde kullanılabilir
  • Kullanıcı tarafından sağlanan değeri fabrika değerine göre bir ofset olarak ayarlamak için eskiyen bir trim kaydı
  • Saniye, dakika, saat, gün, hafta, ay, yıl bilgisini korur
  • Otomatik olarak bir güç kaynağından yerleşik bir pil kaynağına geçer


DS3231 RTC Şematik Diyagramı

Modülün şeması, modülü onarırken yardımcı olabilecek bağlantıları anlamak için sağlanmıştır:

DS3231 RTC Modülü dahili devre şeması

DS3231 RTC Modülü ile bir mikro denetleyici arasında nasıl arabirim oluşturulur?

Arabirim basittir. Sadece bir güç kaynağı veya kontrolör aracılığıyla RTC'ye güç verin (hasarı önlemek için 5 Volt'tan fazla olmayın) ve ardından SCL'yi SCL'ye ve SDA'yı sırasıyla modülün SDA'sına ve mikrodenetleyiciye bağlayın. İletim, oldukça karmaşık olan eşzamanlı entegre entegre devre (I2C) protokolü aracılığıyla gerçekleşir.

RTC modülü için yazılan kitaplıklar işleri kolaylaştırmaya yardımcı olabilir. Programa dahil edilmişlerse, otomatik olarak tarih ve saati kullanıcıya sağlarlar. Ayrıca, bu kitaplıklar çalar saati değiştirmemize veya ayarlamamıza yardımcı olabilir.

Modül, elektrik kesintisi durumunda bir pil ile birlikte gelir. Modülün tarih ve saat ile güncel kalmasına yardımcı olacaktır.

DS3231 RTC modülü düğme pil tutucu

DS3231 RTC'yi Arduino ile Arayüz

Daha önce açıklandığı gibi, örnek olarak bir Arduino UNO ile RTC arasında arayüz oluşturacağız:

Arduino ile arayüz oluşturan DS3231 RTC Modülü

Pimleri uygun şekilde bağlayın.

Arduino UNORTC Modülü
5VVCC
GNDGND
ICSP2 BaşlığıSDA
ICSP2 BaşlığıSCL

DS3231 RTC Kitaplığını Arduino IDE'ye yükleyin

Bir DS3231 RTC modülünü programlamak için Arduino'nun I2C iletişim pinlerini kullanmamız gerekir. I2C iletişimi hakkında bilginiz yoksa şu makalelere göz atabilirsiniz:

Ancak sıfırdan bir kod yazmak için çaba gerektirir. Neyse ki, bir RTC modülünden zaman ölçümleri almak için geri arama işlevleri sağlayan bir Arduino RTClib kitaplığı mevcuttur. Bu kitaplık, I2C iletişimi üzerinden bir RTC modülüyle iletişim kurmanın tüm karmaşıklığını gizler. DS3231'den veri okumak için RTClib tarafından uygulanan basit geri arama işlevlerini kullanabiliriz. 

Bu nedenle, Arduino ile bir DS3231 RTC modülünü programlamak için Arduino IDE'de bulunan RTClib kütüphanesini kullanacaksınız. 

Bu kütüphaneyi kullanmak için öncelikle Arduino'nun kütüphane yöneticisine giderek bu kütüphaneyi Arduino IDE'ye kurmamız gerekiyor. Arduino IDE'yi açın, Araçlar> Kitaplıkları Yönet'e gidin.

DS3231 kitaplığını Arduino IDE'ye yükleyin

Bundan sonra, bu pencere kütüphane yöneticisi penceresi görünecektir. Arama çubuğuna yazarak "RTClib" i arayın. DS3231 için birçok seçenek göreceksiniz. Ancak bu eğitimde kullanacağımız, Adafruit tarafından RTClib'dir. Adafruit tarafından RTClib'i seçin ve yükle düğmesine tıklayın. 

DS3231 RTC modül kitaplığını Arduino IDE'ye yükleyin

Kur düğmesine tıkladığınızda, RTClib'in şu anda Arduino IDE'nizde kurulu olmayan diğer kitaplık bağımlılıklarını gerektirebileceğine dair bir mesaj alabilirsiniz. Kur butonuna tıklayarak tüm bağımlılıkları kurmanızı tavsiye ederiz. Aksi takdirde, RTClib düzgün çalışmayacaktır.

DS3231 kitaplık yazılımı bağımlılık kitaplıkları

Arduino Kodu

Bu örnek kod, zaman ayarlarını gerçekleştirir. Ayrıca, bu Arduino DS3231 RTC modülünden okuma süresi ve verileri çizer ve Arduino seri monitörüne yazdırır.

// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {
  Serial.begin(57600);

#ifndef ESP8266
  while (!Serial); // wait for serial port to connect. Needed for native USB
#endif

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    abort();
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, let's set the time!");
    // When time needs to be set on a new device, or after a power loss, the
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }

  // When time needs to be re-set on a previously configured device, the
  // following line sets the RTC to the date & time this sketch was compiled
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  // This line sets the RTC with an explicit date & time, for example to set
  // January 21, 2014 at 3am you would call:
  // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}

void loop () {
    DateTime now = rtc.now();

    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");

    // calculate a date which is 7 days, 12 hours, 30 minutes, 6 seconds into the future
    DateTime future (now + TimeSpan(7,12,30,6));

    Serial.print(" now + 7d + 12h + 30m + 6s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();

    Serial.print("Temperature: ");
    Serial.print(rtc.getTemperature());
    Serial.println(" C");

    Serial.println();
    delay(3000);
}

Sonuçlar Seri Monitör aracılığıyla gözlemlenebilir. Güncellenen saat ve tarihi gösterecektir.

DS3231 Alternatif Seçenekler

  • DS1302
  • DS1307

Kullanım Alanı ve Fikir veren Projeler

  • DIY projeleri
  • Küresel Konumlandırma Sistemi
  • Telematik
  • Sunucular
  • Gömülü sistemler
  • Cep Telefonları


Bahadır ÖZGEN

Electronic Robotic Coding Research and Development 1975 - ∞

Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com