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 osnovu vremena, održavanja kalendara događaja ili registracije, zadržavanja vremena u sistemu ili jednostavno stvaranja digitalnog sata sa Arduinom. Sa DS3231 možete ga dobiti, još jedan od komponente koje dodajemo na listu.

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

Šta je DS3231?

DS3231

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

Ono što RTC radi je dobijanje 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 periode. Pored vremena, RTC vam omogućava i vođenje računa o danima, sedmicama, 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. Pored toga, trebaju vam elektronički sklopovi sposobni za brojanje i pohranjivanje datuma u memoriju. Struja mora biti sposobna brojati sekunde, minute, sate, dane, sedmice, mjesece i godine.

ESA memorija je nestabilnaZbog toga mu je potrebna baterija da bi imala konstantnu snagu. Ako nemate bateriju ili se isprazni, ona će biti izbrisana ... To se događa kod računara kad se baterija isprazni, daju pogrešno vrijeme. Ako ga konfigurirate dok je računar uključen, vrijeme će se zadržati, budući da se RTC napaja, ali to je tijekom procesa tokom kojih je isključen kada 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 (ranije Dallas Semiconductor), a DS3231 je precizniji od njih dvoje, jer na njega ne utječu temperaturne varijacije kao prvi. Zbog toga ne fluktuira toliko ovisno o temperaturi i preciznije zadržava vrijeme.

Ponekad, uz primjetne temperaturne razlike, DS1307 bi mogao zaostajati u trajanju od 1 ili 2 minute dnevno. Nešto nepodnošljivo za neke aplikacije.

DS3231 ne znači da na njega ne utječu varijacije, već da ima ugrađene sisteme za mjerenje i kompenzaciju temperature koji osiguravaju tačnost od 2 stranice u minuti, što bi bilo ekvivalentno vremenski odmak od oko 172 ms dnevno, odnosno najviše nešto više od 1 sekunde sedmično. 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 da bi dobio vrijednosti datuma koje dobiva, to čini do I2C autobus. 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 baterija može trajati dulje.

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

Aplicaciones

Što se tiče aplikacija, već sam spomenuo neke, poput implementacije sata sa Arduinom, kako bih stvorio sistem koji djeluje na temelju Vrijeme Bez obzira na sve, zadržati vrijeme na opremi poput računara i mnogih drugih elektroničkih uređaja i uređaja koji imaju vremena itd.

Može se koristiti i u projekata za stvaranje tajmera za osvjetljenje, sisteme za navodnjavanje, dataloger itd. Aplikacije mogu biti najbrojnije ...

Kupite RTC DS3231

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

DS3231 Arduino integracija

Snimak ekrana Arduino IDE-a

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

  • SLC pin DS3231 ploče mora biti povezan sa A5 vašeg Arduino UNO.
  • SDA DS3231 povezan 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 kôd neće raditi ...

Sada ste povezani sistem, sljedeća stvar je da napišete skica izvornog koda da ga programira. Možete modificirati kodove i prilagoditi ih svojim potrebama, ali možete započeti jednostavnim dobivanjem datuma s RTC DS3231 povezanog 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 zakažite 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 komentarišete

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  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 obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.