काही प्रकल्पांमध्ये वेळ, वेळ किंवा तारीख यांचा पुरावा असणे आवश्यक असते. एकतर वेळेवर आधारित काही कार्ये करण्याची आवश्यकता, इव्हेंट्स किंवा नोंदणीचे कॅलेंडर राखण्यासाठी, सिस्टममध्ये वेळ ठेवण्यासाठी किंवा फक्त डिजिटल घड्याळ तयार करण्यासाठी अर्दूनो सह. सह DS3231 आपण ते मिळवू शकता, आणखी एक घटक जे आम्ही यादीमध्ये समाविष्ट करतो.
डीएस 3231 हे आपण शोधत असलेले मॉड्यूल आहे आणि येथे आपल्याला आपल्या नियंत्रणाकरिता आवश्यक असलेली प्रत्येक गोष्ट मिळेल आणि मी त्याचे उदाहरण कसे दर्शवितो हे अर्दूनो सह समाकलित करा व्यावहारिक उदाहरणासह ...
DS3231 म्हणजे काय?
सर्व प्रथम, आपल्याला काय माहित असावे आरटीसी (रिअल टाइम क्लॉक)किंवा वास्तविक वेळ घड्याळ. या चिप्स बर्याच वेळा बर्याच अनुप्रयोगांमध्ये असतात, खरं तर, आपल्या संगणकावरील एक आपल्या संगणकावर आपल्या मदरबोर्डवर आहे आणि त्याद्वारे समर्थित CR2032 बॅटरी देखील. हेच आहे जे बीआयओएस / यूईएफआय मधील वेळ आणि कॉन्फिगरेशनची देखभाल करते आणि ज्यावरून ऑपरेटिंग सिस्टम योग्य वेळी बूट करतेवेळी घेते (जरी आता, इंटरनेटसह, सर्व्हर्ससह सिंक्रोनाइझेशन अधिक सुस्पष्टतेसाठी वापरले जाऊ शकते, परंतु हे आणखी एक गोष्ट आहे…).
आरटीसी काय करते ते मोजमाप घेणे, हे सोपे आहे. इतर प्रकारच्या इलेक्ट्रॉनिक घड्याळांमधील फरक म्हणजे ते फक्त आहेत वेळ मोजा, आणि घड्याळ सिग्नल डाळींची मोजणी करून, वारंवारता आणि कालावधी जाणून घेऊन हे करते. वेळ व्यतिरिक्त, एक आरटीसी आपल्याला दिवस, आठवडे, महिने आणि वर्षांचा लेखाजोखा ठेवू देतो. म्हणजेच, संपूर्ण तारीख ...
हे शक्य होण्यासाठी, आरटीसीसह ए असणे आवश्यक आहे Xtal किंवा क्वार्ट्ज क्रिस्टल जे रेझोनेटर म्हणून कार्य करेल, जे वारंवारता प्रदान करते. याव्यतिरिक्त, आपल्याला मेमरीमध्ये तारीख मोजण्यात आणि संचयित करण्यास सक्षम इलेक्ट्रॉनिक सर्किटरी आवश्यक आहे. सर्किटरी सेकंद, मिनिटे, तास, दिवस, आठवडे, महिने आणि वर्षे मोजण्यात सक्षम असणे आवश्यक आहे.
इसा यांनी स्मृती अस्थिर आहेम्हणूनच, सतत शक्ती मिळविण्यासाठी, बॅटरीची आवश्यकता असते. आपल्याकडे बॅटरी नसल्यास किंवा ती संपली नाही तर ती मिटविली जाईल ... बॅटरी संपली की पीसीमध्ये असे घडते, ते चुकीचा वेळ देतात. पीसी चालू असताना आपण कॉन्फिगर केल्यास, आरटीसी चालू असल्याने वेळ ठेवला जाईल, परंतु जेव्हा त्या बॅटरीची आवश्यकता असते तेव्हा प्रक्रिया सुरू असते.
डीआयवाय प्रकल्पांसाठी, निर्माते सहसा दोन सामान्य आरटीसी चीप वापरतात, त्या आहेत DS1307 आणि DS3231. हे दोन्ही मॅक्सिमने बनविलेले आहेत (पूर्वी डॅलास सेमीकंडक्टर) आणि डीएस 3231 त्या दोघांपेक्षा अधिक अचूक आहे, कारण पूर्वीच्या तापमानाच्या बदलांमुळे त्याचा परिणाम होत नाही. म्हणूनच, तपमानानुसार ते तितके चढउतार होत नाही आणि यामुळे वेळ अधिक तंतोतंत राहते.
डीएस 3231२2१ हे असे नाही की ते भिन्नतेमुळे प्रभावित झाले नाही, परंतु त्यात XNUMX पीपीएम अचूकता सुनिश्चित करण्यासाठी अंगभूत तपमान मापन आणि नुकसान भरपाई प्रणाली आहे, जे समतुल्य असेल वेळ अंतर दिवसाचे सुमारे 172ms म्हणजेच आठवड्यातून 1 सेकंदापेक्षा थोडे अधिक. आणि सराव मध्ये, ते सहसा महिन्यात 1 किंवा 2 सेकंद बदलतात.
मार्ग म्हणून आरटीसीशी संवाद साधा प्राप्त होणार्या तारखेचे मूल्ये मिळविण्यासाठी डीएस 3131, ते करून केले आय 2 सी बस. आणि शक्तीसाठी, आपण DS2.3 साठी 5.5 ते 3231v वापरू शकता, जे DS4.5 साठी 5.5 ते 1307v पेक्षा काहीसे कमी आहे, जेणेकरून ते अधिक ऊर्जा कार्यक्षम होईल आणि बॅटरी अधिक काळ टिकेल.
तसेच, आपल्याला हे माहित असले पाहिजे की या विभागांमध्ये सामान्यत: EEPROM अतिरिक्त AT24C32 काही रेकॉर्ड आणि मागील मोजमाप ठेवण्यासाठी, जे अगदी व्यावहारिक आहे.
अॅप्लिकेशन्स
अनुप्रयोगांविषयी, मी आधीच काहींचा उल्लेख केला आहे, जसे की अर्डिनोसह घड्याळ लागू करणे, सिस्टम तयार करण्यासाठी जे यावर आधारित कार्य करते वेळ काहीही असो, पीसी आणि इतर बर्याच इलेक्ट्रॉनिक उपकरणे आणि वेळ असलेल्या उपकरणांवर वेळ ठेवणे इ.
मध्ये देखील वापरले जाऊ शकते प्रकल्प प्रकाश, सिंचन प्रणाली, डेटाग्लॉगर इ. साठी टाइमर तयार करणे. अनुप्रयोग सर्वात असंख्य असू शकतात ...
एक आरटीसी डीएस 3231 खरेदी करा
मॉड्यूल डीएस 3131 स्वस्त आहे, आणि आपण हे काही विशिष्ट इलेक्ट्रॉनिक्स स्टोअरमध्ये किंवा ईबे, अलीएक्सप्रेस, Amazonमेझॉन इत्यादी मोठ्या स्टोअरमध्ये शोधू शकता. आपल्याकडे एखादी आवड असल्यास आपल्यास येथे काही शिफारसी आहेतः
- DS3231 खरेदी करा
- कोणतीही उत्पादने आढळली नाहीत.
DS3231 अर्दूनो एकत्रीकरण
आपण इच्छित असल्यास आपला DS3231 आपल्या आर्दूनो बोर्डसह समाकलित करा आणि "वेळेवर" प्रकल्प तयार करण्यास प्रारंभ करा, आपण प्रथम योग्य कनेक्शन केले पाहिजेत. ते कनेक्ट करण्यात सक्षम होण्यासाठी, हे इतके सोपे आहे:
- डीएस 3231 बोर्डाचा एसएलसी पिन आपल्या ए 5 शी जोडलेला असणे आवश्यक आहे Arduino UNO.
- डीएस 3231 चा एसडीए एर्डिनोच्या ए 4 शी जोडलेला आहे.
- मॉड्यूलमधील व्हीसीसी अर्डिनोहून 5 व्हीवर जाईल.
- जीएनडी ते जीएनडी.
आता आपण सिस्टम कनेक्ट झाला आहे, पुढील गोष्ट म्हणजे लिहा स्केच स्त्रोत कोड तो कार्यक्रम करण्यासाठी. आपण कोड सुधारित करू शकता आणि आपल्या गरजा अनुकूल करू शकता, परंतु आपण आरडिनोला कनेक्ट केलेल्या आरटीसी डीएस 3231 वरून तारीख मिळवून प्रारंभ करू शकता:
#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); }