DS3231: hodiny a kalendář v reálném čase pro vaše Arduino

DS3231

U některých projektů je nutné mít doklad o čase, hodině nebo datu. Buď kvůli potřebě vykonávat určité funkce na základě času, udržovat kalendář událostí nebo registraci, udržovat čas v systému, nebo jednoduše vytvořit digitální hodiny s Arduino. S DS3231 můžete to získat, další z složky které přidáme do seznamu.

DS3231 je modul, který jste hledali, a zde najdete vše, co potřebujete pro jeho ovládání, a ukážu vám také příklad, jak integrujte jej s Arduino s praktickým příkladem ...

Co je to DS3231?

DS3231

Nejprve byste měli vědět, co a RTC (hodiny v reálném čase)nebo hodiny reálného času. Tyto čipy jsou velmi časté v mnoha aplikacích, ve skutečnosti má váš počítač jeden z nich na základní desce a je také napájen Baterie CR2032 taky. Je to ten, který udržuje čas a konfiguraci v systému BIOS / UEFI a ze kterého jej operační systém bere při zavádění, aby byl spuštěn včas (i když nyní, s internetem, lze pro větší přesnost použít synchronizaci se servery, ale toto je další příběh…).

To, co RTC dělá, je získat měření času, tak jednoduché. Rozdíl od jiných typů elektronických hodinek spočívá v tom, že jednoduše změřit čas, a to tak, že počítá pulsy hodinových signálů a zná jejich frekvenci a periody. Kromě času vám RTC také umožňuje vést účet za dny, týdny, měsíce a roky. To znamená celé datum ...

Aby to bylo možné, musí být RTC doprovázeno a Xtal nebo křemenný krystal který bude fungovat jako rezonátor, ten, který poskytuje frekvenci. Kromě toho potřebujete elektronické obvody schopné počítat a ukládat datum do paměti. Obvody musí být schopné počítat sekundy, minuty, hodiny, dny, týdny, měsíce a roky.

Že paměť je nestáláProto potřebuje baterii, aby měla stálý výkon. Pokud nemáte baterii nebo se vybije, bude vymazána ... To se stane s PC, když se baterie vybije, dávají nesprávný čas. Pokud jej nakonfigurujete, když je počítač zapnutý, čas bude zachován, protože RTC je napájen, ale je to během procesů, během nichž je vypnuto, když je potřeba tato baterie ...

Pro kutilské projekty tvůrci obvykle používají dva běžné RTC čipy, kterými jsou DS1307 a DS3231. Oba vyrábí Maxim (dříve Dallas Semiconductor) a model DS3231 je přesnější z těchto dvou, protože není tak ovlivněn teplotními výkyvy jako první. Proto tolik nekolíše v závislosti na teplotě a udržuje čas přesněji.

Někdy, se znatelnými teplotními rozdíly, mohla být DS1307 zpožděna jako 1 nebo 2 minuty denně. Pro některé aplikace něco nesnesitelného.

DS3231 není tím, že by nebyl ovlivněn změnami, ale že má vestavěné systémy měření a kompenzace teploty, které zajišťují přesnost 2 ppm, což by odpovídalo časová prodleva asi 172 ms denně, tedy maximálně o více než 1 sekundu týdně. V praxi se obvykle liší pouze 1 nebo 2 sekundy měsíčně.

Pokud jde o cestu komunikovat s RTC DS3131 k získání datových hodnot, které získá, provádí I2C autobus. A pro napájení můžete použít 2.3 až 5.5 V pro DS3231, což je o něco méně než 4.5 až 5.5 V pro DS1307, takže může být energeticky účinnější a baterie vydrží déle.

Měli byste také vědět, že tyto moduly obvykle mají EEPROM další AT24C32 ukládat některé záznamy a předchozí měření, což je docela praktické.

aplikace

Pokud jde o aplikace, již jsem zmínil některé, například implementaci hodin s Arduinem, k vytvoření systému, který funguje na základě Čas Nechte si čas na zařízení, jako jsou počítače a mnoho dalších elektronických zařízení a zařízení, která mají čas atd.

Lze použít také v projekty vytvářet časovače pro osvětlení, zavlažovací systémy, datalogger atd. Aplikace mohou být nejpočetnější ...

Kupte si RTC DS3231

Modul DS3131 je levnýa najdete jej v některých specializovaných obchodech s elektronikou nebo ve velkých obchodech, jako jsou eBay, AliExpress, Amazon atd. Pokud máte zájem o nějaké, zde je několik doporučení:

Integrace DS3231 Arduino

Screenshot Arduino IDE

Pokud chcete, aby integrujte svůj DS3231 s vaší deskou Arduino a začít vytvářet „načasované“ projekty, musíte nejprve provést příslušná připojení. Aby bylo možné jej připojit, je to tak jednoduché jako:

  • Pin SLC na desce DS3231 musí být připojen k A5 vašeho Arduino UNO.
  • SDA DS3231 je připojen k A4 Arduino.
  • Vcc z modulu přejde na 5V z Arduina.
  • GND na GND.
Nezapomeňte nainstalovat knihovnu pro použití RTC DS3231 ve vašem Arduino IDE, jinak nebude kód fungovat ...

Nyní máte systém připojen, další věcí je napsat načrtněte zdrojový kód naprogramovat to. Kódy můžete upravit a přizpůsobit svým potřebám, ale můžete začít jednoduše získáním data z RTC DS3231 připojeného k Arduinu:

#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 aby bylo možné použít datum RTC do naplánovat nějaký úkol, například pro zapnutí nebo vypnutí světel, pro automatické zavlažování nebo pro zvukový alarm atd. Nezapomeňte, že pro manipulaci se zařízeními vyššího napětí můžete použít tranzistory nebo spol:

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


Buďte první komentář

Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.