DS3231: reāllaika pulkstenis un kalendārs jūsu Arduino

DS3231

Dažos projektos ir nepieciešams laika, stundas vai datuma pierādījums. Neatkarīgi no tā, vai ir nepieciešams veikt noteiktas funkcijas, pamatojoties uz laiku, uzturēt notikumu kalendāru vai reģistrāciju, uzturēt laiku sistēmā vai vienkārši izveidot digitālo pulksteni ar Arduino. Ar DS3231 jūs varat to iegūt, vēl viens sastāvdaļas ko mēs pievienojam sarakstam.

DS3231 ir modulis, kuru meklējāt, un šeit jūs atradīsit visu nepieciešamo tā vadībai, un es jums parādīšu arī piemēru integrēt to ar Arduino ar praktisku piemēru ...

Kas ir DS3231?

DS3231

Pirmkārt, jums vajadzētu zināt, kas a RTC (reālā laika pulkstenis)vai reālā laika pulksteni. Šīs mikroshēmas ir ļoti izplatītas daudzās lietojumprogrammās, patiesībā datora mātesplatē ir viena no tām, un to darbina arī CR2032 akumulators arī. Tas ir tas, kurš uztur laiku un konfigurāciju BIOS / UEFI un no kura operētājsistēma to ņem, kad sāknēšana notiek laikā (lai gan tagad, izmantojot internetu, lielāku precizitāti var izmantot sinhronizāciju ar serveriem, taču tas ir cits stāsts ...).

Tas, ko dara RTC, ir iegūt tik vienkāršus laika mērījumus. Atšķirība no citiem elektronisko pulksteņu veidiem ir tā, ka tie vienkārši izmērīt laiku, un tas tiek darīts, skaitot pulksteņa signāla impulsus, zinot tā biežumu un periodus. Papildus laikam RTC ļauj jums veikt arī dienu, nedēļu, mēnešu un gadu uzskaiti. Tas ir, pilns datums ...

Lai tas būtu iespējams, RTC jāpievieno a Xtal vai kvarca kristāls kas darbosies kā rezonators, tas, kas nodrošina frekvenci. Jums nepieciešama elektroniska shēma, kas spēj skaitīt un saglabāt datumu atmiņā. Shēmai jāspēj skaitīt sekundes, minūtes, stundas, dienas, nedēļas, mēnešus un gadus.

Esa atmiņa ir nepastāvīgaTāpēc tam ir nepieciešams akumulators, lai tas nepārtraukti darbotos. Ja jums nav akumulatora vai tas izlādējas, tas tiks izdzēsts ... Tas notiek ar datoriem, kad akumulators beidzas, tie norāda nepareizu laiku. Ja jūs to konfigurējat, kamēr ir ieslēgts dators, laiks tiks saglabāts, jo RTC tiek darbināts, taču tas notiek procesu laikā, kad tas ir izslēgts, kad ir nepieciešama šī baterija ...

DIY projektos veidotāji parasti izmanto divas parastās RTC mikroshēmas, kuras ir DS1307 un DS3231. Abus ražo Maksims (agrāk Dallas Semiconductor), un DS3231 ir precīzāks no abiem, jo ​​temperatūras svārstības to neietekmē tik daudz kā pirmais. Tāpēc tas nav tik ļoti svārstīgs atkarībā no temperatūras, un tas precīzāk saglabā laiku.

Dažreiz ar ievērojamām temperatūras atšķirībām DS1307 var būt pat 1 vai 2 minūtes dienā. Kaut kas neciešams dažām lietojumprogrammām.

DS3231 nav tas, ka to neietekmē variācijas, bet tajā ir iebūvētas temperatūras mērīšanas un kompensācijas sistēmas, lai nodrošinātu 2ppm precizitāti, kas būtu līdzvērtīga laika nobīde aptuveni 172 ms dienā, tas ir, nedaudz vairāk par 1 sekundi nedēļā. Un praksē tie parasti mainās tikai 1 vai 2 sekundes mēnesī.

Kas attiecas uz ceļu sazināties ar RTC DS3131, lai iegūtu datuma vērtības, kuras tā saņem, to veic I2C autobuss. Strāvas padevei DS2.3 varat izmantot no 5.5 līdz 3231v, kas ir nedaudz zemāks nekā DS4.5 no 5.5 līdz 1307v, tāpēc tas var būt energoefektīvāks un padarīt akumulatoru ilgāku laiku.

Turklāt jums jāzina, ka šiem moduļiem parasti ir EEPROM papildus AT24C32 glabāt dažus ierakstus un iepriekšējos mērījumus, kas ir diezgan praktiski.

pieteikumi

Attiecībā uz lietojumprogrammām es jau minēju dažus, piemēram, lai ieviestu pulksteni ar Arduino, lai izveidotu sistēmu, kas darbojas, pamatojoties uz Laiks Lai ko, lai saglabātu laiku tādām iekārtām kā personālie datori un daudzas citas elektroniskas ierīces un ierīces, kurām ir laiks utt.

Var izmantot arī projekti izveidot taimeri apgaismojumam, apūdeņošanas sistēmām, datu katalogam utt. Pieteikumi var būt visvairāk ...

Pērciet RTC DS3231

Modulis DS3131 ir lēts, un jūs to varat atrast dažos specializētos elektronikas veikalos vai lielos veikalos, piemēram, eBay, AliExpress, Amazon utt. Ja jūs interesē tāda izveidošana, šeit ir daži ieteikumi:

DS3231 Arduino integrācija

Arduino IDE ekrānuzņēmums

Ja jūs vēlaties integrējiet savu DS3231 ar savu Arduino dēli un sāciet veidot "savlaicīgus" projektus, vispirms ir jāizveido atbilstoši savienojumi. Lai to varētu savienot, tas ir tik vienkārši, kā:

  • DS3231 plates SLC tapai jābūt savienotai ar jūsu A5 Arduino UNO.
  • DS3231 SDA ir savienots ar Arduino A4.
  • Vcc no moduļa nonāks 5V no Arduino.
  • GND uz GND.
Neaizmirstiet instalēt bibliotēku, lai savā Arduino IDE izmantotu RTC DS3231, pretējā gadījumā kods nedarbosies ...

Tagad jums ir savienota sistēma, nākamā lieta ir uzrakstīt ieskicēt pirmkodu lai to ieprogrammētu. Jūs varat pārveidot kodus un pielāgot tos savām vajadzībām, taču jūs varētu sākt, vienkārši iegūstot datumu no RTC DS3231, kas savienots ar 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
}

Un, lai izmantotu RTC datumu ieplāno kādu uzdevumu, piemēram, gaismas ieslēgšanai vai izslēgšanai, automātiskai laistīšanai vai trauksmes signālam utt. Atcerieties, ka, lai apstrādātu augstāka sprieguma ierīces, varat izmantot tranzistorus vai relē:

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


Esi pirmais, kas komentārus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.