Модуль часов с автономным питанием DS-3231

Описание

Модуль часов реального времени с независимым питанием. Контроллеры Arduino/Genuino не имеют встроенных часов реального времени. Для работы со временем есть функция millis(). Однако, для проектов где требуется время и дата, возможностей данной функции недостаточно и на помощь приходят часы реального времени.

Модуль DS3231 - это недорогие, точные, с работой по протоколу I2C часы реального времени, с температурной компенсацией TCXO. Устройство содержит разъём для батареи типа CR2032 и поддерживает точный отсчет времени когда питание устройства прерывается. Часы поддерживают информацию о секундах, минутах, часах, дне, месяце и годе. Дата на конец месяца автоматически корректируется, для месяцев, содержащих менее чем 31 день, включая коррекцию по високосному году. Работают в одном из режимов: 24- или 12-часовом формате (с AM/PM индикатором). Имеют два программируемых будильника.

Основные характеристики часов:

  • Часы реального времени с подсчетом секунд, минут, часов, дня, месяца и года (с корректировкой дат в т.ч. по високосному году до 2100 года)
  • Погрешность хода: ±2 минуты в год
  • Температурный датчик с погрешностью ±3°С
  • Два будильника

Технические характеристики

  • Рабочая температура: -40°С - +85°С
  • Напряжение питания: 2,3 - 5,5 В
  • Напряжение питания батареи: 2,3 - 5,5 В
  • Максимальное потребление тока: 650 нА

Физические размеры

  • Модуль (Д х Ш х В): 45 х 23 х 15 мм

Плюсы использования

  • Высокая точность хода часов
  • Имеется два будильника с функцией прерывания
  • Широкий диапазон рабочей температуры

Минусы использования

  • Дороже некоторых аналогов

Библиотека для работы с модулем

Примеры подключения и использования

Пример 1: В примере иллюстрируется подключение модуля часов к контроллеру, установка времени и даты на часах, вывод времени, даты и дня недели в монитор Serial-порта, а также получение температуры с текущего модуля. (Примеры тестировались на контроллере Smart UNO)

Схема подключения:

Скетч для загрузки:

//Подключение библиотек
#include <Wire.h>
#include "DS3231.h"

DS3231 RTC; //Создание объекта DS3231

char weekDay[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; //Создание массива дней недели

//Создание переменной типа DateTime для задания даты в формате:
//год, месяц, день, час, минута, секунда и день недели (от 0 - воскресенье до 6 - суббота)
DateTime dt(2016, 8, 22, 16, 10, 0, 1);


void setup () 
{
    Serial.begin(9600); //инициализация Serial-порта
    Wire.begin(); //инициализация библиотеки Wire
    RTC.begin(); //инициализация часов
    RTC.adjust(dt); //Задание даты-времени так как она задана в переменной dt 
}

void loop () 
{
    DateTime now = RTC.now(); //получение текущей даты и времени
    
    //вывод полученного года
    Serial.print(now.year(), DEC);
    Serial.print('/');

    //вывод месяца
    Serial.print(now.month(), DEC);
    Serial.print('/');

    //дня
    Serial.print(now.date(), DEC);
    Serial.print(' ');

    //часа
    Serial.print(now.hour(), DEC);
    Serial.print(':');

    //минут
    Serial.print(now.minute(), DEC);
    Serial.print(':');

    //секунд
    Serial.print(now.second(), DEC);
    Serial.println();

    //дня недели
    Serial.print(weekDay[now.dayOfWeek()]);
    Serial.println();
   
    delay(1000); //задержка на 1 сек

    RTC.convertTemperature();             //конвертация текущей температуры в регистрах
    Serial.print(RTC.getTemperature()); //чтение регистров и вывод полученной температуры
    Serial.println(" C");
    
    delay(1000); //задержка на 1 сек
    
}