DS3231: teie Arduino reaalajas kell ja kalender

DS3231

Mõnes projektis on vaja tõendit kellaaja, tunni või kuupäeva kohta. Kas vajadusest täita teatud funktsioone vastavalt ajale, pidada sündmuste kalendrit või registreerida, hoida aega süsteemis või lihtsalt luua digitaalne kell Arduinoga. Koos DS3231 saad selle, veel üks komponendid et lisame loendisse.

DS3231 on moodul, mida otsisite, ja siit leiate kõik, mida vajate selle juhtimiseks, ja näitan teile ka näite, kuidas integreerida see Arduinoga koos praktilise näitega ...

Mis on DS3231?

DS3231

Kõigepealt peaksite teadma, mida a RTC (reaalajas kell)või reaalajas kell. Need kiibid on paljudes rakendustes väga sagedased, tegelikult on teie arvutil üks neist teie emaplaadil ja seda toidab ka CR2032 aku ka. See hoiab BIOS / UEFI-s aega ja konfiguratsiooni ning sellest võtab operatsioonisüsteem selle õigeaegse käivitamise ajal (ehkki nüüd saab Internetiga suurema täpsuse huvides kasutada sünkroonimist serveritega, kuid see on teine ​​lugu ...).

See, mida RTC teeb, on aja mõõtmine, nii lihtne. Erinevus muud tüüpi elektroonilistest kelladest on see, et nad lihtsalt mõõta aegaja teeb seda, lugedes kellasignaali impulsse, teades selle sagedust ja perioode. Lisaks ajale võimaldab RTC teil pidada arvestust ka päevade, nädalate, kuude ja aastate üle. See tähendab, et täielik kuupäev ...

Selleks, et see oleks võimalik, peab RTC-le olema lisatud a Xtal ehk kvartskristall mis toimib resonaatorina, see, mis annab sageduse. Lisaks vajate elektroonilisi vooluringe, mis suudaksid kuupäeva loendada ja mällu salvestada. Skeem peab olema võimeline loendama sekundeid, minuteid, tunde, päevi, nädalaid, kuid ja aastaid.

Esa mälu on kõikuvSellepärast vajab see akut, et tal oleks pidev toide. Kui teil pole akut või see saab tühjaks, kustutatakse see ... Nii juhtub arvutitega, kui aku saab tühjaks, need annavad vale aja. Kui konfigureerite selle arvuti sisselülitamise ajal, jääb see aeg alles, kuna RTC-d toidetakse, kuid see on protsesside ajal, mille jooksul see on välja lülitatud, kui akut on vaja

Isetegemise projektide jaoks kasutavad tegijad tavaliselt kahte tavalist RTC kiipi, mis on DS1307 ja DS3231. Mõlemad on valmistanud Maxim (varem Dallas Semiconductor) ja DS3231 on neist kahest täpsem, kuna temperatuuri kõikumised ei mõjuta seda nii palju kui esimene. Seetõttu ei kõigu see sõltuvalt temperatuurist nii palju ja hoiab aega täpsemalt.

Mõnikord võib märgatavate temperatuurierinevustega DS1307 olla 1–2 min päevas. Mõne rakenduse jaoks on midagi talumatut.

DS3231 ei ole see, et variatsioonid seda ei mõjuta, vaid et sellel on sisseehitatud temperatuuri mõõtmise ja kompenseerimise süsteemid, et tagada 2ppm täpsus, mis oleks samaväärne ajanihe umbes 172 ms päevas ehk siis veidi rohkem kui 1 sekund nädalas. Ja praktikas varieeruvad need tavaliselt ainult 1 või 2 sekundit kuus.

Mis puutub viisisse RTC-ga suhelda DS3131 selle kuupäevaväärtuste saamiseks teeb seda I2C buss. Ja toite saamiseks võite kasutada DS2.3 jaoks 5.5–3231 V, mis on mõnevõrra madalam kui DS4.5 puhul 5.5–1307 V, nii et see võib olla energiasäästlikum ja muuta aku kauemaks.

Samuti peaksite teadma, et nendel moodulitel on tavaliselt EEPROM täiendav AT24C32 salvestada mõned kirjed ja varasemad mõõtmised, mis on üsna praktiline.

rakendused

Mis puutub rakendustesse, siis mainisin juba mõnda neist, näiteks kella rakendamist Arduinoga, et luua süsteem, mis toimib Aeg Mis iganes, hoida aega selliste seadmete jaoks nagu arvutid ja paljud muud elektroonilised seadmed, millel on aega jne.

Saab kasutada ka aastal projektide taimerite loomiseks valgustusele, niisutussüsteemidele, kataloogiraamatule jms. Rakendusi võib olla kõige rohkem ...

Osta RTC DS3231

mooduli DS3131 on odavja leiate selle mõnes spetsialiseeritud elektroonikakaupluses või suurtes kauplustes, nagu eBay, AliExpress, Amazon jne. Kui olete huvitatud selle olemasolust, on siin mõned soovitused:

DS3231 Arduino integreerimine

Arduino IDE ekraanipilt

Kui soovite integreerige oma DS3231 oma Arduino tahvliga ja alustage "ajastatud" projektide loomist, peate kõigepealt looma sobivad ühendused. Selle ühendamiseks on see nii lihtne:

  • DS3231-plaadi SLC-tihvt peab olema ühendatud teie A5-ga Arduino UNO.
  • DS3231 SDA on ühendatud Arduino A4-ga.
  • Moodulist pärit Vcc läheb Arduinost 5V-le.
  • GND kuni GND.
Ärge unustage oma Arduino IDE-s RTC DS3231 kasutamiseks teeki installida, vastasel juhul ei tööta kood ...

Nüüd on süsteem ühendatud, järgmine asi on kirjutada visand lähtekood selle programmeerimiseks. Koode saate muuta ja kohandada vastavalt oma vajadustele, kuid võite alustada lihtsalt kuupäeva hankimisega Arduinoga ühendatud RTC DS3231-st:

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

Ja selleks, et kasutada RTC kuupäeva ajastage mõni ülesanne, näiteks tulede sisse- või väljalülitamiseks, automaatseks kastmiseks või alarmi helisemiseks jne. Pidage meeles, et kõrgema pingega seadmete käsitsemiseks võite kasutada transistore või relee:

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


Artikli sisu järgib meie põhimõtteid toimetuse eetika. Veast teatamiseks klõpsake nuppu siin.

Ole esimene kommentaar

Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutab: Miguel Ángel Gatón
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.