====== Модуль часов с автономным питанием 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 мм

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

==== Минусы использования ====
  * Дороже некоторых аналогов

==== Библиотека для работы с модулем ====
  * [[http://files.smartelements.ru/know_libs/ds3231.zip|Скачать (ds3231)]]

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

^ Что нужно                                                                                                               ^ Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                            |  1           |
| [[http://smartelements.ru/collection/moduli/product/modul-chasov-ds3231|Модуль часов DS-3231]]                      |  1           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]]  |  4           |

**Схема подключения:**
{{ :главная:модули:ds3231.jpg |}}

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

<file Arduino>
//Подключение библиотек
#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 сек
    
}

</file>