DS3231: real-time klok en kalender vir u Arduino

DS3231

In sommige projekte is dit nodig om bewys te lewer van die tyd, die uur of die datum. As gevolg van die behoefte om sekere funksies op grond van tyd uit te voer, 'n kalender van gebeure of registrasie te onderhou, om die tyd in 'n stelsel te hou, of bloot 'n digitale klok te skep met Arduino. Met die DS3231 jy kan dit kry, nog een van die komponente wat ons by die lys voeg.

Die DS3231 is die module waarna u gesoek het, en hier sal u alles vind wat u benodig vir die beheer daarvan, en ek sal u ook 'n voorbeeld toon van hoe integreer dit met Arduino met 'n praktiese voorbeeld ...

Wat is die DS3231?

DS3231

In die eerste plek moet u weet wat 'n RTC (intydse klok), of real-time klok. Hierdie skyfies kom baie gereeld voor in baie toepassings, en u rekenaar het een daarvan op u moederbord, en dit word ook aangedryf deur 'n CR2032 battery ook. Dit is die een wat die tyd en die konfigurasie in die BIOS / UEFI handhaaf en waaruit die bedryfstelsel dit neem wanneer dit op tyd begin (hoewel die sinchronisasie met bedieners nou met die internet vir groter presisie gebruik kan word, maar dit is 'n ander storie ...).

Wat die RTC doen, is om tydmetings te kry, so eenvoudig. Die verskil van ander soorte elektroniese horlosies is dat hulle eenvoudig meet die tyd, en dit doen deur klokseinpulse te tel, met die frekwensie en periodes daarvan. Behalwe vir die tyd, kan 'n RTC u ook boekhou van dae, weke, maande en jare. Dit wil sê die volledige datum ...

Om dit moontlik te maak, moet die RTC vergesel word van a Xtal of kwarts kristal wat as 'n resonator sal optree, die een wat die frekwensie verskaf. Verder het u elektroniese stroombane nodig om die datum in die geheue te kan tel en stoor. Die stroombane moet sekondes, minute, ure, dae, weke, maande en jare kan tel.

wat geheue is wisselvalligDaarom het dit die battery nodig om konstant krag te hê. As u nie 'n battery het nie, of dit leeg is, sal dit uitgevee word. Dit is wat met rekenaars gebeur as die battery leeg is, dit gee 'n verkeerde tyd. As u dit instel terwyl die rekenaar aan is, sal die tyd behou word, aangesien die RTC aangeskakel word, maar dit is gedurende die prosesse waartydens dit uit is wanneer die battery benodig word ...

Vir DIY-projekte gebruik vervaardigers gewoonlik twee gewone RTC-skyfies, dit is die DS1307 en DS3231. Albei is gemaak deur Maxim (voorheen Dallas Semiconductor), en die DS3231 is die akkurater van die twee, aangesien dit nie so beïnvloed word deur temperatuurvariasies soos die vorige nie. Dit wissel dus nie soveel afhangende van die temperatuur nie, en dit hou die tyd presieser.

Soms, met merkbare temperatuurverskille, kan die DS1307 net so 1 of 2 minute per dag vertraag. Iets wat onaanvaarbaar is vir sommige toepassings.

Die DS3231 is nie dat dit nie deur variasies beïnvloed word nie, maar dat dit ingeboude temperatuurmetings- en vergoedingstelsels het om 'n akkuraatheid van 2 ppm te verseker, wat gelykstaande is aan 'n tydsverloop ongeveer 172ms per dag, dit wil sê hoogstens 'n bietjie meer as 1 sekonde per week. En in die praktyk wissel dit gewoonlik slegs 1 of 2 sekondes per maand.

Wat die manier betref kommunikeer met die RTC DS3131 om die datumwaardes te kry wat dit kry, word gedoen deur I2C bus. En vir krag kan u 2.3 ​​tot 5.5 v gebruik vir die DS3231, wat ietwat laer is as die 4.5 tot 5.5 v vir die DS1307, sodat dit meer energie-doeltreffend kan wees en die battery langer laat hou.

U moet ook weet dat hierdie modules gewoonlik 'n EEPROM addisionele AT24C32 om 'n paar rekords en vorige afmetings op te slaan, wat baie prakties is.

aansoeke

Wat die toepassings betref, het ek al 'n paar genoem, soos om 'n horlosie met Arduino te implementeer, om 'n stelsel te skep wat gebaseer is op Die tyd Hoe dit ook al sy, om tyd te hou aan toerusting soos rekenaars en baie ander elektroniese toestelle en toestelle wat tyd het, ens.

Kan ook gebruik word in projekte om timers te skep vir beligting, besproeiingstelsels, datalogger, ens. Die toepassings kan die meeste ...

Koop 'n RTC DS3231

Die module DS3131 is goedkoop, en u kan dit vind in sommige gespesialiseerde elektronika-winkels of in groot winkels soos eBay, AliExpress, Amazon, ens. Hier is 'n paar aanbevelings as u belangstel om een ​​te hê:

DS3231 Arduino-integrasie

Kiekie van Arduino IDE

As jy wil integreer u DS3231 met u Arduino-bord en begin om 'tydige' projekte te skep, moet u eers die toepaslike verbindings maak. Om dit te kan verbind, is dit so eenvoudig soos:

  • Die SLC-pen van die DS3231-kaart moet op die A5 van u gekoppel wees Arduino UNO.
  • SDA van die DS3231 is gekoppel aan A4 van Arduino.
  • Vcc vanaf die module gaan na 5V vanaf Arduino.
  • GND tot GND.
Onthou om die biblioteek te installeer om die RTC DS3231 in u Arduino IDE te gebruik, anders werk die kode nie ...

Nou het u die stelsel verbind, die volgende ding is om die skets bronkode om dit te programmeer. U kan die kodes wysig en aanpas volgens u behoeftes, maar u kan begin deur die datum van 'n RTC DS3231 aan Arduino te kry:

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

En om die RTC-datum te gebruik om beplan 'n taak, soos om ligte aan of uit te skakel, vir outomatiese watermaak, of om alarm te laat hoor, ens. Onthou dat u transistors of om hoërspanningstoestelle te hanteer aflos:

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


Die inhoud van die artikel voldoen aan ons beginsels van redaksionele etiek. Klik op om 'n fout te rapporteer hier.

Wees die eerste om te kommentaar lewer

Laat u kommentaar

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde gemerk met *

*

*

  1. Verantwoordelik vir die data: Miguel Ángel Gatón
  2. Doel van die data: Beheer SPAM, bestuur van kommentaar.
  3. Wettiging: U toestemming
  4. Kommunikasie van die data: Die data sal nie aan derde partye oorgedra word nie, behalwe deur wettige verpligtinge.
  5. Datastoor: databasis aangebied deur Occentus Networks (EU)
  6. Regte: U kan u inligting te alle tye beperk, herstel en verwyder.