DS3231: sat i kalendar u stvarnom vremenu za vaš Arduino

DS3231

U nekim projektima potrebno je imati dokaz vremena, sata ili datuma. Bilo zbog potrebe izvođenja određenih funkcija na temelju vremena, održavanja kalendara događaja ili registracije, zadržavanja vremena u sustavu ili jednostavno stvaranja digitalnog sata s Arduinom. S DS3231 možete ga dobiti, još jedan od komponente koje dodajemo na popis.

DS3231 je modul koji ste tražili, a ovdje ćete pronaći sve što je potrebno za njegovu kontrolu, a također ću vam pokazati primjer kako integrirajte ga s Arduinom s praktičnim primjerom ...

Što je DS3231?

DS3231

Prije svega, trebali biste znati što a RTC (sat u stvarnom vremenu)ili sat u stvarnom vremenu. Ovi su čipovi vrlo česti u mnoštvu aplikacija, zapravo vaše računalo ima jedan od njih na vašoj matičnoj ploči, a napaja ga i CR2032 baterija također. Ona je ta koja održava vrijeme i konfiguraciju u BIOS-u / UEFI-u i od koje joj operativni sustav uzima prilikom pokretanja kako bi bio na vrijeme (iako se sada, s Internetom, sinkronizacija s poslužiteljima može koristiti za veću preciznost, ali ovo je druga priča ...).

Ono što RTC radi je dobivanje mjerenja vremena, tako jednostavno. Razlika od ostalih vrsta elektroničkih satova je u tome što oni jednostavno izmjerite vrijeme, a to čini brojeći impulse takta, znajući njegovu frekvenciju i razdoblja. Osim vremena, RTC vam omogućava i vođenje računa o danima, tjednima, mjesecima i godinama. Odnosno, puni datum ...

Da bi to bilo moguće, RTC mora biti popraćen slovom Xtal ili kvarcni kristal koji će djelovati kao rezonator, onaj koji daje frekvenciju. Osim toga, trebaju vam elektronički sklopovi sposobni za brojanje i pohranjivanje datuma u memoriju. Krug mora biti sposoban brojati sekunde, minute, sate, dane, tjedne, mjesece i godine.

koji pamćenje je hlapljivoZbog toga mu je potrebna baterija, kako bi imala konstantnu snagu. Ako nemate bateriju ili se isprazni, ona će se izbrisati ... To se događa s osobnim računalima kad se baterija isprazni, daju pogrešno vrijeme. Ako ga konfigurirate dok je računalo uključeno, vrijeme će se zadržati jer se RTC napaja, ali to je tijekom procesa tijekom kojih je isključen kad je potrebna ta baterija ...

Za DIY projekte proizvođači obično koriste dva uobičajena RTC čipa, a to su DS1307 i DS3231. Oboje je izradio Maxim (bivši Dallas Semiconductor), a DS3231 je točniji od njih dvoje, jer na njega ne utječu temperaturne varijacije kao prvi. Stoga ne fluktuira toliko ovisno o temperaturi i preciznije zadržava vrijeme.

Ponekad, uz primjetne temperaturne razlike, DS1307 bi mogao biti izvan faze i do 1 ili 2 minute dnevno. Nešto nepodnošljivo za neke programe.

DS3231 ne znači da na njega ne utječu varijacije, već da ima ugrađene sustave za mjerenje i kompenzaciju temperature kako bi se osigurala točnost od 2 ppm, što bi bilo ekvivalentno vremenski odmak od oko 172 ms dnevno, odnosno najviše nešto više od 1 sekunde tjedno. A u praksi se obično razlikuju samo 1 ili 2 sekunde mjesečno.

Što se tiče načina komunicirati s RTC-om DS3131 za dobivanje datumskih vrijednosti koje dobiva to čini do I2C sabirnica. A za napajanje možete koristiti 2.3 do 5.5 v za DS3231, što je nešto niže od 4.5 do 5.5 v za DS1307, tako da može biti energetski učinkovitiji i učiniti bateriju duljom.

Također, trebali biste znati da ovi moduli obično imaju EEPROM dodatni AT24C32 za pohranu nekih zapisa i prethodnih mjerenja, što je sasvim praktično.

aplikacije

Što se tiče aplikacija, već sam spomenuo neke, poput implementacije sata s Arduinom, kako bi se stvorio sustav koji djeluje na temelju Vrijeme Bez obzira na sve, zadržati vrijeme na opremi poput računala i mnogim drugim elektroničkim uređajima i uređajima koji imaju vremena itd.

Može se koristiti i u projekti stvoriti mjerače vremena za osvjetljenje, sustave za navodnjavanje, dataloger itd. Aplikacije mogu biti najbrojnije ...

Kupite RTC DS3231

Modul DS3131 je jeftin, a možete ga pronaći u nekim specijaliziranim trgovinama elektronikom ili velikim trgovinama kao što su eBay, AliExpress, Amazon itd. Ako ste zainteresirani za jedan, evo nekoliko preporuka:

DS3231 Arduino integracija

Snimka zaslona Arduino IDE-a

Ukoliko želite integrirajte svoj DS3231 s Arduino pločom i započnite s izradom "vremenskih" projekata, prvo morate uspostaviti odgovarajuće veze. Da biste ga mogli povezati, jednostavno je kao:

  • SLC pin DS3231 ploče mora biti povezan s A5 vašeg Arduino UNO.
  • SDA DS3231 spojen je na A4 Arduino.
  • Vcc iz modula ići će na 5 V iz Arduina.
  • GND do GND.
Ne zaboravite instalirati knjižnicu da biste koristili RTC DS3231 u vašem Arduino IDE-u, inače kod neće raditi ...

Sada ste povezani sustav, sljedeća stvar je napisati skica izvornog koda da ga zakažete. Možete modificirati kodove i prilagoditi ih svojim potrebama, ali možete započeti jednostavnim dobivanjem datuma s RTC-a DS3231 spojenog na 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
}

A kako bi se RTC datum iskoristio za zakazati neki zadatak, poput uključivanja i isključivanja svjetla, automatskog zalijevanja ili alarma itd. Zapamtite da za rukovanje uređajima višeg napona možete koristiti tranzistore ili relej:

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


Budite prvi koji će komentirati

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.