DS3231: reaaliaikainen kello ja kalenteri Arduinollesi

DS3231

Joissakin projekteissa on oltava todisteet kellosta, tunnista tai päivämäärästä. Joko johtuen tarpeesta suorittaa tiettyjä toimintoja ajallisesti, ylläpitää tapahtumakalenteria tai rekisteröintiä, pitää aika järjestelmässä tai yksinkertaisesti luoda digitaalinen kello Arduinon kanssa. kanssa DS3231 saat sen, toinen komponentit jonka lisäämme luetteloon.

DS3231 on etsimäsi moduuli, josta löydät kaiken mitä tarvitset sen ohjaamiseen ja näytän sinulle myös esimerkin siitä, kuinka integroi se Arduinoon käytännön esimerkillä ...

Mikä on DS3231?

DS3231

Ensinnäkin, sinun pitäisi tietää, mitä a RTC (reaaliaikainen kello)tai reaaliaikainen kello. Nämä sirut ovat hyvin yleisiä monissa sovelluksissa, itse asiassa tietokoneellasi on yksi niistä emolevylläsi, ja se toimii myös CR2032-akku myös. Se ylläpitää aikaa ja kokoonpanoa BIOS / UEFI: ssä ja mistä käyttöjärjestelmä ottaa sen käynnistettäessä ajoissa (vaikka nyt, Internetin kanssa, synkronointia palvelimien kanssa voidaan käyttää tarkentamiseen, mutta tämä on toinen tarina ...).

Se, mitä RTC tekee, on ajanmittausten saaminen, niin yksinkertaista. Ero muun tyyppisiin elektronisiin kelloihin on se, että ne yksinkertaisesti mittaa aika, ja se tekee niin laskemalla kellosignaalin pulssit tietäen sen taajuuden ja jaksot. Ajan lisäksi RTC: llä voit myös pitää kirjaa päivistä, viikoista, kuukausista ja vuosista. Eli koko päivämäärä ...

Jotta tämä olisi mahdollista, RTC: n mukana on oltava a Xtal- tai kvartsikide joka toimii resonaattorina, joka antaa taajuuden. Lisäksi tarvitset elektronisia piirejä, jotka pystyvät laskemaan ja tallentamaan päivämäärän muistiin. Piirin on voitava laskea sekunteja, minuutteja, tunteja, päiviä, viikkoja, kuukausia ja vuosia.

että muisti on epävakaataSiksi se tarvitsee akkua jatkuvan virran saamiseksi. Jos sinulla ei ole akkua tai se loppuu, se poistetaan ... Näin tapahtuu tietokoneille, kun akku loppuu, ne antavat väärän ajan. Jos määrität sen tietokoneen ollessa päällä, aika pidetään, koska RTC: tä käynnistetään, mutta se tapahtuu prosessien aikana, jolloin se on pois päältä, kun akkua tarvitaan ...

DIY-projekteissa valmistajat käyttävät yleensä kahta yleistä RTC-sirua, jotka ovat DS1307 ja DS3231. Molemmat valmistaa Maxim (aiemmin Dallas Semiconductor), ja DS3231 on tarkempi näistä kahdesta, koska lämpötilan vaihtelut eivät vaikuta siihen yhtä paljon kuin edellinen. Siksi se ei vaihtele niin paljon lämpötilasta riippuen, ja se pitää ajan tarkemmin.

Joskus havaittavissa lämpötilaeroissa DS1307 voi olla jopa 1 tai 2 minuuttia päivässä. Jotain sietämätöntä joissakin sovelluksissa.

DS3231 ei ole, että vaihtelut eivät vaikuta siihen, vaan siinä on sisäänrakennetut lämpötilan mittaus- ja kompensointijärjestelmät 2ppm tarkkuuden varmistamiseksi, mikä vastaisi viive noin 172 ms päivässä, eli korkeintaan yli 1 sekunti viikossa. Ja käytännössä ne vaihtelevat yleensä vain 1 tai 2 sekuntia kuukaudessa.

Mitä tulee tapaan kommunikoida RTC: n kanssa DS3131: n saamiseksi päivämääräarvot tekee se I2C-väylä. Virtalähteenä voit käyttää 2.3 - 5.5 V DS3231: lle, joka on hieman pienempi kuin 4.5 - 5.5 V DS1307: lle, joten se voi olla energiatehokkaampi ja saada akun pidempään.

Sinun tulisi myös tietää, että näillä moduuleilla on yleensä EEPROM lisäksi AT24C32 tallentaa joitain tietoja ja aiempia mittauksia, mikä on melko käytännöllistä.

sovellukset

Sovellusten osalta olen jo maininnut joitain, kuten kellon toteuttaminen Arduinon kanssa, järjestelmän luomiseksi, joka toimii Aika Mikä tahansa, pitää aikaa laitteilla, kuten tietokoneilla ja monilla muilla elektronisilla laitteilla ja laitteilla, joilla on aikaa jne.

Voidaan käyttää myös hankkeet luoda ajastimia valaistukseen, kastelujärjestelmiin, tietokantaan jne. Sovellukset voivat olla lukuisimpia ...

Osta RTC DS3231

Moduuli DS3131 on halpa, ja löydät sen joistakin erikoistuneista elektroniikkaliikkeistä tai suurista myymälöistä, kuten eBay, AliExpress, Amazon jne. Jos olet kiinnostunut sellaisen hankkimisesta, tässä on joitain suosituksia:

DS3231 Arduino -integraatio

Näyttökuva Arduino IDE: stä

Jos haluat integroi DS3231 Arduino-korttiisi ja aloita "ajastettujen" projektien luominen, sinun on ensin luotava asianmukaiset yhteydet. Se voidaan yhdistää niin yksinkertaisesti kuin:

  • DS3231-kortin SLC-nastan on oltava kytkettynä tietokoneesi A5: een Arduino UNO.
  • DS3231: n SDA on kytketty Arduinon A4-kokoonpanoon.
  • Moduulin Vcc siirtyy 5 V: n Arduinolta.
  • GND - GND.
Muista asentaa kirjasto, jotta voit käyttää RTC DS3231: tä Arduino IDE: ssäsi, tai koodi ei toimi ...

Nyt sinulla on järjestelmä kytketty, seuraava asia on kirjoittaa luonnos lähdekoodi ohjelmoida se. Voit muokata koodeja ja mukauttaa niitä tarpeidesi mukaan, mutta voit aloittaa yksinkertaisesti saamalla päivämäärän Arduinoon liitetystä 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 jotta voidaan käyttää RTC-päivämäärää ajoita jokin tehtävä, kuten valojen sytyttämiseen tai sammuttamiseen, automaattiseen kasteluun tai hälytyksen soimiseksi jne. Muista, että suurjännitelaitteiden käsittelemiseksi voit käyttää transistoreita tai rele:

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


Ole ensimmäinen kommentti

Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.