DS3231: realaus laiko laikrodis ir „Arduino“ kalendorius

DS3231

Kai kuriuose projektuose būtina turėti laiko, valandos ar datos įrodymą. Arba dėl poreikio atlikti tam tikras funkcijas, pagrįstas laiku, išlaikyti įvykių kalendorių ar registraciją, laikyti laiką sistemoje arba tiesiog sukurti skaitmeninį laikrodį su Arduino. Su DS3231 galite tai gauti, dar vienas komponentai kad mes įtraukiame į sąrašą.

DS3231 yra modulis, kurio ieškojote. Čia rasite viską, ko reikia jo valdymui, taip pat parodysiu pavyzdį, kaip integruoti jį su „Arduino“ su praktiniu pavyzdžiu ...

Kas yra DS3231?

DS3231

Visų pirma turėtumėte žinoti, kas a RTC (realaus laiko laikrodis)arba realaus laiko laikrodis. Šie lustai yra labai dažni daugybėje programų, tiesą sakant, jūsų kompiuteryje yra vienas iš jų jūsų pagrindinėje plokštėje, o jį taip pat maitina CR2032 baterija taip pat. Tai ta, kuri palaiko laiką ir konfigūraciją BIOS / UEFI ir iš kurios operacinė sistema ima ją paleidžiant, kad būtų laiku (nors dabar, naudojant internetą, tiksliau galima naudoti sinchronizavimą su serveriais, tačiau tai yra kita istorija ...).

Tai, ką RTC daro, yra laiko matavimas. Skirtumas nuo kitų tipų elektroninių laikrodžių yra tas, kad jie paprasčiausiai pamatuok laikąir tai daro skaičiuodamas laikrodžio signalo impulsus, žinodamas jo dažnį ir periodus. Be laiko, RTC taip pat leidžia tvarkyti dienų, savaičių, mėnesių ir metų apskaitą. Tai yra visa data ...

Kad tai būtų įmanoma, prie RTC turi būti pridedamas a Xtal arba kvarco kristalas kuris veiks kaip rezonatorius, tas, kuris teikia dažnį. Be to, jums reikia elektroninių schemų, galinčių suskaičiuoti ir išsaugoti datą atmintyje. Grandinė turi sugebėti skaičiuoti sekundes, minutes, valandas, dienas, savaites, mėnesius ir metus.

kad atmintis yra nepastoviŠtai kodėl jai reikalinga baterija, kad būtų nuolat maitinama. Jei neturite akumuliatoriaus arba jis išsenka, jis bus ištrintas ... Taip nutinka kompiuteriams, kai išsenka baterija, jie pateikia neteisingą laiką. Jei sukonfigūruosite jį įjungus kompiuterį, laikas bus išlaikytas, nes RTC yra maitinamas, tačiau tai vyksta procesų metu, kai jis išjungiamas, kai reikia tos baterijos ...

Vykdydami „pasidaryk pats“ projektus kūrėjai paprastai naudoja du įprastus RTC lustus, kurie yra DS1307 ir DS3231. Abu juos gamina „Maxim“ (buvęs „Dallas Semiconductor“), o DS3231 yra tikslesnis iš dviejų, nes temperatūros svyravimai jo neveikia taip, kaip daro pirmasis. Todėl jis tiek nesvyruoja, priklausomai nuo temperatūros, ir tiksliau laiko laiką.

Kartais, esant pastebimiems temperatūrų skirtumams, DS1307 gali būti net 1 ar 2 min. Per dieną. Kažkas netoleruotino kai kurioms programoms.

„DS3231“ nėra tai, kad jo neveikia variacijos, bet kad jis turi įmontuotas temperatūros matavimo ir kompensavimo sistemas, užtikrinančias 2 ppm tikslumą, kuris būtų lygiavertis užvėlinimas maždaug 172 ms per dieną, tai yra, šiek tiek daugiau nei 1 sekundė per savaitę. Ir praktiškai jie paprastai skiriasi tik 1 ar 2 sekundes per mėnesį.

Kalbant apie būdą bendrauti su RTC Norėdami gauti datos reikšmes, DS3131 tai daro I2C magistralė. Maitinimui galite naudoti 2.3–5.5 V DS3231, kuris yra šiek tiek mažesnis nei 4.5–5.5 V DS1307, todėl jis gali būti efektyvesnis energijai ir baterija gali tarnauti ilgiau.

Be to, turėtumėte žinoti, kad šie moduliai paprastai turi EEPROM papildomai AT24C32 saugoti kai kuriuos įrašus ir ankstesnius matavimus, o tai yra gana praktiška.

programos

Kalbant apie programas, jau minėjau kai kurias, pvz., Įdiegti laikrodį su „Arduino“, sukurti sistemą, veikiančią remiantis Laikas Nepaisant to, kad būtų galima skirti laiko tokiai įrangai kaip asmeniniai kompiuteriai ir daugelis kitų elektroninių prietaisų bei prietaisų, kurie turi laiko ir pan.

Taip pat gali būti naudojamas projektai sukurti apšvietimo, drėkinimo sistemų, katalogų ir kt. laikmačius. Programų gali būti daugiausiai ...

Pirkite RTC DS3231

Modulis DS3131 yra pigusir galite rasti kai kuriose specializuotose elektronikos parduotuvėse arba didelėse parduotuvėse, tokiose kaip „eBay“, „AliExpress“, „Amazon“ ir kt. Jei jus domina tai turėti, pateikite keletą rekomendacijų:

DS3231 „Arduino“ integracija

„Arduino IDE“ ekrano kopija

Jei norite integruokite savo DS3231 su „Arduino“ plokšte ir pradėkite kurti „laiko“ projektus, pirmiausia turite užmegzti atitinkamus ryšius. Kad būtų galima jį prijungti, taip paprasta:

  • DS3231 plokštės SLC kaištis turi būti prijungtas prie jūsų A5 Arduino UNO.
  • DS3231 SDA yra prijungtas prie „Arduino“ A4 formato.
  • Vcc iš modulio eis į 5V iš Arduino.
  • Nuo BND iki GND.
Nepamirškite įdiegti bibliotekos, kad galėtumėte naudoti „RTC DS3231“ savo „Arduino IDE“, kitaip kodas neveiks ...

Dabar jūs turite prijungtą sistemą, kitas dalykas yra parašyti eskizo šaltinio kodas jį užprogramuoti. Galite modifikuoti kodus ir pritaikyti juos savo poreikiams, bet galite pradėti paprasčiausiai gaudami datą iš „RTC DS3231“, prijungto prie „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
}

Ir norint naudoti RTC datą suplanuokite kokią nors užduotį, pavyzdžiui, įjungiant ar išjungiant žibintus, automatiniam laistymui ar aliarmo skambėjimui ir kt. Atminkite, kad tvarkydami aukštesnės įtampos prietaisus galite naudoti tranzistorius arba estafetė:

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


Būkite pirmas, kuris pakomentuos

Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.