DS3231: ለእርስዎ Arduino እውነተኛ ሰዓት እና የቀን መቁጠሪያ

DS3231

በአንዳንድ ፕሮጀክቶች የጊዜ ፣ የሰዓት ፣ ወይም የቀኑ ማረጋገጫ መኖሩ አስፈላጊ ነው ፡፡ ወይ በወቅቱ ላይ በመመስረት የተወሰኑ ተግባራትን ማከናወን ፣ የክስተቶች ወይም የምዝገባ የቀን መቁጠሪያን ለመጠበቅ ፣ ጊዜውን በሲስተም ውስጥ ለማቆየት ፣ ወይም በቀላሉ ዲጂታል ሰዓት ለመፍጠር አስፈላጊነት ከአርዱዲኖ ጋር. በ DS3231 እ.ኤ.አ. ሊያገኙት ይችላሉ ፣ ሌላኛው ክፍሎች እኛ ወደ ዝርዝሩ እንጨምራለን ፡፡

DS3231 እርስዎ የሚፈልጉት ሞዱል ነው ፣ እናም እዚህ ለቁጥጥሩ የሚያስፈልጉዎትን ሁሉ ያገኛሉ እንዲሁም እኔ እንዴት እንደሆነ ምሳሌ አሳይሻለሁ ፡፡ ከአርዱዲኖ ጋር ያዋህዱት በተግባራዊ ምሳሌ ...

DS3231 ምንድን ነው?

DS3231

በመጀመሪያ ፣ ማወቅ ያለብዎት ሀ አርቲሲ (የእውነተኛ ሰዓት ሰዓት)፣ ወይም የእውነተኛ ሰዓት ሰዓት። እነዚህ ቺፕስ በብዙ አፕሊኬሽኖች ውስጥ በጣም ተደጋጋሚ ናቸው ፣ በእውነቱ ፒሲዎ በአንዱ ላይ በእናትቦርዱ ላይ አለው ፣ እንዲሁም በ ‹ሀ› የተጎላበተ ነው CR2032 ባትሪ እንዲሁም ፡፡ እሱ በ BIOS / UEFI ውስጥ ጊዜውን እና ውቅረቱን የሚጠብቅ እና በወቅቱ እንዲጀመር ሲጀመር ኦፕሬቲንግ ሲስተም የሚወስደው ነው (ምንም እንኳን አሁን ከበይነመረቡ ጋር ከአገልጋዮች ጋር ማመሳሰል ለበለጠ ትክክለኛነት ሊያገለግል ይችላል ፣ ግን ይህ ሌላ ታሪክ ነው…) ፡

RTC የሚያደርገው ነገር የጊዜ መለኪያዎች ማግኘት ነው ፣ ያ ቀላል። ከሌሎቹ የኤሌክትሮኒክ ሰዓቶች ልዩነቱ እነሱ በቀላሉ መሆናቸው ነው ጊዜውን ይለኩ, እና የእሱን ድግግሞሽ እና ጊዜዎች በማወቅ የሰዓት የምልክት ንጣፎችን በመቁጠር ያደርገዋል። ከጊዜው በተጨማሪ አንድ አርቲሲ እንዲሁ የቀናትን ፣ ሳምንታትን ፣ ወራትንና ዓመታትን ሂሳብ እንዲያስቀምጡ ያስችልዎታል ፡፡ ማለትም ፣ ሙሉ ቀን ...

ይህ እንዲቻል አርኤቲሲው ሀ Xtal ወይም ኳርትዝ ክሪስታል ድግግሞሹን የሚሰጥ እንደ ሬዞናተር የሚሠራ። በተጨማሪም ፣ ቀኑን በማስታወሻ ውስጥ ለመቁጠር እና ለማከማቸት የሚያስችል የኤሌክትሮኒክ ወረዳ ያስፈልግዎታል ፡፡ ወረዳው ሰከንዶች ፣ ደቂቃዎች ፣ ሰዓታት ፣ ቀናት ፣ ሳምንቶች ፣ ወሮች እና ዓመታት የመቁጠር ችሎታ ሊኖረው ይገባል።

የኢሳን ማህደረ ትውስታ ተለዋዋጭ ነውለዚያም ነው የማያቋርጥ ኃይል እንዲኖረው ባትሪውን የሚፈልገው። ባትሪ ከሌለዎት ወይም ካለቀ ይሰረዛል ... ባትሪው ሲያልቅ ፒሲዎች ላይ እንደዚህ ነው ትክክል ያልሆነ ጊዜ የሚሰጡት ፡፡ ፒሲው በሚበራበት ጊዜ ካዋቀሩት አርቲሲው ኃይል ስለሚሰጥ ጊዜው ይቀመጣል ፣ ግን ያ ባትሪ በሚፈለግበት ጊዜ በሚጠፋበት ሂደት ውስጥ ነው ...

ለ ‹DIY› ፕሮጄክቶች ብዙውን ጊዜ ሰሪዎች ሁለት የተለመዱ የ RTC ቺፖችን ይጠቀማሉ DS1307 እና DS3231. ሁለቱም የተሠሩት በማክሲም (የቀድሞው የዳላስ ሴሚኮንዳክተር) ነው ፣ እና እንደ ቀድሞው የሙቀት መጠን መለዋወጥ ተጽዕኖ ስለሌለው DS3231 ከሁለቱ ይበልጥ ትክክለኛ ነው ፡፡ ስለዚህ ፣ በሙቀቱ ላይ በመመርኮዝ በጣም አይለዋወጥም ፣ እና ጊዜውን በትክክል ይጠብቃል።

አንዳንድ ጊዜ በሚታዩ የሙቀት ልዩነቶች ፣ DS1307 በቀን እንደ 1 ወይም 2 ደቂቃ ያህል ሊዘገይ ይችላል ፡፡ ለአንዳንድ መተግበሪያዎች የማይታለፍ ነገር።

DS3231 በልዩነቶች ያልተነካ መሆኑ ሳይሆን የ 2 ፒኤም ትክክለኛነትን ለማረጋገጥ አብሮገነብ የሙቀት መጠን መለካት እና የማካካሻ ሥርዓቶች አሉት ማለት ነው ፡፡ የጊዜ መዘግየት በቀን ከ 172ms ያህል ፣ ማለትም ቢበዛ በሳምንት ከ 1 ሴኮንድ በትንሹ ይበልጣል ፡፡ እና በተግባር ግን ብዙውን ጊዜ የሚለያዩት በወር 1 ወይም 2 ሴኮንድ ብቻ ነው ፡፡

እንደ መንገዱ ከ RTC ጋር መገናኘት DS3131 የሚያገኝበትን ቀን ዋጋዎች ለማግኘት በ ተከናውኗል አይ 2 ሲ አውቶቡስ. እና ለኃይል ፣ ለ DS2.3 ከ 5.5 እስከ 3231v በመጠኑ ዝቅተኛ ለሆነው DS4.5 ከ 5.5 እስከ 1307v መጠቀም ይችላሉ ፣ ስለሆነም የበለጠ ኃይል ቆጣቢ እና ባትሪውን ረዘም ላለ ጊዜ እንዲቆይ ሊያደርግ ይችላል ፡፡

እንዲሁም ፣ እነዚህ ሞጁሎች ብዙውን ጊዜ ሀ እንዳላቸው ማወቅ አለብዎት EEPROM ተጨማሪ AT24C32 አንዳንድ መዝገቦችን እና የቀድሞ ልኬቶችን ለማከማቸት ፣ እሱ በጣም ተግባራዊ ነው ፡፡

መተግበሪያዎች

አፕሊኬሽኖቹን በተመለከተ ቀደም ሲል ጠቅሻለሁ ፣ ለምሳሌ ከአርዱinoኖ ጋር አንድ ሰዓት ለመተግበር ፣ መሠረት በማድረግ የሚሠራ ሥርዓት ለመፍጠር ፡፡ ጊዜው ምንም ይሁን ምን ፣ እንደ ፒሲ እና ሌሎች ብዙ የኤሌክትሮኒክስ መሣሪያዎች እና ጊዜ ባላቸው መሣሪያዎች ወዘተ ባሉ መሳሪያዎች ላይ ጊዜውን ለማቆየት

በ ውስጥም መጠቀም ይቻላል ፕሮጀክቶች ለመብራት ፣ ለመስኖ ልማት ሥርዓቶች ፣ ለመረጃ ቆጣሪ ፣ ወዘተ ቆጣሪዎችን ለመፍጠር ፡፡ ማመልከቻዎቹ በጣም ብዙ ሊሆኑ ይችላሉ ...

RTC DS3231 ይግዙ

ሞጁሉ DS3131 ርካሽ ነው፣ እና በአንዳንድ ልዩ የኤሌክትሮኒክስ መደብሮች ውስጥ ወይም እንደ eBay ፣ AliExpress ፣ Amazon ፣ ወዘተ ባሉ ትላልቅ መደብሮች ውስጥ ሊያገኙት ይችላሉ ፡፡ አንድ እንዲኖርዎት የሚፈልጉ ከሆኑ አንዳንድ ምክሮች እዚህ አሉ

DS3231 Arduino ውህደት

የ Arduino IDE ቅጽበታዊ ገጽ እይታ

ከፈለጉ የእርስዎን DS3231 ከአርዱኖ ቦርድዎ ጋር ያዋህዱ እና “ጊዜ የተሰጣቸው” ፕሮጄክቶችን መፍጠር ይጀምሩ ፣ በመጀመሪያ ተገቢውን ግንኙነቶች ማድረግ አለብዎት። እሱን ማገናኘት መቻል ፣ እንደሚከተለው ቀላል ነው

  • የ DS3231 ቦርድ የ SLC ፒን ከእርስዎ A5 ጋር መገናኘት አለበት Arduino UNO.
  • የ SD3231 SDA ከአርዱዲኖ ኤ 4 ጋር ተገናኝቷል።
  • ከሞጁሉ Vcc ከአርዱኖ ወደ 5 ቪ ይሄዳል ፡፡
  • ከ GND ወደ GND ፡፡
በአርዱዲኖ አይዲኢዎ ውስጥ 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
}

እና የ 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. የመረጃው ዓላማ-ቁጥጥር SPAM ፣ የአስተያየት አስተዳደር ፡፡
  3. ህጋዊነት-የእርስዎ ፈቃድ
  4. የመረጃው ግንኙነት-መረጃው በሕጋዊ ግዴታ ካልሆነ በስተቀር ለሶስተኛ ወገኖች አይተላለፍም ፡፡
  5. የውሂብ ማከማቻ በኦክሴንትስ አውታረመረቦች (አውሮፓ) የተስተናገደ የውሂብ ጎታ
  6. መብቶች-በማንኛውም ጊዜ መረጃዎን መገደብ ፣ መልሰው ማግኘት እና መሰረዝ ይችላሉ ፡፡