DS3231: Ji bo Arduino-ya we demjimêr û salnameya rastîn

DS3231

Di hin projeyan de pêdivî ye ku delîlên dem, demjimêr, an tarîxê hebin. An ji ber ku pêdivî ye ku hin fonksiyonên li gorî demê bêne bicîh anîn, da ku salnameyek bûyeran an tomarkirinê were domandin, demê di pergalê de bimîne, an jî bi tenê ji bo afirandina demjimêrek dîjîtal bi Arduino re. Bi DS3231 hûn dikarin wê bigirin, ya din jî beşan ku em li lîsteyê zêde bikin.

DS3231 modûla ku hûn lê digeriyan e, û li vir hûn ê her tiştê ku hûn ji bo kontrolkirina wê hewce ne bibînin û ez ê jî mînakek nîşanî we bikim ka çawa wê bi Arduino re bike yek bi mînakek pratîkî ...

DS3231 çi ye?

DS3231

Berî her tiştî, divê hûn zanibin çi a RTC (Demjimêra Rastîn), an demjimêra dema rast. Van çîpên di gelek sepanan de pir caran pir in, bi rastî, PC-ya we yek ji wan li ser dêya we heye, û ew jî ji hêla Pîlê CR2032 jî. Ew yek e ku di BIOS / UEFI de dem û veavakirina xwe didomîne û pergala xebitandinê jê digire dema ku boot dibe ku di wextê de be (her çend nuha, bi thenternetê re, ji bo rastdariya mezintir senkronîzekirina bi serveran re dikare were bikar anîn, lê ev çîrokek din e…).

Ya ku RTC dike ew e ku pîvandinên demê, ew hêsan e. Cûda ji celebên din ên demjimêrên elektronîkî ev e ku ew bi hêsanî demê bipîvin, û ew vê yekê bi jimartina pêlên nîşana demjimêrê dike, bi frekans û serdemên wê dizane. Digel demê, RTC di heman demê de dihêle ku hûn hesabê roj, hefte, meh û salan jî bikin. Ango, tarîxa tam ...

Ji bo ku ev gengaz be, divê bi RTC re a Krîstala Xtal an quartz ku dê wekî rezonator, ya ku frekansê peyda dike, hereket bike. Wekî din, ji we re hewcedariyên elektronîkî hene ku bikaribin dîrokê di bîranînekê de bihejmêrin û tomar bikin. Divê dorhêl bikaribe saniye, hûrdem, demjimêr, roj, hefte, meh û sal bijmêre.

esa bîranîn şepirze yeJi ber vê yekê ew hewceyê pîlê ye, da ku hêza wê ya domdar hebe. Heke pîlokek we tune an ew xilas dibe, ew ê were jêbirin ... Ya ku diqewime PC-yên dema pîlê wenda dibe, ew demek çewt didin. Heke hûn dema PC-yê vesaz dikin wê vesaz bikin, dê dem were hiştin, ji ber ku RTC tê xebitandin, lê ew di dema pêvajoyên dema ku ew pêdivî ye dema ku pêdivî ye pîlê pêdivî ye ...

Ji bo projeyên DIY, çêker bi gelemperî du çipikên hevpar ên RTC bikar tînin, ku ew in DS1307 û DS3231. Herdu jî ji hêla Maxim (berê Dallas Semiconductor) ve têne çêkirin, û DS3231 ji her duyan duristtir e, ji ber ku ew ne wekî bandora guherînên germahiyê wekî ya berê bandor dike. Ji ber vê yekê, ew bi germahiyê ve ewçend naguhere, û wê demê bêtir bi hûrgulî diparêze.

Carinan, bi cûdahiyên germahiyê yên berbiçav, DS1307 dikare rojane 1 an 2 hûrdem bimîne. Tiştek ji bo hin sepanan nayê tehemul kirin.

DS3231 ne ev e ku ji hêla guherînan ve nayê bandor kirin, lê ew xwedan pergalên pîvandinê û tezmînata germahiyê ye ku ji bo rastbûna 2ppm, ku dê wekheviyek be derengiya demê rojê bi qasî 172 mîlyon, ango herî zêde heftê ji 1 saniye hindiktir. Di pratîkê de, ew bi gelemperî mehê tenê 1 an 2 saniye diguherin.

Wekî awayê bi RTC re têkilî daynin DS3131 da ku nirxên tarîxê werbigire, ew ji hêla ve tête kirin Otobus I2C. For ji bo hêzê, hûn dikarin ji bo DS2.3-ê, ku ji 5.5-ê ji bo 3231v-ya DS4.5 hinekî kêmtir e, ji 5.5 heta 1307v bikar bînin, ji ber vê yekê ew dikare enerjiyê bêtir bandor bike û pîlê dirêjtir bike.

Di heman demê de, divê hûn zanibin ku bi gelemperî van modûlan a EEPROM AT24C32 zêde ji bo tomarkirina hin tomar û pîvandinên berê, ku pir pratîkî ye.

Serîlêdanên

Di derbarê sepanan de, min berê jî qala hinan kir, wekî ku bi Arduino re demjimêrek bicîh bînin, da ku pergalek ku li ser bingeha Wext Çi dibe bila bibe, ku dem li ser alavên wekî PC û gelek alav û amûrên elektronîkî yên ku wextê wan heye hwd bihêlin.

Di heman demê de dikare were bikar anîn projeyên ji bo ronîkirin, pergalên avdanê, datalogger, hwd demjimêr çêbikin. Serîlêdan dikarin bibin pirjimar ...

RTC DS3231 bikirin

Module DS3131 erzan e, û hûn dikarin wê li hin firotgehên elektronîkî yên pispor an firotgehên mezin ên wekî eBay, AliExpress, Amazon, û hwd bibînin. Heke hûn dixwazin bibin yek, li vir çend pêşniyar hene:

DS3231 Integration Arduino

Dîmendera Dîmenderê ya Arduino IDE

Ger hûn bixwazin DS3231-a xwe bi tabloya xwe ya Arduino re yek bikin û dest bi afirandina projeyên "demjimêr" bikin, divê hûn pêşî têkiliyên guncan çêbikin. Ji bo ku meriv pê ve girêbide, ew qas hêsan e:

  • Pêdivî ye ku pina SLC ya desteya DS3231 bi A5-a ya we ve were girêdan Arduino UNO.
  • SDA ya DS3231 bi A4-a Arduino ve girêdayî ye.
  • Vcc ji modulê dê ji Arduino biçe 5V.
  • GND GND.
Ji bîr mekin ku pirtûkxaneyê saz bikin da ku di Arduino IDE-ya xwe de RTC DS3231 bikar bîne an na dê kod nexebite ...

Naha pergalê we ve girêdayî ye, ya din ew e ku meriv binivîse koda çavkaniyê kêşandin wê bername bikin. Hûn dikarin kodan biguherînin û wan li gorî hewcedariyên xwe biguncînin, lê hûn dikarin bi hêsanî tarîxê ji RTC DS3231 ve girêdayî Arduino dest pê bikin:

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

Ji bo ku tarîxa RTC bikar bînin ku hin peywiran destnîşan bikin, wekî mînak ji bo vemirandin û vemirandina ronahiyê, ji bo avdana otomatîkî, an jî ji bo alarmek lê were û hwd Bînin bîra xwe ku ji bo ajotina alavên voltaja bilind hûn dikarin transîstor bikar bînin an relay:

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


Naveroka gotarê bi prensîbên me ve girêdayî ye etîka edîtoriyê. Ji bo raporkirina çewtiyek bitikîne vir.

Beşa yekem be ku şîrove bike

Commentîroveya xwe bihêlin

Navnîşana e-peyamê ne, dê bê weşandin. qadên pêwist in bi nîşankirin *

*

*

  1. Berpirsê daneyê: Miguel Ángel Gatón
  2. Armanca daneyê: SPAM-ê kontrol bikin, rêveberiya şîroveyê.
  3. Qanûnîbûn: Destûra we
  4. Ragihandina daneyê: Daneyî dê ji aliyên sêyemîn re neyê ragihandin ji bilî peywira qanûnî.
  5. Tomarkirina daneyê: Databaza ku ji hêla Occentus Networks (EU) ve hatî mazûvan kirin
  6. Maf: Di her demê de hûn dikarin agahdariya xwe bi sînor bikin, vegerînin û jê bibin.