DS3231: अपने Arduino के लिए वास्तविक समय घड़ी और कैलेंडर

DS3231

कुछ परियोजनाओं में समय, घंटे या तारीख का प्रमाण होना आवश्यक है। या तो समय के आधार पर कुछ कार्यों को करने की आवश्यकता के कारण, घटनाओं या पंजीकरण के एक कैलेंडर को बनाए रखने के लिए, एक प्रणाली में समय रखने के लिए, या बस एक डिजिटल घड़ी बनाने के लिए Arduino के साथ. साथ DS3231 आप इसे प्राप्त कर सकते हैं, का एक और घटकों कि हम सूची में जोड़ें।

DS3231 वह मॉड्यूल है जिसकी आप तलाश कर रहे थे और यहां आपको वह सब कुछ मिलेगा जो आपको इसके नियंत्रण के लिए चाहिए और मैं आपको इसका एक उदाहरण भी दिखाऊंगा कि कैसे इसे Arduino के साथ एकीकृत करें एक व्यावहारिक उदाहरण के साथ ...

DS3231 क्या है?

DS3231

सबसे पहले, आपको पता होना चाहिए कि क्या आरटीसी (वास्तविक समय घड़ी), या वास्तविक समय घड़ी। ये चिप्स अनुप्रयोगों की एक भीड़ में बहुत अक्सर होते हैं, वास्तव में, आपके पीसी में उनमें से एक आपके मदरबोर्ड पर है, और यह एक में भी संचालित है CR2032 की बैटरी भी। यह वह है जो BIOS / UEFI में समय और कॉन्फ़िगरेशन को बनाए रखता है और जिसमें से ऑपरेटिंग सिस्टम इसे समय पर बूट करने के लिए लेता है (हालांकि अब, इंटरनेट के साथ, सर्वर के साथ सिंक्रनाइज़ेशन अधिक सटीक रूप से उपयोग किया जा सकता है, लेकिन यह एक और कहानी है ...)।

आरटीसी जो करता है वह समय मापन प्राप्त करता है, वह सरल है। अन्य प्रकार की इलेक्ट्रॉनिक घड़ियों से अंतर यह है कि वे बस समय को मापें, और यह ऐसा होता है कि घड़ी की सिग्नल दालों की गिनती करके, इसकी आवृत्ति और अवधि को जानते हुए। समय के अलावा, एक आरटीसी आपको दिनों, हफ्तों, महीनों और वर्षों का लेखा-जोखा रखने की भी अनुमति देता है। यानी पूरी तारीख ...

यह संभव होने के लिए, आरटीसी को एक साथ होना चाहिए Xtal या क्वार्ट्ज क्रिस्टल जो एक अनुनादक के रूप में कार्य करेगा, वह जो आवृत्ति प्रदान करता है। इसके अतिरिक्त, आपको इलेक्ट्रॉनिक सर्किटरी की आवश्यकता होती है जो एक मेमोरी में तारीख को गिनने और संग्रहीत करने में सक्षम है। सर्किट्री सेकंड, मिनट, घंटे, दिन, सप्ताह, महीने और साल गिनने में सक्षम होना चाहिए।

ईएसए स्मृति अस्थिर हैइसीलिए इसमें निरंतर शक्ति होने के लिए, बैटरी की आवश्यकता होती है। यदि आपके पास बैटरी नहीं है या यह बाहर चला जाता है, तो इसे मिटा दिया जाएगा ... यही कारण है कि जब बैटरी चलती है तो पीसी के साथ होता है, वे एक गलत समय देते हैं। यदि आप पीसी चालू करते समय इसे कॉन्फ़िगर करते हैं, तो समय रखा जाएगा, क्योंकि आरटीसी को संचालित किया जा रहा है, लेकिन यह उन प्रक्रियाओं के दौरान है, जिसके दौरान यह बंद है जब बैटरी की आवश्यकता होती है ...

DIY परियोजनाओं के लिए, निर्माता आमतौर पर दो सामान्य आरटीसी चिप्स का उपयोग करते हैं, जो हैं DS1307 और DS3231। दोनों मैक्सिम (पूर्व में डलास सेमीकंडक्टर) द्वारा बनाए गए हैं, और DS3231 दोनों में से अधिक सटीक है, क्योंकि यह पूर्व की तरह तापमान भिन्नता से प्रभावित नहीं है। इसलिए, यह तापमान के आधार पर इतना उतार-चढ़ाव नहीं करता है, और यह समय को और अधिक सटीक रखता है।

कई बार, ध्यान देने योग्य तापमान अंतर के साथ, DS1307 प्रति दिन 1 या 2 मिनट तक चरण से बाहर हो सकता है। कुछ अनुप्रयोगों के लिए कुछ असहनीय।

DS3231 यह नहीं है कि यह विविधताओं से अप्रभावित है, लेकिन यह 2ppm की सटीकता सुनिश्चित करने के लिए अंतर्निहित तापमान माप और क्षतिपूर्ति प्रणाली है, जो एक बराबर के बराबर होगा समय अंतराल लगभग 172ms एक दिन में, जो कि सप्ताह में 1 सेकंड से थोड़ा अधिक है। और व्यवहार में, वे आम तौर पर महीने में केवल 1 या 2 सेकंड बदलते हैं।

रास्ते के लिए के रूप में RTC के साथ संवाद DS3131 को प्राप्त होने वाले दिनांक मूल्यों को प्राप्त करने के लिए, यह द्वारा किया जाता है I2C बस। और पावर के लिए, आप DS2.3 के लिए 5.5 से 3231 v का उपयोग कर सकते हैं, जो DS4.5 के लिए 5.5 से 1307v तक कुछ कम है, इसलिए यह अधिक ऊर्जा कुशल हो सकता है और बैटरी को लंबे समय तक बना सकता है।

इसके अलावा, आपको पता होना चाहिए कि ये मॉड्यूल आमतौर पर ए EEPROM अतिरिक्त AT24C32 कुछ रिकॉर्ड और पिछले मापों को संग्रहीत करने के लिए, जो काफी व्यावहारिक है।

अनुप्रयोगों

अनुप्रयोगों के लिए, मैंने पहले ही कुछ का उल्लेख किया है, जैसे कि Arduino के साथ एक घड़ी को लागू करना, एक प्रणाली बनाना जो इसके आधार पर कार्य करता है समय जो भी हो, उपकरणों जैसे पीसी और कई अन्य इलेक्ट्रॉनिक उपकरणों और उपकरणों पर समय रखने के लिए जिनके पास समय है, आदि।

में भी इस्तेमाल किया जा सकता है परियोजनाओं प्रकाश व्यवस्था, सिंचाई प्रणाली, डस्टीसेगर, आदि के लिए टाइमर बनाने के लिए आवेदन सबसे कई हो सकते हैं ...

RTC DS3231 खरीदें

मॉड्यूल DS3131 सस्ता है, और आप इसे कुछ विशेष इलेक्ट्रॉनिक्स स्टोरों या बड़े स्टोरों जैसे कि eBay, AliExpress, Amazon, आदि में पा सकते हैं। यदि आप एक होने में रुचि रखते हैं, तो यहां कुछ सिफारिशें दी गई हैं:

DS3231 Arduino एकीकरण

Arduino IDE का स्क्रीनशॉट

यदि आप चाहते हैं अपने Arduino बोर्ड के साथ अपने DS3231 को एकीकृत करें और "समयबद्ध" परियोजनाएं बनाना शुरू करें, आपको पहले उपयुक्त कनेक्शन बनाना होगा। इसे जोड़ने में सक्षम होने के लिए, यह उतना ही सरल है:

  • DS3231 बोर्ड का SLC पिन आपके A5 से जुड़ा होना चाहिए Arduino UNO.
  • DS3231 का SDA Arduino के A4 से जुड़ा है।
  • मॉड्यूल से Vcc Arduino से 5V तक जाएगा।
  • GND से GND।
अपने Arduino IDE में RTC DS3231 का उपयोग करने के लिए लाइब्रेरी स्थापित करना याद रखें या कोड काम नहीं करेगा ...

अब आपके पास सिस्टम जुड़ा हुआ है, अगली बात यह है कि लिखना है स्केच स्रोत कोड इसे प्रोग्राम करने के लिए। आप कोड को संशोधित कर सकते हैं और उन्हें अपनी आवश्यकताओं के अनुसार अनुकूलित कर सकते हैं, लेकिन आप Arduino से जुड़े 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
}

और आरटीसी तारीख का उपयोग करने के लिए कुछ कार्य निर्धारित करें, जैसे कि रोशनी को चालू या बंद करने के लिए, स्वचालित पानी के लिए, या ध्वनि के लिए अलार्म के लिए, आदि। याद रखें कि उच्च वोल्टेज उपकरणों को संभालने के लिए आप ट्रांजिस्टर का उपयोग कर सकते हैं या रिले:

#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. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।