DS3231: שעון בזמן אמת ולוח שנה עבור ה- Arduino שלך

DS3231

בפרויקטים מסוימים יש צורך להוכיח את השעה, השעה או התאריך. בין אם בגלל הצורך לבצע פונקציות מסוימות על בסיס זמן, לקיים לוח אירועים או רישום, לשמור את הזמן במערכת, או פשוט ליצור שעון דיגיטלי עם ארדואינו. עם ה- DS3231 אתה יכול להשיג את זה, עוד אחד מה- רכיבים שנוסיף לרשימה.

DS3231 הוא המודול שחיפשת, וכאן תמצא את כל מה שאתה צריך לשליטה שלו ואני גם אראה לך דוגמה כיצד לשלב את זה עם Arduino עם דוגמה מעשית ...

מהו DS3231?

DS3231

קודם כל, כדאי שתדעו מה א RTC (שעון זמן אמת), או שעון בזמן אמת. שבבים אלו שכיחים מאוד בהרבה יישומים, למעשה, במחשב שלך יש אחד מהם בלוח האם שלך, והוא מופעל גם על ידי סוללת CR2032 גַם. זה ששומר על הזמן והתצורה ב- BIOS / UEFI וממנה מערכת ההפעלה לוקחת את זה בעת האתחול כדי להיות בזמן (אם כי כעת, באמצעות האינטרנט, ניתן להשתמש בסינכרון עם שרתים לדיוק רב יותר, אך זה הוא סיפור אחר ...).

מה שה- RTC עושה זה להשיג מדידות זמן, כל כך פשוטות. ההבדל מסוגים אחרים של שעונים אלקטרוניים הוא שהם פשוט למדוד את הזמן, והיא עושה זאת על ידי ספירת פעימות איתות שעון, בידיעת התדירות והתקופות שלה. בנוסף לזמן, RTC מאפשר לך גם לנהל חשבונאות של ימים, שבועות, חודשים ושנים. כלומר, התאריך המלא ...

כדי שזה יתאפשר, על RTC להיות מלווה בא גביש Xtal או קוורץ שישמש כמהוד, זה שמספק את התדר. בנוסף, אתה זקוק למעגלים אלקטרוניים המסוגלים לספור ולאחסן את התאריך בזיכרון. המעגל חייב להיות מסוגל לספור שניות, דקות, שעות, ימים, שבועות, חודשים ושנים.

כי הזיכרון הוא תנודתילכן היא זקוקה לסוללה, שיהיה לה כוח קבוע. אם אין לך סוללה או שהיא נגמרת, היא תימחק ... זה מה שקורה למחשבים אישיים כאשר הסוללה נגמרת, הם נותנים זמן שגוי. אם אתה מגדיר את זה בזמן שהמחשב פועל, הזמן יישמר, מכיוון שה- RTC מופעל, אך הוא נמצא בתהליכים שבמהלכו הוא כבוי כאשר יש צורך בסוללה זו ...

עבור פרויקטים של DIY, יצרנים משתמשים בדרך כלל בשני שבבי RTC נפוצים, שהם DS1307 ו- DS3231. שניהם מיוצרים על ידי מקסים (לשעבר דאלאס סמיקונדקטור), וה- DS3231 הוא המדויק יותר מבין השניים מכיוון שהוא אינו מושפע משינויים בטמפרטורה כמו שהראשון עושה. לכן, הוא לא משתנה כל כך הרבה בהתאם לטמפרטורה, והוא שומר על הזמן בצורה מדויקת יותר.

לעיתים, עם הבדלי טמפרטורה ניכרים, ה- DS1307 יכול להיות מחוץ לשלב של עד דקה או 1 דקות ליום. משהו בלתי נסבל עבור יישומים מסוימים.

ה- DS3231 הוא לא שהוא לא מושפע מהווריאציות, אלא שיש לו מערכות מדידה וטמפרטורה מובנות כדי להבטיח דיוק של 2 סל"ד, שווה ערך ל פיגור זמן בערך 172ms ביום, כלומר, קצת יותר משנייה בשבוע לכל היותר. ובפועל, הם בדרך כלל משתנים רק 1 או 1 שניות בחודש.

לגבי הדרך לתקשר עם ה- RTC DS3131 כדי להשיג את ערכי התאריך שהוא מקבל, זה נעשה על ידי אוטובוס I2C. ובאמצעות הספק, תוכלו להשתמש ב- 2.3 עד 5.5 וולט עבור ה- DS3231, שהוא מעט נמוך מה- 4.5 עד 5.5 וולט עבור ה- DS1307, כך שהוא יכול להיות חסכוני יותר באנרגיה ולגרום לסוללה להחזיק זמן רב יותר.

כמו כן, עליך לדעת כי לרוב במודולים אלה יש EEPROM AT24C32 נוספים לאחסן כמה רשומות ומדידות קודמות, וזה די מעשי.

יישומים

באשר לאפליקציות, כבר הזכרתי כמה כאלה, כגון יישום שעון עם Arduino, כדי ליצור מערכת שפועלת על בסיס הזמן מה שלא יהיה, כדי לשמור על הזמן על ציוד כמו מחשבים אישיים ומכשירים אלקטרוניים רבים אחרים שיש להם זמן וכו '.

יכול לשמש גם ב פרויקטים ליצור טיימרים לתאורה, מערכות השקיה, לוגר נתונים וכו '. היישומים יכולים להיות רבים ביותר ...

קנו RTC DS3231

המודול DS3131 זול, ותוכלו למצוא אותו בכמה חנויות אלקטרוניקה מתמחות או בחנויות גדולות כמו eBay, AliExpress, אמזון וכו '. אם אתה מעוניין לקבל אחת, הנה כמה המלצות:

שילוב DS3231 Arduino

צילום מסך של Arduino IDE

אם אתה רוצה לשלב את DS3231 עם לוח ה- Arduino שלך והתחל ליצור פרויקטים "מתוזמנים", ראשית עליך ליצור את הקשרים המתאימים. כדי להיות מסוגל לחבר אותו, זה פשוט כמו:

  • סיכת SLC של לוח DS3231 חייבת להיות מחוברת ל- A5 שלך Arduino UNO.
  • SDA של DS3231 מחובר ל- A4 של Arduino.
  • Vcc מהמודול יעבור ל- 5V מארדואינו.
  • GND ל- GND.
זכור להתקין את הספרייה כדי להשתמש ב- RTC DS3231 ב- Arduino IDE שלך או שהקוד לא יעבוד ...

עכשיו יש לך את המערכת מחוברת, הדבר הבא הוא לכתוב את שרטט קוד מקור לתכנת אותו. אתה יכול לשנות את הקודים ולהתאים אותם לצרכים שלך, אבל אתה יכול להתחיל פשוט לקבל את התאריך מ- RTC DS3231 המחובר לארדואינו:

#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 (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.