DS3231: Echtzäituhr a Kalenner fir Ären Arduino

DS3231

A verschiddene Projeten ass et néideg e Beweis vun der Zäit, der Stonn oder dem Datum ze hunn. Entweder wéinst der Notwendegkeet verschidde Funktiounen op Basis vun Zäit auszeféieren, e Kalenner vun Eventer oder Umeldung ze halen, d'Zäit an engem System ze halen oder einfach eng digital Auer ze kreéieren mam ArduinoAn. Mat den DS3231 Dir kënnt et kréien, eng aner vun de Komponenten datt mir op d'Lëscht bäifügen.

Den DS3231 ass de Modul deen Dir gesicht hutt, an hei fannt Dir alles wat Dir braucht fir seng Kontroll an ech weisen Iech och e Beispill wéi integréiert et mam Arduino mat engem praktesche Beispill ...

Wat ass den DS3231?

DS3231

Als éischt sollt Dir wësse wat e RTC (Echtzäituhr), oder Echtzäituhr. Dës Chips si ganz heefeg an enger Villzuel vun Uwendungen, tatsächlech, Äre PC huet ee vun hinnen op Ärem Motherboard, an et gëtt och vun engem CR2032 Batterie och. Et ass deen deen d'Zäit an d'Konfiguratioun am BIOS / UEFI hält a vun deem de Betribssystem et hëlt beim Booten fir pünktlech ze sinn (och wann elo mam Internet kann d'Synchroniséierung mat Servere fir méi Präzisioun benotzt ginn, awer dëst ass eng aner Geschicht ...).

Wat de RTC mécht ass Zäitmiessungen ze kréien, sou einfach. Den Ënnerscheed vun aneren Typen vun elektronesche Uhren ass datt se einfach sinn moosst d'Zäit, an et mécht dat duerch Zählsignalimpulsen ze zielen, seng Frequenz a Perioden ze kennen. Zousätzlech zu der Zäit erlaabt e RTC Iech och eng Comptabilitéit vun den Deeg, Wochen, Méint a Joeren ze halen. Dat ass, de kompletten Datum ...

Fir dëst méiglech ze sinn, muss de RTC vun engem begleet ginn Xtal oder Quarzkristall deen als Resonator handelt, deen deen d'Frequenz gëtt. Zousätzlech braucht Dir elektronesch Schaltkreesser fäeg ze zielen an den Datum an engem Gedächtnis ze späicheren. D'Circuit muss fäeg sinn Sekonnen, Minutten, Stonnen, Deeg, Wochen, Méint a Joer ze zielen.

Esa Erënnerung ass onbestännegDofir brauch et d'Batterie, fir konstant Muecht ze hunn. Wann Dir keng Batterie hutt oder se ausgaang ass, gëtt se geläscht ... Dat geschitt mat PCe wann d'Batterie op ass, si ginn eng falsch Zäit. Wann Dir et konfiguréiert wann de PC aktiv ass, gëtt d'Zäit behalen, well de RTC ugedriwwe gëtt, awer et ass wärend de Prozesser wärend et aus ass wann dës Batterie gebraucht gëtt ...

Fir DIY Projete benotze Produzenten normalerweis zwee gemeinsam RTC Chips, déi sinn DS1307 an DS3231. Béid gi vum Maxim (fréier Dallas Semiconductor) gemaach, an den DS3231 ass dee méi genauen vun deenen zwee, well et net sou beaflosst gëtt vun Temperaturvariatioune wéi déi fréier. Dofir schwankt et net sou vill ofhängeg vun der Temperatur, an et hält d'Zäit méi präzis.

Heiansdo, mat merkbaren Temperaturdifferenzen, kéint den DS1307 aus der Phase bis zu 1 oder 2 Minutte pro Dag sinn. Eppes net tolerabel fir verschidden Uwendungen.

Den DS3231 ass net datt et vu Variatiounen net beaflosst gëtt, awer datt et agebaute Temperaturmiessung a Kompensatiounssystemer huet fir eng Genauegkeet vun 2ppm ze garantéieren, wat gläichwäerteg wier Zäitlag vun ongeféier 172ms den Dag, dat ass, e bësse méi wéi 1 Sekonn d'Woch héchstens. An an der Praxis variéiere se normalerweis nëmmen 1 oder 2 Sekonnen de Mount.

Wat de Wee ugeet mam RTC kommunizéieren DS3131 fir d'Datumwäerter ze kréien déi et kritt, et gëtt gemaach vun I2C Bus. A fir Kraaft kënnt Dir 2.3 op 5.5v fir den DS3231 benotzen, wat e bësse méi niddereg ass wéi de 4.5 bis 5.5v fir den DS1307, sou datt et méi energieeffizient ka sinn an d'Batterie méi laang dauere léisst.

Och sollt Dir wëssen datt dës Moduler normalerweis e EEPROM zousätzlech AT24C32 e puer Dossieren a fréier Moossungen ze späicheren, wat zimlech praktesch ass.

Applikatiounen

Wat d'Applikatiounen ugeet, hunn ech schonn e puer erwähnt, wéi zum Beispill eng Auer mam Arduino ëmzesetzen, fir e System ze kreéieren deen op Basis handelt D'Zäit Egal wéi, Zäit ze halen op Ausrüstung wéi PCs a vill aner elektronesch Apparater an Apparater déi Zäit hunn, asw.

Kann och benotzt ginn an Projeten fir Timer fir Beliichtung, Bewässerungssystemer, Datelogger, etc. D'Applikatioune kënnen déi vill sinn ...

Kaaft e RTC DS3231

De Modul DS3131 ass bëlleg, an Dir fannt et an e puer spezialiséierten Elektronikgeschäfter oder a grousse Geschäfter wéi eBay, AliExpress, Amazon, etc. Wann Dir interesséiert sidd een ze hunn, hei sinn e puer Empfehlungen:

DS3231 Arduino Integratioun

Screenshot vun Arduino IDE

Wann Dir wëllt integréiert Är DS3231 mat Ärem Arduino Board an ufänken "geplangte" Projeten ze kreéieren, musst Dir als éischt déi entspriechend Verbindunge maachen. Fir et kënnen ze verbannen ass et sou einfach wéi:

  • De SLC Pin vum DS3231 Board muss mat der A5 vun Ärem verbonne sinn Arduino UNO.
  • SDA vum DS3231 ass mat A4 vun Arduino verbonnen.
  • Vcc vum Modul geet op 5V vun Arduino.
  • GND zu GND.
Denkt drun d'Bibliothéik ze installéieren fir de RTC DS3231 an Ärem Arduino IDE ze benotzen oder de Code funktionnéiert net ...

Elo hutt Dir de System ugeschloss, déi nächst Saach ass de ze schreiwen Skizz Quellcode et ze programméieren. Dir kënnt d'Coden änneren an se un Äre Besoinen upassen, awer Dir kënnt ufänken einfach den Datum vun engem RTC DS3231 mat Arduino verbonnen ze kréien:

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

A fir de RTC Datum ze benotzen fir plangt eng Aufgab, wéi zum Beispill fir Luuchten un oder auszeschalten, fir automatesch Bewässerung oder fir en Alarm ze schloen, etc. Denkt drun datt Dir mat héijer Spannungsgeräter Transistoren oder Relais:

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


Den Inhalt vum Artikel hält sech un eis Prinzipie vun redaktionnell Ethik. Fir e Feeler ze mellen klickt hei.

Gitt d'éischt fir ze kommentéieren

Gitt Äre Kommentar

Är Email Adress gëtt net publizéiert ginn. Néideg Felder sinn markéiert mat *

*

*

  1. Responsabel fir d'Daten: Miguel Ángel Gatón
  2. Zweck vun den Donnéeën: Kontroll SPAM, Kommentarmanagement.
  3. Legitimatioun: Är Zoustëmmung
  4. Kommunikatioun vun den Donnéeën: D'Donnéeë ginn net un Drëttubidder matgedeelt ausser duerch legal Verpflichtung.
  5. Datenspeicher: Datebank gehost vun Occentus Networks (EU)
  6. Rechter: Zu all Moment kënnt Dir Är Informatioun limitéieren, recuperéieren an läschen.