DS3231: உங்கள் Arduino க்கான நிகழ்நேர கடிகாரம் மற்றும் காலண்டர்

DS3231

சில திட்டங்களில் நேரம், மணிநேரம் அல்லது தேதிக்கான ஆதாரம் இருப்பது அவசியம். நேரத்தை அடிப்படையாகக் கொண்டு சில செயல்பாடுகளைச் செய்ய வேண்டிய அவசியம், நிகழ்வுகள் அல்லது பதிவின் காலெண்டரைப் பராமரித்தல், நேரத்தை ஒரு அமைப்பில் வைத்திருத்தல் அல்லது டிஜிட்டல் கடிகாரத்தை உருவாக்குவது Arduino உடன். உடன் DS3231 நீங்கள் அதைப் பெறலாம், இன்னொன்று கூறுகள் நாங்கள் பட்டியலில் சேர்க்கிறோம்.

DS3231 என்பது நீங்கள் தேடிய தொகுதி, அதன் கட்டுப்பாட்டிற்கு தேவையான அனைத்தையும் இங்கே நீங்கள் காண்பீர்கள், மேலும் எப்படி என்பதற்கான உதாரணத்தையும் நான் உங்களுக்குக் காண்பிப்பேன் Arduino உடன் அதை ஒருங்கிணைக்கவும் ஒரு நடைமுறை எடுத்துக்காட்டுடன் ...

DS3231 என்றால் என்ன?

DS3231

முதலில், நீங்கள் என்னவென்று தெரிந்து கொள்ள வேண்டும் ஆர்டிசி (ரியல் டைம் கடிகாரம்), அல்லது நிகழ்நேர கடிகாரம். இந்த சில்லுகள் பல பயன்பாடுகளில் அடிக்கடி நிகழ்கின்றன, உண்மையில், உங்கள் கணினியில் அவற்றில் ஒன்று உங்கள் மதர்போர்டில் உள்ளது, மேலும் இது ஒரு மூலம் இயக்கப்படுகிறது CR2032 பேட்டரி மேலும். இது BIOS / UEFI இல் நேரத்தையும் உள்ளமைவையும் பராமரிக்கிறது மற்றும் சரியான நேரத்தில் துவக்கும்போது இயக்க முறைமை அதை எடுத்துக்கொள்கிறது (இப்போது, ​​இணையத்துடன், சேவையகங்களுடன் ஒத்திசைவு அதிக துல்லியத்திற்கு பயன்படுத்தப்படலாம், ஆனால் இது மற்றொரு கதை…).

ஆர்டிசி செய்வது நேர அளவீடுகளைப் பெறுவது, அது எளிது. மற்ற வகை மின்னணு கடிகாரங்களிலிருந்து வேறுபாடு என்னவென்றால் அவை வெறுமனே நேரத்தை அளவிடவும், மற்றும் கடிகார சமிக்ஞை பருப்புகளை எண்ணுவதன் மூலம், அதன் அதிர்வெண் மற்றும் காலங்களை அறிந்து கொள்வதன் மூலம் அவ்வாறு செய்கிறது. நேரத்திற்கு கூடுதலாக, நாட்கள், வாரங்கள், மாதங்கள் மற்றும் வருடங்களின் கணக்கீட்டை வைத்திருக்க ஒரு ஆர்டிசி உங்களை அனுமதிக்கிறது. அதாவது, முழு தேதி ...

இது சாத்தியமாக இருக்க, ஆர்டிசி ஒரு உடன் இருக்க வேண்டும் Xtal அல்லது குவார்ட்ஸ் படிக இது அதிர்வெண்ணை வழங்கும் ஒரு ரெசனேட்டராக செயல்படும். கூடுதலாக, தேதியை நினைவகத்தில் சேமித்து சேமிக்கும் திறன் கொண்ட மின்னணு சுற்றுகள் உங்களுக்கு தேவை. சுற்று வினாடிகள், நிமிடங்கள், மணிநேரம், நாட்கள், வாரங்கள், மாதங்கள் மற்றும் ஆண்டுகளை எண்ணும் திறன் கொண்டதாக இருக்க வேண்டும்.

ESA நினைவகம் நிலையற்றதுஅதனால்தான் நிலையான சக்தி பெற, பேட்டரி தேவை. உங்களிடம் பேட்டரி இல்லையென்றால் அல்லது அது இயங்கினால், அது அழிக்கப்படும் ... பேட்டரி இயங்கும்போது பிசிக்களுக்கு இதுதான் நடக்கும், அவை தவறான நேரத்தைக் கொடுக்கும். பிசி இயங்கும் போது நீங்கள் அதை உள்ளமைத்தால், நேரம் வைக்கப்படும், ஏனெனில் ஆர்டிசி இயக்கப்படுகிறது, ஆனால் அந்த பேட்டரி தேவைப்படும்போது அது முடக்கப்படும் செயல்முறைகளின் போது தான் ...

DIY திட்டங்களுக்கு, தயாரிப்பாளர்கள் வழக்கமாக இரண்டு பொதுவான RTC சில்லுகளைப் பயன்படுத்துகிறார்கள், அவை DS1307 மற்றும் DS3231. இரண்டுமே மாக்சிம் (முன்னர் டல்லாஸ் செமிகண்டக்டர்) ஆல் தயாரிக்கப்படுகின்றன, மேலும் டிஎஸ் 3231 இரண்டில் மிகவும் துல்லியமானது, ஏனெனில் இது முந்தையதைப் போல வெப்பநிலை மாறுபாடுகளால் பாதிக்கப்படவில்லை. எனவே, வெப்பநிலையைப் பொறுத்து இது அவ்வளவு ஏற்ற இறக்கமாக இருக்காது, மேலும் இது நேரத்தை இன்னும் துல்லியமாக வைத்திருக்கிறது.

சில நேரங்களில், குறிப்பிடத்தக்க வெப்பநிலை வேறுபாடுகளுடன், DS1307 ஒரு நாளைக்கு 1 அல்லது 2 நிமிடம் வரை கட்டத்திற்கு வெளியே இருக்கக்கூடும். சில பயன்பாடுகளுக்கு சகிக்க முடியாத ஒன்று.

DS3231 என்பது மாறுபாடுகளால் பாதிக்கப்படுவதில்லை என்பதல்ல, ஆனால் 2ppm இன் துல்லியத்தை உறுதி செய்வதற்காக உள்ளமைக்கப்பட்ட வெப்பநிலை அளவீட்டு மற்றும் இழப்பீட்டு முறைகளைக் கொண்டுள்ளது, இது சமமாக இருக்கும் நேரம் பின்னடைவு ஒரு நாளைக்கு சுமார் 172 மீட்டர், அதாவது, வாரத்திற்கு 1 வினாடிக்கு சற்று அதிகம். நடைமுறையில், அவை வழக்கமாக மாதத்திற்கு 1 அல்லது 2 வினாடிகள் மட்டுமே மாறுபடும்.

வழியைப் பொறுத்தவரை RTC உடன் தொடர்பு கொள்ளுங்கள் DS3131 அது பெறும் தேதி மதிப்புகளைப் பெற, அது செய்யப்படுகிறது ஐ 2 சி பஸ். மேலும் சக்தியைப் பொறுத்தவரை, நீங்கள் DS2.3 க்கு 5.5 முதல் 3231v வரை பயன்படுத்தலாம், இது DS4.5 க்கான 5.5 முதல் 1307v ஐ விட சற்றே குறைவாக உள்ளது, எனவே இது அதிக ஆற்றல் திறமையாகவும் பேட்டரி நீண்ட காலம் நீடிக்கும்.

மேலும், இந்த தொகுதிகள் பொதுவாக ஒரு செய்யப்பட்ட EEPROM- கூடுதல் AT24C32 சில பதிவுகள் மற்றும் முந்தைய அளவீடுகளை சேமிக்க, இது மிகவும் நடைமுறைக்குரியது.

பயன்பாடுகள்

பயன்பாடுகளைப் பொறுத்தவரை, அர்டுயினோவுடன் ஒரு கடிகாரத்தை செயல்படுத்துவது, அதன் அடிப்படையில் செயல்படும் ஒரு அமைப்பை உருவாக்குவது போன்ற சிலவற்றை நான் ஏற்கனவே குறிப்பிட்டுள்ளேன் நேரம் எதுவாக இருந்தாலும், பி.சி.க்கள் மற்றும் பல மின்னணு சாதனங்கள் மற்றும் நேரம் போன்ற உபகரணங்கள் போன்றவற்றில் நேரத்தை வைத்திருக்க.

இல் பயன்படுத்தலாம் திட்டங்கள் விளக்குகள், நீர்ப்பாசன அமைப்புகள், டேட்டாலஜர் போன்றவற்றுக்கான டைமர்களை உருவாக்க. பயன்பாடுகள் மிக அதிகமாக இருக்கலாம் ...

ஒரு RTC DS3231 ஐ வாங்கவும்

தொகுதி DS3131 மலிவானது, நீங்கள் அதை சில சிறப்பு மின்னணு கடைகளில் அல்லது ஈபே, அலிஎக்ஸ்பிரஸ், அமேசான் போன்ற பெரிய கடைகளில் காணலாம். ஒன்றைக் கொண்டிருப்பதில் நீங்கள் ஆர்வமாக இருந்தால், இங்கே சில பரிந்துரைகள் உள்ளன:

DS3231 Arduino ஒருங்கிணைப்பு

Arduino IDE இன் ஸ்கிரீன் ஷாட்

நீங்கள் விரும்பினால் உங்கள் DS3231 ஐ உங்கள் Arduino போர்டுடன் ஒருங்கிணைக்கவும் "நேரமுள்ள" திட்டங்களை உருவாக்கத் தொடங்குங்கள், முதலில் நீங்கள் பொருத்தமான இணைப்புகளை உருவாக்க வேண்டும். அதை இணைக்க, இது மிகவும் எளிது:

  • DS3231 போர்டின் SLC முள் உங்கள் A5 உடன் இணைக்கப்பட வேண்டும் Arduino UNO.
  • DS3231 இன் SDA Arduino இன் A4 உடன் இணைக்கப்பட்டுள்ளது.
  • தொகுதியிலிருந்து Vcc Arduino இலிருந்து 5V க்கு செல்லும்.
  • GND முதல் GND வரை.
உங்கள் Arduino IDE இல் RTC DS3231 ஐப் பயன்படுத்த நூலகத்தை நிறுவ நினைவில் கொள்ளுங்கள் அல்லது குறியீடு இயங்காது ...

இப்போது நீங்கள் கணினி இணைக்கப்பட்டுள்ளீர்கள், அடுத்த விஷயம் எழுத வேண்டும் மூல குறியீட்டை வரையவும் அதை நிரல் செய்ய. நீங்கள் குறியீடுகளை மாற்றியமைத்து அவற்றை உங்கள் தேவைகளுக்கு ஏற்ப மாற்றிக் கொள்ளலாம், ஆனால் அர்டுயினோவுடன் இணைக்கப்பட்ட ஒரு 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. தரவுக்கு பொறுப்பு: மிகுவல் ஏஞ்சல் கேடன்
  2. தரவின் நோக்கம்: கட்டுப்பாட்டு ஸ்பேம், கருத்து மேலாண்மை.
  3. சட்டபூர்வமாக்கல்: உங்கள் ஒப்புதல்
  4. தரவின் தொடர்பு: சட்டபூர்வமான கடமையால் தவிர மூன்றாம் தரப்பினருக்கு தரவு தெரிவிக்கப்படாது.
  5. தரவு சேமிப்பு: ஆக்சென்டஸ் நெட்வொர்க்குகள் (EU) வழங்கிய தரவுத்தளம்
  6. உரிமைகள்: எந்த நேரத்திலும் உங்கள் தகவல்களை நீங்கள் கட்டுப்படுத்தலாம், மீட்டெடுக்கலாம் மற்றும் நீக்கலாம்.