DS3231: Arduino'nuz için gerçek zamanlı saat ve takvim

DS3231

Bazı projelerde zaman, saat veya tarih kanıtı olması gerekir. Ya zamana dayalı belirli işlevleri yerine getirme ihtiyacı nedeniyle, bir etkinlik takvimi veya kayıt tutmak, zamanı bir sistemde tutmak veya basitçe bir dijital saat oluşturmak için Arduino ile. Ile DS3231 alabilirsin, başka biri bileşenleri listeye eklediğimiz.

DS3231, aradığınız modüldür ve burada kontrolü için ihtiyacınız olan her şeyi bulacaksınız ve ayrıca size bir örnek göstereceğim. Arduino ile entegre edin pratik bir örnekle ...

DS3231 nedir?

DS3231

Her şeyden önce, ne olduğunu bilmelisin RTC (Gerçek Zamanlı Saat)veya gerçek zamanlı saat. Bu yongalar çok sayıda uygulamada çok sık görülür, aslında bilgisayarınızda bunlardan biri ana kartınızda bulunur ve aynı zamanda bir CR2032 pil Ayrıca. BIOS / UEFI'deki zamanı ve yapılandırmayı koruyan ve işletim sisteminin zamanında olması için önyükleme sırasında aldığı sistemdir (şimdi İnternet ile sunucularla senkronizasyon daha yüksek hassasiyet için kullanılabilir, ancak bu başka bir hikaye…).

RTC'nin yaptığı şey, bu kadar basit zaman ölçümlerini elde etmektir. Diğer elektronik saat türlerinden farkı, zamanı ölçve bunu, frekansını ve periyotlarını bilerek, saat sinyal darbelerini sayarak yapar. Zamana ek olarak, bir RTC ayrıca günlerin, haftaların, ayların ve yılların muhasebesini tutmanıza da olanak tanır. Yani tam tarih ...

Bunun mümkün olması için, RTC'ye bir Xtal veya kuvars kristali frekansı sağlayan bir rezonatör olarak hareket edecek. Ek olarak, tarihi sayabilen ve hafızaya kaydedebilen bir elektronik devreye ihtiyacınız vardır. Devre saniyeleri, dakikaları, saatleri, günleri, haftaları, ayları ve yılları sayabilmelidir.

o bellek geçicidirBu yüzden sürekli güce sahip olmak için bataryaya ihtiyacı var. Piliniz yoksa veya biterse silinecektir ... Pil bittiğinde PC'lerin başına gelen budur, yanlış zaman verirler. PC açıkken yapılandırırsanız, RTC çalıştırıldığı için süre korunacaktır, ancak bu pil gerektiğinde kapalı olduğu işlemler sırasında olacaktır ...

Kendin Yap projeleri için, üreticiler genellikle iki ortak RTC yongası kullanır. DS1307 ve DS3231. Her ikisi de Maxim (eski adıyla Dallas Semiconductor) tarafından yapılmıştır ve DS3231, sıcaklık değişimlerinden eskisi kadar etkilenmediği için ikisinden daha doğru olanıdır. Bu nedenle sıcaklığa bağlı olarak çok fazla dalgalanma göstermez ve zamanı daha hassas tutar.

Zaman zaman, gözle görülür sıcaklık farklılıklarının olduğu DS1307, günde 1 veya 2 dakikaya kadar faz dışı kalabilir. Bazı uygulamalar için dayanılmaz bir şey.

DS3231, varyasyonlardan etkilenmediği anlamına gelmez, ancak 2 ppm doğruluk sağlamak için yerleşik sıcaklık ölçümü ve kompanzasyon sistemlerine sahiptir; gecikme süresi günde yaklaşık 172 ms, yani haftada en fazla 1 saniyeden biraz fazla. Ve pratikte, genellikle ayda sadece 1 veya 2 saniye değişir.

Yol gelince RTC ile iletişim DS3131 aldığı tarih değerlerini elde etmek için yapılır. I2C otobüsü. Ve güç için, DS2.3 için 5.5 ila 3231v kullanabilirsiniz; bu, DS4.5 için 5.5 ila 1307v'den biraz daha düşüktür, böylece daha enerji verimli olabilir ve pilin daha uzun süre dayanmasını sağlayabilir.

Ayrıca, bu modüllerin genellikle bir EEPROM ek AT24C32 oldukça pratik olan bazı kayıtları ve önceki ölçümleri saklamak.

uygulamaları

Uygulamalara gelince, Arduino ile bir saat uygulamak gibi bazılarından bahsetmiştim. Zaman Her neyse, zamanı olan PC'ler ve diğer birçok elektronik cihaz ve cihaz gibi ekipmanlarda zamanı tutmak için.

Ayrıca kullanılabilir projeler aydınlatma, sulama sistemleri, veri kaydedici vb. için zamanlayıcılar oluşturmak. Uygulamalar en çok olabilir ...

Bir RTC DS3231 satın alın

Modül DS3131 ucuzve eBay, AliExpress, Amazon gibi bazı özel elektronik mağazalarında veya büyük mağazalarda bulabilirsiniz. Bir tanesine sahip olmak ilginizi çekiyorsa, işte size bazı öneriler:

DS3231 Arduino Entegrasyonu

Arduino IDE ekran görüntüsü

İsterseniz DS3231'inizi Arduino kartınızla entegre edin ve "zamanlanmış" projeler oluşturmaya başlayın, önce uygun bağlantıları yapmalısınız. Bağlayabilmek şu kadar basit:

  • DS3231 kartının SLC pini, cihazınızın A5'ine bağlanmalıdır. Arduino UNO.
  • DS3231'in SDA'sı, Arduino'nun A4'üne bağlanır.
  • Modülden gelen Vcc, Arduino'dan 5V'a gidecektir.
  • GND'den GND'ye.
Arduino IDE'nizde RTC DS3231'i kullanmak için kitaplığı kurmayı unutmayın, aksi takdirde kod çalışmayacaktır ...

Şimdi sistemi bağladınız, sonraki şey, taslak kaynak kodu programlamak için. Kodları değiştirebilir ve ihtiyaçlarınıza göre uyarlayabilirsiniz, ancak tarihi Arduino'ya bağlı bir RTC DS3231'den alarak başlayabilirsiniz:

#include <Wire.h>
#include "RTClib.h"
 
// RTC_DS1307 rtc;
RTC_DS3231 rtc;
 
String daysOfTheWeek[7] = { "Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado" };
String monthsNames[12] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo",  "Junio", "Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre" };
 
void setup() {
   Serial.begin(9600);
   delay(1000); 
 
   if (!rtc.begin()) {
      Serial.println(F("No se encuentra el RTC"));
      while (1);
   }
 
   // Si se ha perdido el suministro eléctrico, fijar fecha y hora
   if (rtc.lostPower()) {
      // Fijar a fecha y hora (poner la de compilación del sketch)
      rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
      
      // Fijar a fecha y hora específica. En este ejemplo el 2021-01-01 a las 00:00:00
      // rtc.adjust(DateTime(2020, 1, 1, 0, 0, 0));
   }
}
//Imprimir completa obtenida la fecha en decimal
void printDate(DateTime date)
{
   Serial.print(date.year(), DEC);
   Serial.print('/');
   Serial.print(date.month(), DEC);
   Serial.print('/');
   Serial.print(date.day(), DEC);
   Serial.print(" (");
   Serial.print(daysOfTheWeek[date.dayOfTheWeek()]);
   Serial.print(") ");
   Serial.print(date.hour(), DEC);
   Serial.print(':');
   Serial.print(date.minute(), DEC);
   Serial.print(':');
   Serial.print(date.second(), DEC);
   Serial.println();
}
 
void loop() {
   // Obtener fecha actual y mostrar por Serial
   DateTime now = rtc.now();
   printDate(now);
 
   delay(3000);    //Espera 3 segundos
}

Ve RTC tarihini kullanmak için bazı görevler planlaörneğin ışıkları açıp kapatmak, otomatik sulama için veya bir alarmın çalması vb. Daha yüksek voltajlı cihazları işlemek için transistörleri kullanabileceğinizi veya röle:

#include <Wire.h>
#include "RTClib.h"
 
const int outputPin = LED_BUILTIN;
bool state = false;
 
// RTC_DS1307 rtc;
RTC_DS3231 rtc;
 
void setup() {
   Serial.begin(9600);
   delay(1000);
 
   if (!rtc.begin()) {
      Serial.println(F("Couldn't find RTC"));
      while (1);
   }
 
   if (rtc.lostPower()) {
      rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
   }
}
 
// Se comprueba si está programado el encendido
bool isScheduledON(DateTime date)
{
   int weekDay = date.dayOfTheWeek();
   float hours = date.hour() + date.minute() / 60.0;
 
   // Configuración de horas de 08:30 a 9:30 y de 22:00 a 23:00 (usando decimal)
   bool hourCondition = (hours > 8.50 && hours < 9.50) || (hours > 22.00 && hours < 23.00);
 
   // Configuración del día Lunes, Sábado y Domingo con números (recuerda que en inglés comienza la semana en Domingo=0, Lunes=1,...
   bool dayCondition = (weekDay == 1 || weekDay == 6 || weekDay == 0); 
   if (hourCondition && dayCondition)
   {
      return true;
   }
   return false;
}
 
void loop() {
   DateTime now = rtc.now();
 
   if (state == false && isScheduledON(now))      // Apagado
   {
      digitalWrite(outputPin, HIGH);
      state = true;
      Serial.print("Activado");
   }
   else if (state == true && !isScheduledON(now))  // Encendido
   {
      digitalWrite(outputPin, LOW);
      state = false;
      Serial.print("Desactivado");
   }
 
   delay(3000);
}


Makalenin içeriği şu ilkelerimize uygundur editoryal etik. Bir hata bildirmek için tıklayın burada.

İlk yorumu siz

Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.