DS3231: zegar czasu rzeczywistego i kalendarz dla Twojego Arduino

DS3231

W niektórych projektach konieczne jest potwierdzenie godziny, godziny lub daty. Albo ze względu na konieczność wykonywania określonych funkcji na podstawie czasu, prowadzenia kalendarza wydarzeń lub rejestracji, utrzymywania czasu w systemie, albo po prostu tworzenia zegara cyfrowego z Arduino. Z DS3231 możesz to dostać, inny z Składniki które dodajemy do listy.

DS3231 to moduł którego szukałeś, a tutaj znajdziesz wszystko co potrzebne do jego sterowania a ja również pokażę Ci przykład jak zintegruj go z Arduino z praktycznym przykładem ...

Co to jest DS3231?

DS3231

Przede wszystkim powinieneś wiedzieć, co to RTC (zegar czasu rzeczywistego)lub zegar czasu rzeczywistego. Te chipy są bardzo częste w wielu aplikacjach, w rzeczywistości twój komputer ma jeden z nich na płycie głównej, a także jest zasilany przez Bateria CR2032 również. To ten, który utrzymuje czas i konfigurację w BIOS-ie / UEFI iz którego system operacyjny pobiera to przy starcie na czas (choć teraz z Internetem synchronizacja z serwerami może posłużyć do większej precyzji, ale to to inna historia…).

To, co robi RTC, to uzyskiwanie pomiarów czasu, to takie proste. Różnica w stosunku do innych rodzajów zegarków elektronicznych polega na tym, że są po prostu mierzyć czasi robi to poprzez zliczanie impulsów sygnału zegara, znając jego częstotliwość i okresy. Oprócz czasu, RTC umożliwia również prowadzenie ewidencji dni, tygodni, miesięcy i lat. To znaczy pełna data ...

Aby było to możliwe, do RTC musi być dołączony plik Xtal lub kryształ kwarcu który będzie działał jako rezonator, ten, który zapewnia częstotliwość. Dodatkowo potrzebujesz obwodów elektronicznych zdolnych do liczenia i przechowywania daty w pamięci. Obwód musi być zdolny do liczenia sekund, minut, godzin, dni, tygodni, miesięcy i lat.

że pamięć jest ulotnaDlatego potrzebuje baterii, aby mieć stałą moc. Jeśli nie masz baterii lub bateria się wyczerpie, zostanie ona wymazana ... Tak dzieje się z komputerami, gdy bateria się wyczerpie, podają nieprawidłowy czas. Jeśli skonfigurujesz go, gdy komputer jest włączony, czas zostanie zachowany, ponieważ RTC jest zasilany, ale to podczas procesów, podczas których jest wyłączony, kiedy ta bateria jest potrzebna ...

W przypadku projektów typu „zrób to sam” twórcy zwykle używają dwóch popularnych układów RTC, którymi są DS1307 i DS3231. Oba są produkowane przez firmę Maxim (dawniej Dallas Semiconductor), a DS3231 jest dokładniejszym z nich, ponieważ nie jest tak podatny na zmiany temperatury jak poprzedni. Dlatego nie zmienia się tak bardzo w zależności od temperatury i dokładniej utrzymuje czas.

Czasami, przy zauważalnych różnicach temperatur, DS1307 może działać z opóźnieniem wynoszącym nawet 1 lub 2 minuty dziennie. Coś nie do zniesienia dla niektórych zastosowań.

W DS3231 nie chodzi o to, że nie mają na niego wpływu zmiany, ale że ma wbudowane systemy pomiaru temperatury i kompensacji, aby zapewnić dokładność 2ppm, co byłoby równoważne opóźnienie czasowe około 172 ms dziennie, czyli maksymalnie trochę więcej niż 1 sekundę tygodniowo. W praktyce zwykle zmieniają się tylko przez 1 lub 2 sekundy w miesiącu.

A co do drogi komunikować się z RTC DS3131, aby uzyskać wartości dat, które pobiera, wykonuje się to przez Magistrala I2C. A do zasilania można użyć 2.3 do 5.5 V dla DS3231, czyli nieco mniej niż 4.5 do 5.5 V dla DS1307, dzięki czemu może być bardziej energooszczędny i wydłużyć żywotność baterii.

Powinieneś również wiedzieć, że te moduły zwykle mają rozszerzenie EEPROM dodatkowe AT24C32 do przechowywania niektórych zapisów i poprzednich pomiarów, co jest dość praktyczne.

aplikacje

Jeśli chodzi o aplikacje to wspomniałem już o niektórych, jak na przykład zaimplementowanie zegara z Arduino, aby stworzyć system działający w oparciu o Czas Cokolwiek, aby zachować czas na sprzęcie, takim jak komputery i wiele innych urządzeń elektronicznych i urządzeń, które mają czas itp.

Może być również używany w projekty do tworzenia timerów do oświetlenia, systemów nawadniania, rejestratorów danych itp. Aplikacje mogą być najliczniejsze ...

Kup RTC DS3231

Moduł DS3131 jest tanii możesz go znaleźć w niektórych wyspecjalizowanych sklepach z elektroniką lub w dużych sklepach, takich jak eBay, AliExpress, Amazon itp. Jeśli jesteś zainteresowany, oto kilka zaleceń:

Integracja DS3231 Arduino

Zrzut ekranu Arduino IDE

Jeśli chcesz zintegruj DS3231 z płytą Arduino i zacznij tworzyć projekty „na czas”, musisz najpierw wykonać odpowiednie połączenia. Aby móc go podłączyć, wystarczy:

  • Pin SLC na płycie DS3231 musi być podłączony do A5 twojego Arduino UNO.
  • SDA DS3231 jest podłączone do A4 Arduino.
  • Vcc z modułu przejdzie do 5V z Arduino.
  • GND do GND.
Pamiętaj, aby zainstalować bibliotekę, aby używać RTC DS3231 w swoim Arduino IDE lub kod nie zadziała ...

Teraz masz podłączony system, następną rzeczą jest napisanie pliku szkic kodu źródłowego aby to zaprogramować. Możesz modyfikować kody i dostosowywać je do swoich potrzeb, ale możesz zacząć od pobrania daty z RTC DS3231 podłączonego do 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
}

Aby skorzystać z daty RTC do zaplanuj jakieś zadanie, na przykład do włączania i wyłączania świateł, do automatycznego nawadniania, do włączania alarmu itp. Pamiętaj, że do obsługi urządzeń o wyższym napięciu możesz użyć tranzystorów lub przekaźnik:

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


Treść artykułu jest zgodna z naszymi zasadami etyka redakcyjna. Aby zgłosić błąd, kliknij tutaj.

Bądź pierwszym który skomentuje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.