DS3231: valós idejű óra és naptár az Arduino készülékéhez

DS3231

Egyes projektekben igazolni kell az időt, az órát vagy a dátumot. Vagy bizonyos funkciók időbeli végrehajtásának, az eseménynaptár vagy a regisztráció fenntartásának, az idő rendszerben tartásának, vagy egyszerűen egy digitális óra létrehozásának szükségessége miatt Arduinóval. a a DS3231 megkaphatja, egy másik alkatrészek hogy felvesszük a listára.

A DS3231 az a modul, amelyet keresett, és itt mindent megtalál, amire szüksége van a vezérléséhez, és bemutatok egy példát arra is, hogy integrálja az Arduinóval gyakorlati példával ...

Mi az a DS3231?

DS3231

Először is tudnia kell, hogy mi a RTC (valós idejű óra), vagy valós idejű óra. Ezek a chipek nagyon sok alkalmazásban gyakran előfordulnak, valójában a PC-jén található az egyik az alaplapon, és egy CR2032 akkumulátor is. Ez az, amelyik fenntartja az időt és a konfigurációt a BIOS / UEFI-ben, és amelyből az operációs rendszer elveszi a rendszerindításkor, hogy időben legyen (bár most az interneten a kiszolgálókkal történő szinkronizálás nagyobb pontossággal használható, de ez egy másik történet ...).

Amit az RTC elvégez, az ilyen egyszerű időméréseket végez. A különbség a más típusú elektronikus óráktól az, hogy egyszerűen mérje meg az időt, és ezt úgy teszi, hogy megszámolja az órajel impulzusait, ismerve annak frekvenciáját és periódusait. Az idő mellett az RTC lehetővé teszi a napok, hetek, hónapok és évek könyvelését is. Vagyis a teljes dátum ...

Ennek érdekében az RTC-nek a Xtal vagy kvarckristály amely rezonátorként fog működni, az adja a frekvenciát. Ezenkívül szükség van egy elektronikus áramkörre, amely képes megszámolni és tárolni a dátumot a memóriában. Az áramkörnek képesnek kell lennie másodpercek, percek, órák, napok, hetek, hónapok és évek számlálására.

hogy a memória ingatagEzért van szüksége az akkumulátorra, az állandó áramellátás érdekében. Ha nincs akkumulátora, vagy lemerül, akkor törlődik ... Ez történik a számítógépekkel, amikor az akkumulátor lemerül, helytelen időt adnak. Ha a számítógép bekapcsolt állapotában konfigurálja, az idő megmarad, mivel az RTC áramellátása folyamatban van, de az a folyamat során történik, amikor kikapcsol, amikor az akkumulátorra szükség van ...

A barkácsprojekteknél a gyártók általában két általános RTC chipet használnak, amelyek az DS1307 és DS3231. Mindkettőt Maxim (korábban Dallas Semiconductor) készítette, és a DS3231 a pontosabb a kettő közül, mivel a hőmérséklet-változások nem befolyásolják annyira, mint az előbbi. Ezért a hőmérséklet függvényében nem ingadozik annyira, és pontosabban tartja az időt.

Néha észrevehető hőmérséklet-különbségek mellett a DS1307 akár napi 1 vagy 2 percet is késhet. Valami tűrhetetlen valami alkalmazáshoz.

A DS3231 nem az, hogy a változások nem érintik, hanem hogy beépített hőmérséklet-mérő és kompenzációs rendszerekkel rendelkezik, hogy 2 ppm pontosságot biztosítson, ami egyenértékű lenne egy időeltolódás kb. napi 172 ms, vagyis legfeljebb valamivel több mint heti 1 másodperc. És a gyakorlatban általában csak havi 1 vagy 2 másodpercet változnak.

Ami az utat illeti kommunikálni az RTC-vel A DS3131 a megszerzett dátumértékek megszerzéséhez I2C busz. Az áramellátáshoz használhat 2.3–5.5 V-ot a DS3231-hez, amely valamivel alacsonyabb, mint a DS4.5 esetében a 5.5–1307 V, így energiatakarékosabb lehet, és az akkumulátor hosszabb ideig tart.

Azt is tudni kell, hogy ezeknek a moduloknak általában van egy EEPROM további AT24C32 néhány rekord és korábbi mérések tárolására, ami meglehetősen praktikus.

alkalmazások

Ami az alkalmazásokat illeti, már említettem néhányat, például egy Arduino-val megvalósított órát, hogy olyan rendszert hozzunk létre, amely Az idő Bármi is legyen, hogy időt fordítson olyan berendezésekre, mint a PC-k és sok más elektronikus eszköz és készülék, amelyre van idő stb.

-Ban is használható projektek időzítők létrehozása világításhoz, öntözőrendszerekhez, adatgyűjtőhöz stb. Az alkalmazások lehetnek a legtöbb ...

Vásároljon RTC DS3231-et

A modul A DS3131 olcsó, és megtalálhatja néhány speciális elektronikai üzletben vagy nagy üzletekben, mint például az eBay, AliExpress, Amazon stb. Ha érdekel egy ilyen, itt van néhány javaslat:

DS3231 Arduino integráció

Az Arduino IDE képernyőképe

Ha azt szeretné, integrálja DS3231 készülékét Arduino táblájával és el kell kezdeni az "időzített" projektek létrehozását, először létre kell hoznia a megfelelő kapcsolatokat. A csatlakoztatáshoz olyan egyszerű, mint:

  • A DS3231 kártya SLC-csatlakozóját össze kell kötni az A5-ösével Arduino UNO.
  • A DS3231 SDA-ja az Arduino A4-es formátumához csatlakozik.
  • A modulból származó Vcc 5 V-ra megy az Arduino-ból.
  • GND – GND.
Ne felejtse el telepíteni a könyvtárat az RTC DS3231 használatához az Arduino IDE-ben, különben a kód nem fog működni ...

Most csatlakoztatva van a rendszer, a következő dolog a vázlat forráskód hogy beprogramozza. Módosíthatja a kódokat és alkalmazkodhat az Ön igényeihez, de kezdheti azzal, hogy egyszerűen megszerzi a dátumot egy Arduino-hoz csatlakoztatott RTC DS3231-ből:

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

És az RTC dátum felhasználása érdekében ütemezzen valamilyen feladatot, például a fények be- vagy kikapcsolásához, automatikus öntözéshez vagy riasztás megszólalásához stb. Ne feledje, hogy a nagyobb feszültségű eszközök kezeléséhez használhat tranzisztort vagy relé:

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


Legyen Ön az első hozzászóló

Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.