DS3231: часы и календарь реального времени для Arduino

DS3231

В некоторых проектах необходимо иметь подтверждение времени, часа или даты. Либо из-за необходимости выполнять определенные функции, основанные на времени, для ведения календаря событий или регистрации, для сохранения времени в системе, либо просто для создания цифровых часов. с Ардуино, с DS3231 вы можете получить это, еще один из Компоненты что мы добавляем в список.

DS3231 - это модуль, который вы искали, и здесь вы найдете все необходимое для его управления, а также я покажу вам пример того, как интегрировать его с Arduino на практическом примере ...

Что такое DS3231?

DS3231

Прежде всего, вы должны знать, что такое RTC (часы реального времени), или часы реального времени. Эти микросхемы очень часто встречаются во множестве приложений, на самом деле, на вашем ПК есть один из них на материнской плате, и он также питается от CR2032 аккумулятор также. Это тот, который поддерживает время и конфигурацию в BIOS / UEFI и из которого операционная система берет его при загрузке, чтобы быть вовремя (хотя теперь, с Интернетом, синхронизация с серверами может использоваться для большей точности, но это это отдельная история…).

Что делает RTC, так это просто измеряет время. Отличие от других типов электронных часов в том, что они просто измерить время, и он делает это путем подсчета импульсов тактового сигнала, зная его частоту и периоды. Помимо времени, RTC также позволяет вести учет дней, недель, месяцев и лет. То есть полная дата ...

Для того, чтобы это было возможно, RTC должен сопровождаться Xtal или кварцевый кристалл который будет действовать как резонатор, тот, который обеспечивает частоту. Кроме того, вам нужна электронная схема, способная считать и сохранять дату в памяти. Схема должна быть способна считать секунды, минуты, часы, дни, недели, месяцы и годы.

что память непостояннаВот почему ему нужна батарея, чтобы иметь постоянное питание. Если у вас нет батареи или она разрядится, она сотрется ... Вот что происходит с ПК, когда батарея разряжается, они показывают неверное время. Если вы настроите его, когда ПК включен, время будет сохранено, поскольку RTC получает питание, но это во время процессов, во время которых он выключен, когда эта батарея необходима ...

Для проектов DIY производители обычно используют два обычных чипа RTC, которые являются DS1307 и DS3231. Оба изготовлены Maxim (ранее Dallas Semiconductor), и DS3231 является более точным из двух, поскольку он не так подвержен колебаниям температуры, как первый. Поэтому он не так сильно колеблется в зависимости от температуры, а точнее держит время.

Иногда, при заметных перепадах температур, DS1307 может отставать от 1 до 2 минут в день. Что-то невыносимое для некоторых приложений.

DS3231 не в том, что он не подвержен изменениям, а в том, что он имеет встроенные системы измерения температуры и компенсации для обеспечения точности 2 ppm, что было бы эквивалентно отставание во времени около 172 мс в день, то есть не более 1 секунды в неделю максимум. И на практике они обычно меняются всего 1-2 секунды в месяц.

Что касается пути общаться с RTC DS3131, чтобы получить значения даты, которые он получает, это делается Шина I2C. А для питания вы можете использовать от 2.3 до 5.5 В для DS3231, что несколько ниже, чем от 4.5 до 5.5 В для DS1307, поэтому он может быть более энергоэффективным и продлить срок службы батареи.

Также вы должны знать, что эти модули обычно имеют EEPROM дополнительный AT24C32 для хранения некоторых записей и предыдущих измерений, что весьма практично.

приложений

Что касается приложений, я уже упомянул некоторые из них, например, реализовать часы с Arduino, чтобы создать систему, которая действует на основе Время Как бы то ни было, чтобы сэкономить время на оборудовании, таком как ПК и многих других электронных устройствах и приборах, у которых есть время и т. Д.

Может также использоваться в проекты для создания таймеров для освещения, систем полива, регистратора данных и т. д. Приложения могут быть самыми многочисленными ...

Купить RTC DS3231

Модуль DS3131 дешевый, и вы можете найти его в некоторых специализированных магазинах электроники или в крупных магазинах, таких как eBay, AliExpress, Amazon и т. д. Если вы заинтересованы в таком, вот несколько рекомендаций:

Интеграция DS3231 с Arduino

Скриншот Arduino IDE

Если вы хотите, интегрируйте свой DS3231 с платой Arduino и начать создавать «рассчитанные по времени» проекты, вы должны сначала установить соответствующие связи. Подключить его достаточно просто:

  • Вывод SLC платы DS3231 должен быть подключен к A5 вашего Arduino UNO.
  • SDA DS3231 подключен к A4 Arduino.
  • Vcc от модуля перейдет на 5V от Arduino.
  • GND к GND.
Не забудьте установить библиотеку, чтобы использовать RTC DS3231 в вашей Arduino IDE, иначе код не будет работать ...

Теперь, когда вы подключили систему, нужно написать исходный код эскиза запрограммировать это. Вы можете изменить коды и адаптировать их к своим потребностям, но вы можете начать с простого получения даты от RTC DS3231, подключенного к 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
}

И чтобы использовать дату RTC для запланировать какую-то задачу, например, для включения или выключения света, для автоматического полива или для срабатывания будильника и т. д. Помните, что для работы с устройствами с более высоким напряжением вы можете использовать транзисторы или реле:

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


Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Будьте первым, чтобы комментировать

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.