Arduino ile DS3231 RTC Modülü - Tarih ve Saati Ayarlama / Okuma
DS3231 RTC Modülü Pinout
Aşağıdaki şekil DS3231 RTC Modülünün pim şemasını göstermektedir:
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 |
---|---|
VCC | Güç Kaynağı pimi |
GND | Zemin pimi |
SQW | Kare dalga Çıkış pimi |
SCL | Seri Saat pimi |
SDA | Seri Veri pini |
32 bin | 32KHz 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ü 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'yi Arduino ile Arayüz
Daha önce açıklandığı gibi, örnek olarak bir Arduino UNO ile RTC arasında arayüz oluşturacağız:
Pimleri uygun şekilde bağlayın.
Arduino UNO | RTC Modülü |
---|---|
5V | VCC |
GND | GND |
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.
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.
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.
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 ForeverIf you want, let's learn together...https://roboticcode2020.blogspot.com/bahadirozgen1975@gmail.com