DS3231: ura in koledar v realnem času za vaš Arduino

DS3231

Pri nekaterih projektih je treba imeti dokazilo o času, uri ali datumu. Ali zaradi potrebe po opravljanju določenih funkcij glede na čas, vzdrževanju koledarja dogodkov ali registraciji, zadrževanju časa v sistemu ali preprosto ustvarjanju digitalne ure z Arduinom. Z DS3231 lahko ga dobite, še enega od komponente ki ga dodamo na seznam.

DS3231 je modul, ki ste ga iskali, in tukaj boste našli vse, kar potrebujete za njegov nadzor, in pokazal vam bom tudi primer, kako ga vključite v Arduino s praktičnim primerom ...

Kaj je DS3231?

DS3231

Najprej bi morali vedeti, kaj a RTC (ura v realnem času)ali ura v realnem času. Ti čipi so zelo pogosti v številnih aplikacijah, pravzaprav ima vaš računalnik enega od njih na vaši matični plošči, napaja pa ga tudi Baterija CR2032 tudi. Je tista, ki vzdržuje čas in konfiguracijo v BIOS / UEFI in od katere jo operacijski sistem pri zagonu vzame, da je pravočasno (čeprav je zdaj z internetom sinhronizacijo s strežniki mogoče uporabiti za večjo natančnost, vendar to je druga zgodba ...).

RTC naredi tako enostavne meritve časa. Razlika od drugih vrst elektronskih ur je v tem, da preprosto izmerite čas, in to s štetjem impulzov urnega signala, pri čemer pozna frekvenco in njegova obdobja. Poleg časa vam RTC omogoča tudi vodenje računa o dneh, tednih, mesecih in letih. Se pravi, polni datum ...

Da je to mogoče, mora RTC spremljati a Xtal ali kremenov kristal ki bo deloval kot resonator, tisti, ki zagotavlja frekvenco. Poleg tega potrebujete elektronsko vezje, ki lahko šteje in shranjuje datum v pomnilnik. Vezje mora biti sposobno šteti sekunde, minute, ure, dni, tedne, mesece in leta.

Esa spomin je nestanovitenZato potrebuje baterijo, da ima stalno moč. Če baterije nimate ali se ta izprazni, bo izbrisana ... To se zgodi z osebnimi računalniki, ko se baterija izprazni, dajo napačen čas. Če ga konfigurirate, ko je računalnik vklopljen, se bo čas obdržal, saj se RTC napaja, vendar je med postopki, med katerimi je izklopljen, ko je potrebna ta baterija ...

Za DIY projekte proizvajalci običajno uporabljajo dva običajna čipa RTC, ki sta DS1307 in DS3231. Oba izdeluje Maxim (prej Dallas Semiconductor), DS3231 pa je natančnejši od obeh, saj nanj temperaturne razlike ne vplivajo tako kot prvi. Zato ne niha toliko v odvisnosti od temperature in natančneje zadržuje čas.

Včasih je z opaznimi temperaturnimi razlikami DS1307 lahko izven faze do 1 ali 2 minuti na dan. Nekaj ​​nevzdržnega za nekatere aplikacije.

DS3231 ne pomeni, da nanj ne vplivajo spremembe, temveč ima vgrajene sisteme za merjenje temperature in kompenzacijo, ki zagotavljajo natančnost 2 ppm, kar bi bilo enako časovni zamik približno 172 ms na dan, to je največ nekaj več kot 1 sekundo na teden. V praksi se običajno spreminjajo le 1 ali 2 sekundi na mesec.

Glede poti komunicirati z RTC DS3131 za pridobitev datumskih vrednosti, ki jih dobi, opravi do I2C vodilo. Za napajanje lahko za DS2.3 porabite od 5.5 do 3231 v, kar je nekoliko nižje od 4.5 do 5.5 v za DS1307, zato je lahko energetsko učinkovitejši in baterija zdrži dlje.

Vedeti morate tudi, da imajo ti moduli ponavadi a EEPROM dodatni AT24C32 za shranjevanje nekaterih zapisov in prejšnjih meritev, kar je zelo praktično.

aplikacije

Kar zadeva aplikacije, sem že omenil nekatere, na primer uvajanje ure z Arduinom, da bi ustvaril sistem, ki deluje na podlagi Čas Kakorkoli že, da bi imeli čas na opremi, kot so osebni računalniki in številne druge elektronske naprave in naprave, ki imajo čas itd.

Lahko se uporablja tudi v projektov ustvariti časovnike za razsvetljavo, namakalne sisteme, zapisovalnike podatkov itd. Aplikacije so lahko najštevilčnejše ...

Kupite RTC DS3231

Modul DS3131 je poceni, in ga lahko najdete v nekaterih specializiranih trgovinah z elektroniko ali v velikih trgovinah, kot so eBay, AliExpress, Amazon itd. Če vas zanima, je nekaj priporočil:

DS3231 Arduino integracija

Posnetek zaslona Arduino IDE

Če želite integrirajte svoj DS3231 s ploščo Arduino in začnite ustvarjati "časovno omejene" projekte, najprej morate vzpostaviti ustrezne povezave. Če ga želite povezati, je preprosto:

  • Zatič SLC plošče DS3231 mora biti povezan z A5 vašega Arduino UNO.
  • SDA DS3231 je povezan z A4 Arduino.
  • Vcc iz modula bo prešel na 5 V iz Arduina.
  • GND do GND.
Ne pozabite namestiti knjižnice za uporabo RTC DS3231 v vašem Arduino IDE, sicer koda ne bo delovala ...

Zdaj imate sistem povezan, naslednja stvar je, da napišete skica izvorne kode da ga programirate. Kode lahko spremenite in prilagodite svojim potrebam, lahko pa začnete tako, da preprosto dobite datum iz RTC DS3231, priključenega 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
}

In da bi uporabili datum RTC do razporedite kakšno nalogo, na primer za vklop ali izklop luči, za samodejno zalivanje ali za sprožitev alarma itd. Ne pozabite, da za ravnanje z visokonapetostnimi napravami lahko uporabite tranzistorje oz rele:

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


Bodite prvi komentar

Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.