DS3231: Arduino üçün real vaxt saatı və təqvim

DS3231

Bəzi layihələrdə vaxt, saat və ya tarixə dair bir dəlil olmalıdır. Ya vaxta əsaslanan müəyyən funksiyaları yerinə yetirmək, hadisələr təqvimi və ya qeydiyyatı aparmaq, vaxtı bir sistemdə saxlamaq və ya sadəcə rəqəmsal bir saat yaratmaq ehtiyacı səbəbiylə Arduino ilə. Ilə DS3231 onu əldə edə bilərsiniz, başqa biri komponentləri siyahıya əlavə etdiyimiz.

DS3231 axtardığınız moduldur və burada nəzarəti üçün lazım olan hər şeyi tapa bilərsiniz və sizə necə bir nümunə göstərəcəyəm Arduino ilə birləşdirin praktik bir nümunə ilə ...

DS3231 nədir?

DS3231

Hər şeydən əvvəl, nə olduğunu bilməlisiniz RTC (Real Zaman Saatı)və ya real vaxt saatı. Bu çiplər bir çox tətbiqdə çox tez-tez olur, əslində PC'nizdə onlardan biri anakartınızda var və eyni zamanda bir CR2032 batareyası həmçinin. BIOS / UEFI-də vaxtı və konfiqurasiyanı qoruyan və əməliyyat sisteminin önyükləmə zamanı götürdüyü vaxtdır (baxmayaraq ki, indi İnternetlə, serverlərlə sinxronizasiya daha dəqiqlik üçün istifadə edilə bilər, amma bu başqa bir hekayədir ...).

RTC-nin etdiyi şey vaxt ölçmələri əldə etməkdir, bu qədər sadədir. Digər elektron saat növlərindən fərqi sadəcə olaraq vaxtı ölçməkvə bunu saat siqnalı impulslarını sayaraq, tezliyini və dövrlərini bilməklə edir. Vaxtdan əlavə bir RTC, günlərin, həftələrin, ayların və illərin uçotunu aparmağa da imkan verir. Yəni tam tarix ...

Bunun mümkün olması üçün RTC-yə a Xtal və ya kvars kristalı bir tezliyi təmin edən bir rezonator rolunu oynayacaq. Əlavə olaraq, tarixi sayaraq yaddaşda saxlaya bilən elektron dövrəyə ehtiyacınız var. Devre, saniyə, dəqiqə, saat, gün, həftə, ay və il sayma qabiliyyətinə sahib olmalıdır.

o yaddaş dəyişkəndirBuna görə davamlı gücə sahib olmaq üçün batareyaya ehtiyac var. Batareyanız yoxdursa və ya tükənirsə silinəcəkdir ... Batareya bitəndə kompüterlərdə belə olur, səhv vaxt verirlər. PC açıq ikən onu konfiqurasiya etsəniz, RTC-yə güc verildiyi üçün vaxt saxlanacaq, ancaq bu batareyaya ehtiyac duyulduğunda söndüyü müddətlərdə ...

DIY layihələri üçün istehsalçılar ümumiyyətlə iki ümumi RTC çipindən istifadə edirlər DS1307 və DS3231. Hər ikisi də Maxim (əvvəlki adı Dallas Semiconductor) tərəfindən hazırlanır və DS3231, ikincisi kimi temperatur dəyişikliyindən təsirlənmədiyi üçün ikisindən daha dəqiqdir. Bu səbəbdən temperaturdan asılı olaraq bu qədər dalğalanmır və vaxtı daha dəqiq saxlayır.

Bəzən nəzərə çarpan istilik fərqləri ilə DS1307 gündə 1 və ya 2 dəq kimi geri qala bilər. Bəzi tətbiqlər üçün dözülməz bir şey.

DS3231, dəyişikliklərdən təsirlənmədiyi deyil, 2 dəqiqəlik dəqiqliyi təmin etmək üçün daxili temperatur ölçmə və kompensasiya sistemlərinə malikdir ki, bu da vaxt gecikməsi gündə təxminən 172ms, yəni ən çox həftədə 1 saniyədən biraz çoxdur. Və praktikada ümumiyyətlə ayda yalnız 1 və ya 2 saniyə arasında dəyişirlər.

Yola gəlincə RTC ilə əlaqə qurun DS3131, əldə etdiyi tarix dəyərlərini əldə etmək üçün edilir I2C avtobusu. Güc üçün DS2.3 üçün 5.5 ilə 3231v arasında istifadə edə bilərsiniz, bu da DS4.5 üçün 5.5-1307v-dən bir qədər aşağıdır, beləliklə daha qənaətli enerji sərf edə və batareyanın ömrünü uzada bilər.

Ayrıca, bu modullarda ümumiyyətlə a olduğunu bilməlisiniz EEPROM əlavə AT24C32 bəzi qeydləri və əvvəlki ölçüləri saxlamaq üçün kifayət qədər praktikdir.

applications

Tətbiqlərə gəldikdə, Arduino ilə bir saat tətbiq etmək, əsas götürərək fəaliyyət göstərən bir sistem yaratmaq kimi bəzilərindən bəhs etdim. Vaxt Nə olursa olsun, kompüterlər və vaxtı olan bir çox digər elektron cihaz və cihaz kimi cihazlara vaxt ayırmaq.

Da istifadə edilə bilər layihələr işıqlandırma, suvarma sistemləri, datalogger və s. üçün taymerlər yaratmaq. Ərizələr ən çox sayda ola bilər ...

RTC DS3231 alın

Modul DS3131 ucuzdur, bəzi xüsusi elektronik mağazalarında və ya eBay, AliExpress, Amazon, və s. kimi böyük mağazalarda tapa bilərsiniz. Birinə sahib olmaq istəyirsinizsə, bəzi tövsiyələr:

DS3231 Arduino İnteqrasiyası

Arduino IDE-nin ekran görüntüsü

Əgər DS3231 cihazınızı Arduino kartınızla birləşdirin və "vaxtı keçmiş" layihələr yaratmağa başlayın, əvvəlcə müvafiq əlaqələri qurmalısınız. Qoşa bilmək üçün bu qədər sadədir:

  • DS3231 kartının SLC pimi A5-lə birləşdirilməlidir Arduino UNO.
  • DS3231-in SDA-sı Arduinonun A4-ə bağlıdır.
  • Moduldan Vcc Arduinodan 5V-ə gedəcəkdir.
  • GND - GND.
Arduino IDE-də RTC DS3231-dən istifadə etmək üçün kitabxananı quraşdırmağı unutmayın və ya kod işləməyəcəkdir ...

İndi sistemi bağlamısınız, növbəti şey the yazmaqdır mənbə kodu eskiz Proqramlaşdırmaq. Kodları dəyişdirə və ehtiyaclarınıza uyğunlaşdıra bilərsiniz, ancaq sadəcə Arduinoya qoşulmuş bir RTC DS3231-dən tarixi alaraq başlaya bilərsiniz:

#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
}

Və RTC tarixini istifadə etmək üçün bəzi tapşırıqları təyin edinişıqları açmaq və ya söndürmək, avtomatik suvarma və ya siqnal siqnalı vermək üçün və s. Unutmayın ki, daha yüksək gərginlikli cihazlarla işləmək üçün tranzistorlardan istifadə edə bilərsiniz estafet:

#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);
}


Məqalənin məzmunu bizim prinsiplərimizə uyğundur redaktor etikası. Xəta bildirmək üçün klikləyin burada.

Şərh yazan ilk kişi olun

Şərhinizi buraxın

E-poçt ünvanından dərc olunmayacaq. Lazım alanlar qeyd olunur *

*

*

  1. Verilərdən məsul: Miguel Ángel Gatón
  2. Verilənlərin məqsədi: Nəzarət SPAM, şərh rəhbərliyi.
  3. Qanuniləşdirmə: Sizin razılığınız
  4. Məlumatların ötürülməsi: Qanuni öhdəlik xaricində məlumatlar üçüncü şəxslərə çatdırılmayacaqdır.
  5. Veri saxlama: Occentus Networks (AB) tərəfindən yerləşdirilən verilənlər bazası
  6. Hüquqlar: İstədiyiniz zaman məlumatlarınızı məhdudlaşdıra, bərpa edə və silə bilərsiniz.