DS3231: годинник і календар реального часу для вашого Arduino

DS3231

У деяких проектах необхідно мати підтвердження часу, години або дати. Або через необхідність виконувати певні функції з урахуванням часу, вести календар подій або реєстрації, зберігати час у системі або просто створювати цифровий годинник з Arduino. З DS3231 Ви можете отримати його, ще один із Компоненти що ми додаємо до списку.

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

Що таке DS3231?

DS3231

Перш за все, ви повинні знати, що таке RTC (годинник реального часу), або годинник реального часу. Ці мікросхеми дуже часто зустрічаються в багатьох додатках, насправді, ваш ПК має один із них на вашій материнській платі, і він також працює від CR2032 акумулятор також. Це той, який підтримує час і конфігурацію в BIOS / UEFI і з якого операційна система бере його під час завантаження, щоб бути вчасно (хоча зараз, з Інтернетом, синхронізація з серверами може використовуватися для більшої точності, але це це вже інша історія ...).

Що RTC робить, це отримати прості вимірювання часу. Відмінність від інших типів електронних годинників полягає в тому, що вони просто виміряти часі робить це шляхом підрахунку імпульсів тактового сигналу, знаючи його частоту та періоди. На додаток до часу, RTC також дозволяє вести облік днів, тижнів, місяців та років. Тобто повна дата ...

Щоб це було можливо, RTC повинен супроводжуватися символом Xtal або кварцовий кристал який буде діяти як резонатор, той, що забезпечує частоту. Крім того, вам потрібні електронні схеми, здатні рахувати та зберігати дату в пам'яті. Схема повинна мати можливість рахувати секунди, хвилини, години, дні, тижні, місяці та роки.

Еса пам'ять мінливаОсь чому йому потрібна батарея, щоб мати постійну потужність. Якщо у вас немає батареї або вона розрядиться, вона буде стерта ... Ось що відбувається з ПК, коли батарея розряджається, вони дають неправильний час. Якщо ви налаштуєте його, коли ПК увімкнено, час буде зберігатися, оскільки RTC живиться, але це відбувається під час процесів, під час яких він вимикається, коли потрібна ця батарея ...

Для саморобних проектів виробники зазвичай використовують два загальні чіпи 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 від модуля перейде на 5 В від Arduino.
  • GND в GND.
Не забудьте встановити бібліотеку для використання RTC DS3231 у вашій IDE Arduino, інакше код не буде працювати ...

Тепер у вас підключена система, наступне - написати ескіз вихідного коду запрограмувати його. Ви можете модифікувати коди та адаптувати їх до своїх потреб, але ви можете почати, просто отримавши дату з 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. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

Тест з англійської мовиТест каталонськаіспанська вікторина