DS3231. Իրական ժամանակի ժամացույց և օրացույց ձեր Arduino- ի համար

DS3231

Որոշ նախագծերում անհրաժեշտ է ունենալ ժամանակի, ժամի կամ ամսաթվի ապացույց: Կամ ժամանակի հիման վրա որոշակի գործառույթներ կատարելու, իրադարձությունների օրացույց կամ գրանցում պահելու, ժամանակը համակարգում պահելու կամ պարզապես թվային ժամացույց ստեղծելու անհրաժեշտության պատճառով: Arduino- ի հետ. Հետ DS3231- ը Դուք կարող եք ստանալ այն, մեկ այլ բաղադրիչներ որ մենք ավելացնենք ցուցակին:

DS3231- ը ձեր փնտրած մոդուլն է, և այստեղ դուք կգտնեք այն ամենը, ինչ ձեզ հարկավոր է դրա կառավարման համար, և ես նաև ցույց կտամ ձեզ մի օրինակ, թե ինչպես ինտեգրեք այն Arduino- ի հետ գործնական օրինակով ...

Ի՞նչ է DS3231- ը:

DS3231

Առաջին հերթին, դուք պետք է իմանաք, թե ինչ ա RTC (իրական ժամանակի ժամացույց), կամ իրական ժամանակի ժամացույց: Այս չիպերը շատ հաճախակի են բազմաթիվ ծրագրերի մեջ, փաստորեն, ձեր համակարգիչը դրանցից մեկը ունի ձեր մայրիկի վրա, և այն նաև սնուցվում է CR2032 մարտկոց նույնպես Դա մեկն է, որը պահպանում է ժամանակը և կազմաձևը BIOS / UEFI- ում, և որից գործավար համակարգը տանում է այն բեռնման ժամանակ, որպեսզի այն ժամանակին լինի (չնայած հիմա ինտերնետի միջոցով սերվերների հետ համաժամացումը կարող է օգտագործվել ավելի մեծ ճշգրտության համար, բայց սա այլ պատմություն է…):

Այն, ինչ անում է RTC- ն, ժամանակի չափումներն է ձեռք բերել, այնքան պարզ: Էլեկտրոնային ժամացույցների այլ տեսակների տարբերությունն այն է, որ դրանք պարզապես չափել ժամանակը, և դա անում է հաշվելով ժամացույցի ազդանշանի իմպուլսները ՝ իմանալով դրա հաճախականությունն ու ժամանակահատվածները: Theամանակից բացի, RTC- ն նաև թույլ է տալիս հաշվետու լինել օրերի, շաբաթների, ամիսների և տարիների մասին: Այսինքն ՝ լրիվ ամսաթիվը ...

Որպեսզի դա հնարավոր լինի, RTC- ն պետք է ուղեկցվի ա Xtal կամ որձաքար բյուրեղ որը կգործի որպես ռեզոնատոր, հաճախականությունն ապահովող մեկը: Բացի այդ, ձեզ հարկավոր են էլեկտրոնային սխեմաներ, որոնք ունակ կլինեն ամսաթիվը հաշվել և պահպանել հիշողության մեջ: Շղթաները պետք է կարողանան հաշվել վայրկյանները, րոպեները, ժամերը, օրերը, շաբաթները, ամիսներն ու տարիները:

ESA հիշողությունը անկայուն էԱհա թե ինչու դրա համար անհրաժեշտ է մարտկոցը `անընդհատ ուժ ունենալու համար: Եթե ​​մարտկոց չունեք կամ այն ​​սպառվի, այն կջնջվի ... Դա այն է, ինչ պատահում է համակարգիչների հետ, երբ մարտկոցը սպառվում է, դրանք սխալ ժամանակ են տալիս: Եթե ​​կարգաբերեք այն, քանի դեռ համակարգիչը միացված է, ժամանակը կպահպանվի, քանի որ RTC- ն աշխատում է, բայց դա այն գործընթացների ընթացքում է, որոնց ընթացքում այն ​​անջատված է, երբ այդ մարտկոցն անհրաժեշտ է:

DIY նախագծերի համար արտադրողները սովորաբար օգտագործում են երկու սովորական RTC չիպեր, որոնք հենց դրանք են DS1307 և DS3231, Երկուսն էլ պատրաստում է Maxim- ը (նախկին Dallas Semiconductor), և DS3231- ը երկուսից առավել ճշգրիտ է, քանի որ ջերմաստիճանի տատանումներից այն չի ազդում, ինչպես նախկինում: Հետեւաբար, դա այնքան էլ չի տատանվում `կախված ջերմաստիճանից, և այն ավելի ճշգրիտ է պահում ժամանակը:

Երբեմն, նկատելի ջերմաստիճանային տարբերություններով, DS1307- ը կարող է հետ մնալ 1 կամ 2 րոպե օրական: Ինչ-որ բան անտանելի է որոշ ծրագրերի համար:

DS3231- ը ոչ թե այն է, որ այն չի ազդում տատանումներից, այլ որ այն ներկառուցված ջերմաստիճանի չափման և փոխհատուցման համակարգեր է ապահովում 2ppm ճշգրտություն, ինչը համարժեք է ժամանակի հետաձգում օրական մոտ 172 մմ, այսինքն ՝ առավելագույնը շաբաթը 1 վայրկյանից մի փոքր ավելին: Եվ գործնականում դրանք սովորաբար ամսական տատանվում են ընդամենը 1 կամ 2 վայրկյան:

Ինչ վերաբերում է ճանապարհին շփվել RTC- ի հետ DS3131- ը `ստացված ամսաթվի արժեքները ստանալու համար, դա արվում է մինչև I2C ավտոբուս, Իսկ էլեկտրաէներգիայի համար DS2.3- ի համար կարող եք օգտագործել 5.5-ից 3231 վ, ինչը մի փոքր ցածր է DS4.5- ի 5.5-ից 1307 վ-ից, այնպես որ այն կարող է լինել ավելի էներգաարդյունավետ և մարտկոցը երկարացնել:

Բացի այդ, դուք պետք է իմանաք, որ այս մոդուլները սովորաբար ունեն a EEPROM լրացուցիչ AT24C32 պահպանել որոշ գրառումներ և նախորդ չափումներ, ինչը բավականին գործնական է:

դիմումները

Ինչ վերաբերում է դիմումներին, ես արդեն նշել եմ որոշները, օրինակ ՝ Arduino- ի հետ ժամացույց իրականացնելը, համակարգ ստեղծելու համար, որը գործում է Ամանակը Ինչ էլ որ լինի, ժամանակը պահելու համար այնպիսի սարքավորումների վրա, ինչպիսիք են համակարգիչները և շատ այլ էլեկտրոնային սարքեր և սարքավորումներ, որոնք ժամանակ ունեն և այլն:

Կարող է օգտագործվել նաև ծրագրեր ստեղծել լուսավորության, ոռոգման համակարգերի, տվյալների հաշվիչի և այլնի համար ժամանակաչափեր: Դիմումները կարող են լինել ամենաշատը ...

Գնեք RTC DS3231

Մոդուլը DS3131- ը էժան է, և այն կարող եք գտնել էլեկտրոնիկայի որոշ մասնագիտացված խանութներում կամ խոշոր խանութներում, ինչպիսիք են eBay, AliExpress, Amazon և այլն: Եթե ​​դուք հետաքրքրված եք ունենալ մեկը, ահա մի քանի առաջարկություններ.

DS3231 Arduino ինտեգրում

Լուսանկարը Arduino IDE- ից

Եթե ​​դուք ցանկանում եք ինտեգրեք ձեր DS3231- ը ձեր Arduino տախտակին և սկսեք ստեղծել «ժամանակավոր» նախագծեր, նախ պետք է կատարել համապատասխան կապեր: Այն միացնելու հնարավորություն ունենալու համար այն պարզ է, ինչպես ՝

  • 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
}

Եվ 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. Տվյալների պահպանում. Տվյալների շտեմարան, որը հյուրընկալվում է Occentus Networks (EU) - ում
  6. Իրավունքներ. Timeանկացած պահի կարող եք սահմանափակել, վերականգնել և ջնջել ձեր տեղեկատվությունը: