DS3231: hodiny a kalendár v reálnom čase pre vaše Arduino

DS3231

Pri niektorých projektoch je potrebné mať k dispozícii doklad o čase, hodine alebo dátume. Buď kvôli potrebe vykonávať určité funkcie na základe času, udržiavať kalendár udalostí alebo registrácie, udržiavať čas v systéme, alebo jednoducho vytvoriť digitálne hodiny s Arduinom. S DS3231 môžete to získať, ďalší z súčasti ktoré pridáme do zoznamu.

DS3231 je modul, ktorý ste hľadali, a tu nájdete všetko, čo potrebujete pre jeho ovládanie, a ukážem vám tiež príklad, ako integrujte ho s Arduinom s praktickým príkladom ...

Čo je to DS3231?

DS3231

Najskôr by ste mali vedieť, čo a RTC (hodiny v reálnom čase)alebo hodiny reálneho času. Tieto čipy sú veľmi časté v mnohých aplikáciách. Váš počítač má v skutočnosti jeden z nich na základnej doske a je tiež napájaný Batéria CR2032 tiež. Je to ten, ktorý udržiava čas a konfiguráciu v systéme BIOS / UEFI a od ktorého ho operačný systém odoberá pri včasnom zavedení systému (aj keď teraz je možné pre väčšiu presnosť použiť synchronizáciu so servermi pomocou internetu, ale teraz je ďalší príbeh ...).

To, čo RTC robí, je získavanie časových meraní, také jednoduché. Rozdiel od iných typov elektronických hodiniek je v tom, že jednoducho zmeraj čas, a robí to tak, že počíta impulzy hodinového signálu, pričom pozná jeho frekvenciu a periódy. RTC vám okrem času umožňuje aj účtovníctvo dní, týždňov, mesiacov a rokov. Teda celý dátum ...

Aby to bolo možné, musí byť k RTC priložené a Xtal alebo kremenný kryštál ktorý bude pôsobiť ako rezonátor, ten, ktorý poskytuje frekvenciu. Ďalej potrebujete elektronické obvody, ktoré sú schopné počítať a ukladať dátum do pamäte. Obvody musia byť schopné počítať sekundy, minúty, hodiny, dni, týždne, mesiace a roky.

Esa pamäť je nestálaPreto potrebuje batériu, aby mala stály výkon. Ak nemáte batériu alebo sa jej vybije, bude vymazaná ... To sa stane s počítačmi, keď sa batéria vybije, dajú nesprávny čas. Ak ho nakonfigurujete, keď je počítač zapnutý, čas sa zachová, pretože RTC je napájaný, ale je to potrebné počas procesov, počas ktorých je vypnutý, keď je potrebná batéria ...

Pre projekty DIY používajú tvorcovia zvyčajne dva bežné RTC čipy, ktorými sú DS1307 a DS3231. Oba vyrába spoločnosť Maxim (predtým Dallas Semiconductor) a model DS3231 je presnejší z týchto dvoch variantov, pretože na neho nie sú tak ovplyvnené teplotnými zmenami ako v prípade prvého. Preto toľko nekolíše v závislosti od teploty a drží čas presnejšie.

Niekedy, s výraznými teplotnými rozdielmi, mohla byť DS1307 oneskorená tak 1 alebo 2 minúty za deň. Pre niektoré aplikácie niečo neprijateľné.

DS3231 nie je taký, že by nebol ovplyvnený zmenami, ale že má zabudované systémy na meranie a kompenzáciu teploty, ktoré zabezpečujú presnosť 2 ppm, čo by sa rovnalo časové oneskorenie asi 172 ms denne, to znamená maximálne o niečo viac ako 1 sekundu týždenne. V praxi sa zvyčajne líšia iba 1 alebo 2 sekundy mesačne.

Čo sa týka spôsobu komunikovať s RTC DS3131, aby získal hodnoty dátumu, ktoré získa, je to vykonané I2C autobus. A ako napájanie môžete použiť 2.3 až 5.5 V pre DS3231, čo je o niečo menej ako 4.5 až 5.5 V pre DS1307, takže môže byť energeticky efektívnejší a predĺžiť životnosť batérie.

Mali by ste tiež vedieť, že tieto moduly majú zvyčajne a EEPROM dodatočný AT24C32 na uloženie niektorých záznamov a predchádzajúcich meraní, čo je celkom praktické.

aplikácie

Pokiaľ ide o aplikácie, už som spomenul niektoré, napríklad implementáciu hodín s Arduinom, na vytvorenie systému, ktorý funguje na základe Čas Nech už je to čokoľvek, udržiavať čas na zariadeniach, ako sú napríklad počítače, a mnohých ďalších elektronických zariadeniach a spotrebičoch, ktoré majú čas atď.

Možno použiť aj v projekty na vytvorenie časovačov pre osvetlenie, zavlažovacie systémy, datalogger atď. Aplikácií môže byť najpočetnejšie ...

Kúpte si RTC DS3231

Modul DS3131 je lacný, a nájdete ho v niektorých špecializovaných obchodoch s elektronikou alebo vo veľkých obchodoch, ako sú eBay, AliExpress, Amazon atď. Ak máte záujem o nejaké, tu je niekoľko odporúčaní:

Integrácia DS3231 Arduino

Screenshot Arduino IDE

Ak chcete, aby integrujte svoj DS3231 s doskou Arduino a začnete vytvárať „načasované“ projekty, musíte najskôr vytvoriť príslušné spojenia. Aby sme ho mohli pripojiť, je to také jednoduché ako:

  • PIN SLC na doske DS3231 musí byť pripojený k A5 vášho počítača Arduino UNO.
  • SDA DS3231 je pripojená k A4 Arduino.
  • Vcc z modulu pôjde na 5V z Arduina.
  • GND na GND.
Nezabudnite si nainštalovať knižnicu, aby ste vo svojom Arduino IDE mohli používať RTC DS3231, inak nebude kód fungovať ...

Teraz máte systém pripojený, ďalšou vecou je napísať zdrojový kód skice naprogramovať to. Kódy môžete upraviť a prispôsobiť svojim potrebám, ale mohli by ste začať jednoduchým získaním dátumu z RTC DS3231 pripojené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 bolo možné použiť dátum RTC do naplánovať nejakú úlohu, napríklad na zapnutie alebo vypnutie svetiel, na automatické zavlažovanie alebo na spustenie alarmu atď. Pamätajte, že na manipuláciu so zariadeniami s vyšším napätím môžete použiť tranzistory alebo štafeta:

#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 prvý komentár

Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.