DS3231: ساعة وتقويم في الوقت الفعلي لاردوينو الخاص بك

DS3231

في بعض المشاريع من الضروري أن يكون لديك دليل على الوقت أو الساعة أو التاريخ. إما بسبب الحاجة إلى أداء وظائف معينة بناءً على الوقت ، أو للحفاظ على تقويم الأحداث أو التسجيل ، أو للحفاظ على الوقت في النظام ، أو ببساطة لإنشاء ساعة رقمية مع اردوينو. مع DS3231 يمكنك الحصول عليه ، آخر من مكونات التي نضيفها إلى القائمة.

DS3231 هي الوحدة التي كنت تبحث عنها ، وهنا ستجد كل ما تحتاجه للتحكم بها وسأوضح لك أيضًا مثالاً على كيفية دمجه مع Arduino مع مثال عملي ...

ما هو DS3231؟

DS3231

بادئ ذي بدء ، يجب أن تعرف ما هو ملف RTC (ساعة الوقت الحقيقي)، أو ساعة الوقت الحقيقي. هذه الرقائق متكررة جدًا في العديد من التطبيقات ، في الواقع ، يحتوي جهاز الكمبيوتر الخاص بك على واحد منها على اللوحة الأم ، وهو أيضًا مدعوم من قبل بطارية CR2032 أيضا. هو الذي يحافظ على الوقت والتكوين في BIOS / UEFI والذي يأخذ منه نظام التشغيل عند التمهيد ليكون في الوقت المحدد (على الرغم من أنه الآن ، مع الإنترنت ، يمكن استخدام المزامنة مع الخوادم لمزيد من الدقة ، ولكن هذا هي قصة أخرى ...).

ما يفعله RTC هو الحصول على قياسات الوقت بهذه البساطة. الفرق عن الأنواع الأخرى من الساعات الإلكترونية هو أنها ببساطة قياس الوقتويتم ذلك عن طريق حساب نبضات إشارة الساعة ومعرفة ترددها وفتراتها. بالإضافة إلى الوقت ، يتيح لك RTC أيضًا الاحتفاظ بحساب الأيام والأسابيع والشهور والسنوات. وهذا هو التاريخ الكامل ...

لكي يكون هذا ممكنًا ، يجب أن يكون RTC مصحوبًا بامتداد Xtal أو بلور الكوارتز الذي سيعمل كرنان ، الذي يوفر التردد. بالإضافة إلى ذلك ، أنت بحاجة إلى دوائر إلكترونية قادرة على حساب التاريخ وتخزينه في الذاكرة. يجب أن تكون الدائرة قادرة على حساب الثواني والدقائق والساعات والأيام والأسابيع والشهور والسنوات.

أن الذاكرة متقلبةلهذا السبب يحتاج إلى البطارية ، للحصول على طاقة ثابتة. إذا لم يكن لديك بطارية أو نفدت ، فسيتم محوها ... وهذا ما يحدث لأجهزة الكمبيوتر عندما تنفد البطارية ، فإنها تعطي وقتًا غير صحيح. إذا قمت بتكوينه أثناء تشغيل الكمبيوتر ، فسيتم الاحتفاظ بالوقت ، نظرًا لأن RTC قيد التشغيل ، ولكن أثناء العمليات التي يتم إيقاف تشغيلها خلالها عند الحاجة إلى تلك البطارية ...

بالنسبة لمشاريع DIY ، يستخدم المصنّعون عادةً شريحتين شائعتين RTC ، وهما DS1307 و DS3231. كلاهما مصنوع بواسطة Maxim (المعروف سابقًا باسم Dallas Semiconductor) ، و DS3231 هو الأكثر دقة من الاثنين ، لأنه لا يتأثر بتغيرات درجة الحرارة كما هو الحال في السابق. لذلك ، لا يتقلب كثيرًا اعتمادًا على درجة الحرارة ، ويحافظ على الوقت بدقة أكبر.

في بعض الأحيان ، مع وجود اختلافات ملحوظة في درجة الحرارة ، يمكن أن يتأخر DS1307 بمقدار دقيقة أو دقيقتين في اليوم. شيء لا يطاق بالنسبة لبعض التطبيقات.

لا يعني DS3231 أنه لا يتأثر بالاختلافات ، ولكنه يحتوي على أنظمة مدمجة لقياس درجة الحرارة والتعويض لضمان دقة 2 جزء في المليون ، وهو ما يعادل الوقت الضائع حوالي 172 مللي ثانية في اليوم ، أي أكثر بقليل من ثانية واحدة في الأسبوع على الأكثر. وعمليًا ، فإنها تختلف عادةً لمدة ثانية أو ثانيتين شهريًا.

أما عن الطريق التواصل مع RTC DS3131 للحصول على قيم التاريخ التي تحصل عليها ، يتم ذلك بواسطة حافلة I2C. وللحصول على الطاقة ، يمكنك استخدام 2.3 إلى 5.5 فولت لـ DS3231 ، وهو أقل إلى حد ما من 4.5 إلى 5.5 فولت لـ DS1307 ، لذلك يمكن أن يكون أكثر كفاءة في استخدام الطاقة ويجعل البطارية تدوم لفترة أطول.

أيضًا ، يجب أن تعلم أن هذه الوحدات عادةً ما تحتوي على ملف EEPROM AT24C32 إضافي لتخزين بعض السجلات والقياسات السابقة ، وهو أمر عملي تمامًا.

التطبيقات

أما بالنسبة للتطبيقات ، فقد سبق أن ذكرت بعضها ، مثل تنفيذ ساعة مع Arduino ، لإنشاء نظام يعمل على أساس الساعة مهما يكن ، للحفاظ على الوقت على المعدات مثل أجهزة الكمبيوتر والعديد من الأجهزة والأجهزة الإلكترونية الأخرى التي لديها وقت ، وما إلى ذلك.

يمكن استخدامها أيضًا في ملفات مشاريع لإنشاء مؤقتات للإضاءة وأنظمة الري و datalogger وما إلى ذلك. يمكن أن تكون التطبيقات الأكثر عددًا ...

اشترِ RTC DS3231

وحدة DS3131 رخيص، ويمكنك العثور عليه في بعض متاجر الإلكترونيات المتخصصة أو في المتاجر الكبيرة مثل eBay و AliExpress و Amazon وما إلى ذلك. إذا كنت مهتمًا بالحصول على واحدة ، فإليك بعض التوصيات:

DS3231 تكامل اردوينو

لقطة شاشة لـ Arduino IDE

إذا كنت تريد قم بدمج DS3231 مع لوحة Arduino الخاصة بك والبدء في إنشاء مشاريع "محددة بوقت" ، يجب عليك أولاً إجراء الاتصالات المناسبة. لتتمكن من توصيله ، يكون الأمر بسيطًا مثل:

  • يجب توصيل سن SLC للوحة DS3231 بـ A5 الخاص بك Arduino UNO.
  • SDA الخاص بـ DS3231 متصل بـ A4 من Arduino.
  • سيذهب Vcc من الوحدة النمطية إلى 5V من Arduino.
  • GND إلى GND.
تذكر تثبيت المكتبة لاستخدام RTC DS3231 في Arduino IDE الخاص بك وإلا فلن يعمل الرمز ...

الآن لديك النظام متصل ، والشيء التالي هو كتابة ملف رسم شفرة المصدر لبرمجتها. يمكنك تعديل الرموز وتكييفها وفقًا لاحتياجاتك ، ولكن يمكنك البدء بمجرد الحصول على التاريخ من RTC DS3231 المتصل بـ Arduino:

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

ومن أجل استخدام تاريخ RTC ل جدولة بعض المهام، على سبيل المثال لتشغيل الأضواء أو إطفاءها ، أو للري التلقائي ، أو لإصدار صوت إنذار ، وما إلى ذلك. تذكر أنه للتعامل مع الأجهزة ذات الجهد العالي ، يمكنك استخدام الترانزستورات أو المرحل:

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


كن أول من يعلق

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.