DS3231: Echtzeituhr und Kalender für Ihr Arduino

DS3231

In einigen Projekten ist es erforderlich, die Uhrzeit, die Stunde oder das Datum nachzuweisen. Entweder aufgrund der Notwendigkeit, bestimmte Funktionen basierend auf der Zeit auszuführen, einen Veranstaltungskalender oder eine Registrierung zu führen, die Zeit in einem System zu halten oder einfach eine Digitaluhr zu erstellen mit Arduino. Mit der DS3231 Sie können es bekommen, ein anderer der Komponenten dass wir der Liste hinzufügen.

Der DS3231 ist das Modul, nach dem Sie gesucht haben. Hier finden Sie alles, was Sie für die Steuerung benötigen, und ich zeige Ihnen auch ein Beispiel dafür Integriere es mit Arduino mit einem praktischen Beispiel ...

Was ist der DS3231?

DS3231

Zunächst sollten Sie wissen, was a RTC (Echtzeituhr)oder Echtzeituhr. Diese Chips kommen in einer Vielzahl von Anwendungen sehr häufig vor. Ihr PC verfügt sogar über einen dieser Chips auf Ihrem Motherboard und wird auch von einem mit Strom versorgt CR2032 Batterie ebenfalls. Es ist dasjenige, das die Zeit und die Konfiguration im BIOS / UEFI verwaltet und von dem das Betriebssystem es beim Booten verwendet, um pünktlich zu sein (obwohl jetzt mit dem Internet die Synchronisation mit Servern für eine höhere Präzision verwendet werden kann, aber dies ist eine andere Geschichte…).

So einfach erhält die RTC Zeitmessungen. Der Unterschied zu anderen Arten von elektronischen Uhren besteht darin, dass sie einfach sind Messen Sie die ZeitDies geschieht durch Zählen der Taktsignalimpulse unter Kenntnis seiner Frequenz und Perioden. Zusätzlich zur Zeit können Sie mit einer RTC auch Tage, Wochen, Monate und Jahre abrechnen. Das heißt, das volle Datum ...

Damit dies möglich ist, muss die RTC von einem begleitet werden Xtal oder Quarzkristall welches als Resonator wirkt, der die Frequenz liefert. Darüber hinaus benötigen Sie elektronische Schaltkreise, mit denen das Datum gezählt und in einem Speicher gespeichert werden kann. Die Schaltung muss in der Lage sein, Sekunden, Minuten, Stunden, Tage, Wochen, Monate und Jahre zu zählen.

dass Speicher ist flüchtigDeshalb braucht es die Batterie, um eine konstante Leistung zu haben. Wenn Sie keinen Akku haben oder dieser leer ist, wird er gelöscht. Dies passiert bei PCs, wenn der Akku leer ist. Sie geben eine falsche Zeit an. Wenn Sie es konfigurieren, während der PC eingeschaltet ist, bleibt die Zeit erhalten, da die RTC mit Strom versorgt wird, aber während der Prozesse, in denen sie ausgeschaltet ist, wenn diese Batterie benötigt wird ...

Für DIY-Projekte verwenden Hersteller normalerweise zwei gängige RTC-Chips, nämlich die DS1307 und DS3231. Beide werden von Maxim (ehemals Dallas Semiconductor) hergestellt, und der DS3231 ist der genauere von beiden, da er nicht so stark von Temperaturschwankungen betroffen ist wie der erstere. Daher schwankt es je nach Temperatur nicht so stark und hält die Zeit genauer.

Mit merklichen Temperaturunterschieden kann der DS1307 manchmal bis zu 1 oder 2 Minuten pro Tag verzögert sein. Für manche Anwendungen etwas Unerträgliches.

Der DS3231 ist nicht davon betroffen, dass er von Schwankungen unberührt bleibt, sondern verfügt über integrierte Temperaturmess- und Kompensationssysteme, um eine Genauigkeit von 2 ppm zu gewährleisten, was a entspricht Zeitverzögerung von ungefähr 172 ms pro Tag, dh höchstens etwas mehr als 1 Sekunde pro Woche. In der Praxis variieren sie normalerweise nur 1 oder 2 Sekunden pro Monat.

Wie für den Weg mit der RTC kommunizieren DS3131, um die Datumswerte zu erhalten, die es erhält, wird von durchgeführt I2C-Bus. Für die Stromversorgung können Sie 2.3 bis 5.5 V für den DS3231 verwenden, was etwas niedriger ist als die 4.5 bis 5.5 V für den DS1307, sodass er energieeffizienter ist und die Lebensdauer des Akkus verlängert.

Außerdem sollten Sie wissen, dass diese Module normalerweise eine haben EEPROM zusätzlicher AT24C32 einige Aufzeichnungen und frühere Messungen zu speichern, was sehr praktisch ist.

Anwendungen

In Bezug auf die Anwendungen habe ich bereits einige erwähnt, beispielsweise die Implementierung einer Uhr mit Arduino, um ein System zu erstellen, das darauf basiert Die Zeit Wie auch immer, um die Zeit auf Geräten wie PCs und vielen anderen elektronischen Geräten und Geräten, die Zeit haben, usw. zu halten.

Kann auch in verwendet werden Projekte Timer für Beleuchtung, Bewässerungssysteme, Datenlogger usw. zu erstellen. Die Anwendungen können die zahlreichsten sein ...

Kaufen Sie eine RTC DS3231

Das Modul DS3131 ist billigund Sie können es in einigen spezialisierten Elektronikgeschäften oder in großen Geschäften wie eBay, AliExpress, Amazon usw. finden. Wenn Sie an einer interessiert sind, finden Sie hier einige Empfehlungen:

DS3231 Arduino-Integration

Screenshot der Arduino IDE

Wenn Sie eine Integrieren Sie Ihren DS3231 in Ihr Arduino-Board Wenn Sie mit der Erstellung "zeitgesteuerter" Projekte beginnen möchten, müssen Sie zuerst die entsprechenden Verbindungen herstellen. Um es verbinden zu können, ist es so einfach wie:

  • Der SLC-Pin der DS3231-Karte muss mit dem A5 Ihres verbunden sein Arduino UNO.
  • Der SDA des DS3231 ist mit dem A4 von Arduino verbunden.
  • Vcc vom Modul geht von Arduino auf 5V.
  • GND zu GND.
Denken Sie daran, die Bibliothek zu installieren, um die RTC DS3231 in Ihrer Arduino IDE zu verwenden, da sonst der Code nicht funktioniert ...

Nachdem Sie das System angeschlossen haben, müssen Sie als Nächstes das schreiben Quellcode skizzieren um es zu programmieren. Sie können die Codes ändern und an Ihre Bedürfnisse anpassen. Sie können jedoch zunächst einfach das Datum von einer mit Arduino verbundenen RTC DS3231 abrufen:

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

Und um das RTC-Datum zu verwenden Planen Sie eine AufgabeB. zum Ein- und Ausschalten von Lichtern, zum automatischen Bewässern oder zum Ertönen eines Alarms usw. Denken Sie daran, dass Sie für Geräte mit höherer Spannung Transistoren oder verwenden können Relais:

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


Schreiben Sie den ersten Kommentar

Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.