DS3231: realtempa horloĝo kaj kalendaro por via Arduino

DS3231

En iuj projektoj necesas havi pruvon pri la tempo, la horo aŭ la dato. Aŭ pro la bezono plenumi iujn funkciojn laŭ tempo, konservi kalendaron de eventoj aŭ registrado, konservi la tempon en sistemo, aŭ simple krei ciferecan horloĝon kun Arduino. Kun la DS3231 vi povas akiri ĝin, alian el la komponantoj ke ni aldonas al la listo.

La DS3231 estas la modulo, kiun vi serĉis, kaj ĉi tie vi trovos ĉion, kion vi bezonas por ĝia kontrolo, kaj mi ankaŭ montros al vi ekzemplon pri kiel integri ĝin kun Arduino kun praktika ekzemplo ...

Kio estas la DS3231?

DS3231

Unue vi devas scii, kio estas RTC (Reala Tempo-Horloĝo), aŭ realtempa horloĝo. Ĉi tiuj blatoj tre oftas en amaso da aplikoj, fakte via komputilo havas unu el ili sur via patrino, kaj ĝi ankaŭ funkcias per Kuirilaro CR2032 ankaŭ. Ĝi estas tiu, kiu konservas la tempon kaj la agordon en la BIOS / UEFI kaj de kiu la operaciumo prenas ĝin dum ekkuro por ĝustatempe (kvankam nun, kun la interreto, sinkronigado kun serviloj povas esti uzata por pli granda precizeco, sed ĉi tio estas alia historio ...).

Kion faras la RTC estas akiri tempomezurojn, tiel simple. La diferenco de aliaj specoj de elektronikaj horloĝoj estas, ke ili simple mezuri la tempon, kaj ĝi faras tion nombrante horloĝajn signalajn pulsojn, sciante ĝian oftecon kaj periodojn. Aldone al la tempo, RTC ankaŭ permesas al vi teni kontadon pri la tagoj, semajnoj, monatoj kaj jaroj. Tio estas, la plena dato ...

Por ke ĉi tio eblu, la RTC devas esti akompanata de Xtal aŭ kvarca kristalo kiu funkcios kiel resonilo, tiu, kiu donas la oftecon. Aldone, vi bezonas elektronikajn cirkvitojn kapablajn kalkuli kaj konservi la daton en memoro. La cirkvito devas esti kapabla kalkuli sekundojn, minutojn, horojn, tagojn, semajnojn, monatojn kaj jarojn.

Esa memoro estas volatilaTial ĝi bezonas la baterion, por havi konstantan potencon. Se vi ne havas baterion aŭ ĝi elĉerpiĝas, ĝi forviŝiĝos ... Tiel okazas al komputiloj kiam la baterio elĉerpiĝas, ili donas malĝustan tempon. Se vi agordas ĝin dum la komputilo estas ŝaltita, la tempo restos, ĉar la RTC estas funkciigita, sed ĝi estas dum la procezoj, dum kiuj ĝi malŝaltas, kiam tiu baterio bezonas ...

Por DIY-projektoj, fabrikantoj kutime uzas du komunajn RTC-blatojn, kiuj estas DS1307 kaj DS3231. Ambaŭ estas faritaj de Maxim (antaŭe Dallas Semiconductor), kaj la DS3231 estas la pli preciza el ambaŭ, ĉar ĝi ne estas tiel trafita de temperaturaj variadoj kiel la unua. Sekve, ĝi ne tiel fluktuas laŭ la temperaturo, kaj ĝi konservas la tempon pli precize.

Iafoje, kun rimarkeblaj temperaturaj diferencoj, la DS1307 povus esti malfunkcia ĝis 1 aŭ 2 minutoj tage. Io netolerebla por iuj aplikoj.

La DS3231 ne estas, ke ĝi ne estas influita de variadoj, sed ke ĝi havas enkonstruitajn mezurajn temperaturajn kaj kompensajn sistemojn por certigi precizecon de 2ppm, kio egalus tempa malfruo de ĉirkaŭ 172 ms tage, do iom pli ol 1 sekundo semajne maksimume. Kaj praktike ili kutime varias nur 1 aŭ 2 sekundojn monate.

Koncerne la vojon komuniki kun la RTC DS3131 por akiri la datajn valorojn, kiujn ĝi ricevas, estas farita de I2C-buso. Kaj por potenco, vi povas uzi 2.3 ĝis 5.5v por la DS3231, kiu estas iom pli malalta ol la 4.5 ĝis 5.5v por la DS1307, do ĝi povas esti pli energie efika kaj plilongigi la baterion.

Ankaŭ vi devas scii, ke ĉi tiuj moduloj kutime havas EEPROM aldona AT24C32 por konservi iujn diskojn kaj antaŭajn mezuradojn, kio estas sufiĉe praktika.

Aplikoj

Pri la aplikaĵoj, mi jam menciis iujn, ekzemple por efektivigi horloĝon per Arduino, por krei sistemon, kiu funkcias surbaze de La tempo Kio ajn estas, konservi la tempon en ekipaĵoj kiel komputiloj kaj multaj aliaj elektronikaj aparatoj kaj aparatoj, kiuj havas tempon, ktp.

Povas ankaŭ esti uzata en projektoj krei tempigilojn por lumigado, irigaciaj sistemoj, datumregistrilo, ktp. La aplikaĵoj povas esti la plej multaj ...

Aĉetu RTC DS3231

La modulo DS3131 estas malmultekosta, kaj vi povas trovi ĝin en iuj specialigitaj elektronikaj butikoj aŭ en grandaj butikoj kiel eBay, AliExpress, Amazon, ktp. Se vi interesas havi unu, jen kelkaj rekomendoj:

DS3231 Arduino-Integriĝo

Ekrankopio de Arduino IDE

Se vi volas integri vian DS3231 kun via Arduino-tabulo kaj komencu krei "tempoplenajn" projektojn, vi devas unue fari la taŭgajn konektojn. Por povi konekti ĝin, ĝi estas tiel simpla kiel:

  • La SLC-pinglo de la DS3231-tabulo devas esti konektita al la A5 de via Arduino UNO.
  • SDA de la DS3231 estas konektita al A4 de Arduino.
  • Vcc de la modulo iros al 5V de Arduino.
  • GND al GND.
Memoru instali la bibliotekon por uzi la RTC DS3231 en via Arduino IDE aŭ la kodo ne funkcios ...

Nun vi havas la sistemon konektita, la sekva afero estas skribi la skiza fontkodo programi ĝin. Vi povas modifi la kodojn kaj adapti ilin al viaj bezonoj, sed vi povus komenci simple ricevante la daton de RTC DS3231 konektita al Arduino:

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

Kaj por uzi la RTC-daton al planu ian taskon, ekzemple por ŝalti aŭ malŝalti lumojn, por aŭtomata akvumado, aŭ por alarmi, ktp. Memoru, ke por manipuli aparatojn kun pli alta tensio vi povas uzi transistorojn aŭ stafeto:

#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);
}


La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

Estu la unua por komenti

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita per *

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.