DS3231: cloc amser real a chalendr ar gyfer eich Arduino

DS3231

Mewn rhai prosiectau mae'n angenrheidiol cael prawf o'r amser, yr awr neu'r dyddiad. Naill ai oherwydd yr angen i gyflawni rhai swyddogaethau yn seiliedig ar amser, i gynnal calendr o ddigwyddiadau neu gofrestru, i gadw'r amser mewn system, neu'n syml i greu cloc digidol gydag Arduino. Gyda y DS3231 gallwch ei gael, un arall o'r cydrannau ein bod yn ychwanegu at y rhestr.

Y DS3231 yw'r modiwl yr oeddech yn edrych amdano, ac yma fe welwch bopeth sydd ei angen arnoch i'w reoli a byddaf hefyd yn dangos enghraifft i chi o sut ei integreiddio ag Arduino gydag enghraifft ymarferol ...

Beth yw'r DS3231?

DS3231

Yn gyntaf oll, dylech chi wybod beth a RTC (Cloc Amser Real), neu gloc amser real. Mae'r sglodion hyn yn aml iawn mewn llu o gymwysiadau, mewn gwirionedd, mae gan eich cyfrifiadur un ohonynt ar eich mamfwrdd, ac mae hefyd yn cael ei bweru gan a Batri CR2032 hefyd. Dyma'r un sy'n cynnal yr amser a'r cyfluniad yn y BIOS / UEFI ac y mae'r system weithredu yn cymryd ohono wrth roi hwb i fod ar amser (er nawr, gyda'r Rhyngrwyd, gellir defnyddio cydamseru â gweinyddwyr i fod yn fwy manwl, ond mae hyn yn stori arall…).

Yr hyn y mae'r RTC yn ei wneud yw sicrhau mesuriadau amser, mor syml â hynny. Y gwahaniaeth o fathau eraill o wylio electronig yw eu bod yn syml mesur yr amser, ac mae'n gwneud hynny trwy gyfrif corbys signal cloc, gan wybod amlder a chyfnodau ohono. Yn ogystal â'r amser, mae RTC hefyd yn caniatáu ichi gadw cyfrif o'r dyddiau, wythnosau, misoedd a blynyddoedd. Hynny yw, y dyddiad llawn ...

Er mwyn i hyn fod yn bosibl, rhaid i a Grisial Xtal neu gwarts a fydd yn gweithredu fel cyseinydd, yr un sy'n darparu'r amledd. Hefyd, mae angen cylchedwaith electronig arnoch sy'n gallu cyfrif a storio'r dyddiad mewn cof. Rhaid i'r cylchedwaith allu cyfrif eiliadau, munudau, oriau, dyddiau, wythnosau, misoedd a blynyddoedd.

Esa cof yn gyfnewidiolDyna pam mae angen y batri arno, i gael pŵer cyson. Os nad oes gennych fatri neu ei fod yn rhedeg allan, bydd yn cael ei ddileu ... Dyna beth sy'n digwydd i gyfrifiaduron personol pan fydd y batri yn rhedeg allan, maen nhw'n rhoi amser anghywir. Os byddwch chi'n ei ffurfweddu tra bydd y PC ymlaen, bydd yr amser yn cael ei gadw, gan fod y RTC yn cael ei bweru, ond mae yn ystod y prosesau pan fydd i ffwrdd pan fydd angen y batri hwnnw ...

Ar gyfer prosiectau DIY, mae gwneuthurwyr fel arfer yn defnyddio dau sglodyn RTC cyffredin, sef y DS1307 a DS3231. Gwneir y ddau gan Maxim (Dallas Semiconductor gynt), a'r DS3231 yw'r mwyaf cywir o'r ddau, gan nad yw amrywiadau tymheredd yn effeithio cymaint ag y mae'r cyntaf yn ei wneud. Felly, nid yw'n amrywio cymaint yn dibynnu ar y tymheredd, ac mae'n cadw'r amser yn fwy manwl gywir.

Ar adegau, gyda gwahaniaethau tymheredd amlwg, gallai'r DS1307 fod mor llusgo ag 1 neu 2 funud y dydd. Rhywbeth annioddefol ar gyfer rhai cymwysiadau.

Nid y DS3231 yw nad yw amrywiadau yn effeithio arno, ond bod ganddo systemau mesur tymheredd ac iawndal adeiledig i sicrhau cywirdeb o 2ppm, a fyddai'n cyfateb i a oedi amser o tua 172ms y dydd, hynny yw, ychydig yn fwy nag 1 eiliad yr wythnos ar y mwyaf. Ac yn ymarferol, dim ond 1 neu 2 eiliad y mis y maent yn amrywio fel rheol.

O ran y ffordd cyfathrebu â'r RTC DS3131 i gael y gwerthoedd dyddiad y mae'n eu cael, mae'n cael ei wneud gan Bws I2C. Ac ar gyfer pŵer, gallwch ddefnyddio 2.3 i 5.5v ar gyfer y DS3231, sydd ychydig yn is na'r 4.5 i 5.5v ar gyfer y DS1307, felly gall fod yn fwy effeithlon o ran ynni a gwneud i'r batri bara'n hirach.

Hefyd, dylech wybod bod gan y modiwlau hyn a EEPROM AT24C32 ychwanegol i storio rhai cofnodion a mesuriadau blaenorol, sy'n eithaf ymarferol.

ceisiadau

O ran y ceisiadau, rwyf eisoes wedi crybwyll rhai, megis gweithredu cloc gydag Arduino, i greu system sy'n gweithredu yn seiliedig ar Yr amser Beth bynnag, i gadw'r amser ar offer fel cyfrifiaduron personol a llawer o ddyfeisiau ac offer electronig eraill sydd ag amser, ac ati.

Gellir ei ddefnyddio hefyd yn prosiectau i greu amseryddion ar gyfer goleuadau, systemau dyfrhau, datalogger, ac ati. Gall y cymwysiadau fod y mwyaf niferus ...

Prynu RTC DS3231

Y modiwl Mae DS3131 yn rhad, a gallwch ddod o hyd iddo mewn rhai siopau electroneg arbenigol neu mewn siopau mawr fel eBay, AliExpress, Amazon, ac ati. Os oes gennych ddiddordeb mewn cael un, dyma rai argymhellion:

DS3231 Integreiddio Arduino

Ciplun o Arduino IDE

Os ydych chi eisiau integreiddiwch eich DS3231 â'ch bwrdd Arduino a dechrau creu prosiectau "wedi'u hamseru", yn gyntaf rhaid i chi wneud y cysylltiadau priodol. Er mwyn gallu ei gysylltu, mae mor syml â:

  • Rhaid cysylltu pin SLC y bwrdd DS3231 ag A5 eich Arduino UNO.
  • Mae SDA y DS3231 wedi'i gysylltu ag A4 o Arduino.
  • Bydd Vcc o'r modiwl yn mynd i 5V o Arduino.
  • GND i GND.
Cofiwch osod y llyfrgell i ddefnyddio'r RTC DS3231 yn eich Arduino IDE neu ni fydd y cod yn gweithio ...

Nawr bod y system wedi'i chysylltu, y peth nesaf yw ysgrifennu'r cod ffynhonnell braslun i'w drefnu. Gallwch chi addasu'r codau a'u haddasu i'ch anghenion, ond fe allech chi ddechrau trwy gael y dyddiad o RTC DS3231 wedi'i gysylltu ag 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
}

Ac er mwyn defnyddio'r dyddiad RTC i amserlennu rhywfaint o dasg, megis ar gyfer troi goleuadau ymlaen neu i ffwrdd, ar gyfer dyfrio yn awtomatig, neu i larwm swnio, ac ati. Cofiwch y gallwch ddefnyddio transistorau neu i drin dyfeisiau foltedd uwch ras gyfnewid:

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


Mae cynnwys yr erthygl yn cadw at ein hegwyddorion moeseg olygyddol. I riportio gwall cliciwch yma.

Bod y cyntaf i wneud sylwadau

Gadewch eich sylw

Ni fydd eich cyfeiriad e-bost yn cael ei gyhoeddi. Meysydd gofynnol yn cael eu marcio â *

*

*

  1. Yn gyfrifol am y data: Miguel Ángel Gatón
  2. Pwrpas y data: Rheoli SPAM, rheoli sylwadau.
  3. Cyfreithlondeb: Eich caniatâd
  4. Cyfathrebu'r data: Ni fydd y data'n cael ei gyfleu i drydydd partïon ac eithrio trwy rwymedigaeth gyfreithiol.
  5. Storio data: Cronfa ddata wedi'i chynnal gan Occentus Networks (EU)
  6. Hawliau: Ar unrhyw adeg gallwch gyfyngu, adfer a dileu eich gwybodaeth.