Как работают часы реального времени DS3231. Почему DS3231 считается одним из самых точных RTC. Какие преимущества дает использование DS3231 в проектах с Arduino. Как подключить и настроить модуль DS3231 для работы с Arduino.
Что такое часы реального времени DS3231 и зачем они нужны
Часы реального времени (RTC) DS3231 — это высокоточный хронометр, который позволяет Arduino и другим микроконтроллерам точно отслеживать время даже при отключении питания. В отличие от встроенного таймера Arduino, DS3231 продолжает работать от батарейки, сохраняя настройки времени и даты.
Основные характеристики DS3231:
- Точность хода: до ±2 ppm (частей на миллион) или ±0.17 секунд в день
- Встроенный температурно-компенсированный кварцевый генератор
- Автоматическая температурная компенсация
- Работа от батарейки при отключении основного питания
- Интерфейс I2C для подключения к Arduino
- Дополнительный датчик температуры
Для чего используется DS3231 в проектах с Arduino:

- Создание точных часов и календарей
- Регистрация данных с привязкой ко времени
- Управление по расписанию (автоматический полив, кормушки и т.п.)
- Синхронизация нескольких устройств
- Проекты, требующие автономной работы без доступа к интернету
Преимущества DS3231 перед другими часами реального времени
DS3231 считается одним из лучших RTC модулей для Arduino по нескольким причинам:
Высокая точность хода
Благодаря температурно-компенсированному кварцевому генератору, DS3231 обеспечивает точность до ±2 ppm. Это означает отклонение не более 0.17 секунд в день или около 1 минуты в год. Для сравнения, популярный модуль DS1307 имеет точность около ±20 ppm или 1.7 секунд в день.
Стабильность при изменении температуры
Встроенная схема температурной компенсации автоматически корректирует частоту кварцевого резонатора при колебаниях температуры. Это позволяет сохранять высокую точность хода в широком диапазоне температур от -40°C до +85°C.
Дополнительные функции
DS3231 оснащен встроенным датчиком температуры, двумя программируемыми будильниками и выходом прямоугольного сигнала настраиваемой частоты. Это расширяет возможности его применения в различных проектах.

Как подключить модуль DS3231 к Arduino
Подключение DS3231 к Arduino осуществляется по интерфейсу I2C всего 4 проводами:
- VCC — питание 3.3В или 5В
- GND — земля
- SDA — линия данных I2C (аналоговый пин A4 на Arduino Uno)
- SCL — тактовая линия I2C (аналоговый пин A5 на Arduino Uno)
Дополнительно можно подключить батарейку CR2032 для автономной работы часов при отключении основного питания.
Пример схемы подключения:
DS3231 Arduino Uno VCC - 5V GND - GND SDA - A4 SCL - A5
После физического подключения необходимо установить библиотеку для работы с DS3231. Популярные варианты — RTClib от Adafruit или DS3231 от Andrew Wickert.
Программирование DS3231 на Arduino
Работа с модулем DS3231 на Arduino состоит из нескольких основных этапов:
1. Инициализация и настройка
В начале скетча нужно подключить библиотеку и создать объект RTC:
#include <RTClib.h>
RTC_DS3231 rtc;
void setup() {
if (!rtc.begin()) {
Serial.println("Не удалось найти RTC");
while (1);
}
// Установка времени (только при первой загрузке)
// rtc.adjust(DateTime(2023, 9, 12, 12, 0, 0));
}
2. Получение текущего времени
Для считывания текущей даты и времени используется метод now():

void loop() {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
}
3. Использование будильников
DS3231 имеет два программируемых будильника. Вот пример установки и проверки будильника:
// Установка будильника на 8:30
rtc.setAlarm1(DateTime(0, 0, 0, 8, 30, 0), DS3231_A1_Hour);
// Проверка срабатывания будильника
if (rtc.alarmFired(1)) {
Serial.println("Будильник сработал!");
rtc.clearAlarm(1);
}
Точность хода DS3231 и ее проверка
Хотя DS3231 обеспечивает очень высокую точность, реальная погрешность может отличаться от заявленной. На нее влияют такие факторы как:
- Колебания температуры окружающей среды
- Качество изготовления конкретного экземпляра микросхемы
- Точность первоначальной настройки времени
Для проверки точности хода DS3231 можно использовать следующие методы:

Сравнение с эталонным источником времени
Установите точное время на DS3231 по сигналам точного времени. Через несколько недель или месяцев сравните показания с эталоном и вычислите отклонение.
Использование частотомера
DS3231 имеет выход прямоугольного сигнала 1 Гц (1 импульс в секунду). Подключив этот выход к точному частотомеру, можно измерить реальную частоту и оценить погрешность.
Программный мониторинг
Напишите скетч для Arduino, который будет периодически сравнивать время DS3231 с другим точным источником (например, GPS-модулем) и записывать разницу.
Применение DS3231 в проектах умного дома
Часы реального времени DS3231 находят широкое применение в проектах умного дома на базе Arduino. Вот несколько примеров использования:
Умное освещение
DS3231 позволяет создать систему освещения, работающую по расписанию. Например, включение уличных фонарей на закате и выключение на рассвете. Точное время восхода и заката можно рассчитать, зная дату и координаты.
Умный полив растений
Система автоматического полива может использовать DS3231 для включения в заданное время или с определенными интервалами. При этом можно учитывать сезонность, увеличивая частоту полива летом.

Управление климатом
DS3231 может задавать расписание работы систем отопления и кондиционирования. Например, включать обогрев за час до пробуждения и отключать при уходе на работу.
Системы безопасности
Охранная сигнализация может использовать DS3231 для включения в ночное время или в период отпуска. Также можно имитировать присутствие хозяев, включая и выключая свет в разное время.
Сравнение DS3231 с другими модулями RTC
На рынке представлено несколько популярных модулей часов реального времени. Рассмотрим, как DS3231 соотносится с ними:
DS3231 vs DS1307
DS1307 — более простой и дешевый модуль RTC. Его основные отличия от DS3231:
- Меньшая точность: ±20 ppm против ±2 ppm у DS3231
- Отсутствие температурной компенсации
- Нет встроенного датчика температуры
- Более низкое энергопотребление в резервном режиме
DS1307 подойдет для простых проектов, не требующих высокой точности хода.
DS3231 vs PCF8523
PCF8523 — еще один популярный модуль RTC. Его особенности:
- Средняя точность: ±7 ppm
- Очень низкое энергопотребление
- Встроенный датчик падения напряжения
- Два будильника и таймер обратного отсчета
PCF8523 хорошо подходит для проектов с батарейным питанием, где критично энергопотребление.

DS3231 vs RV-3028-C7
RV-3028-C7 — современный высокоточный RTC:
- Сверхнизкое энергопотребление: 40 нА в режиме таймера
- Высокая точность: ±1 ppm
- Встроенный EEPROM на 43 байта
- Расширенные функции будильников и таймеров
RV-3028-C7 превосходит DS3231 по многим параметрам, но стоит значительно дороже.
Советы по повышению точности работы DS3231
Хотя DS3231 обеспечивает высокую точность «из коробки», есть способы еще больше улучшить его характеристики:
Калибровка начального времени
При первоначальной установке времени используйте максимально точный источник. Это может быть сигнал точного времени по радио или GPS-модуль. Даже небольшая ошибка при установке будет накапливаться со временем.
Стабилизация температуры
Несмотря на встроенную температурную компенсацию, резкие колебания температуры могут влиять на точность. Размещайте модуль в месте с минимальными температурными колебаниями, вдали от источников тепла.
Минимизация вибраций
Сильные вибрации могут влиять на работу кварцевого резонатора. Устанавливайте модуль на амортизирующие прокладки, если устройство подвержено тряске.

Качественное питание
Используйте стабильный источник питания для Arduino и DS3231. Колебания напряжения могут влиять на точность хода. При работе от батареи следите за ее состоянием.
Периодическая синхронизация
Даже с высокоточным DS3231 рекомендуется периодически синхронизировать время с эталонным источником. Это можно делать раз в несколько месяцев для компенсации накопленной погрешности.
Применяя эти рекомендации, можно добиться максимальной точности работы DS3231 в ваших проектах на Arduino.
Модуль часов реального времени DS3231 / Arduino и Raspberry Pi
Комментарии закрыты. Перейдите на форум поддержки продуктов в верхней части страницы.
[include-page id=»buy-include-file»]
Что входит в этот продукт?
Модуль часов реального времени DS3231 компании SwitchDoc Labs содержит два устройства, оба
DS3231 Test Jig, подключенные к шине I2C 3,3 В или 5,0 В. Он содержит высокоточные часы реального времени Maxim DS3231 с температурной компенсацией и AT24C32 32 Кбит EEPROM , организованный как 4096 8-битных слов энергонезависимой памяти. Согласно тестам, проведенным в SwitchDoc Labs (см. ниже), DS3231 является явным победителем с измеренной точностью менее 0,3 PPM (частей на миллион) или, другими словами, теряет или выигрывает менее 0,026 секунды в день. .
Программное обеспечение поддерживает обе функции хронометража DS3231, внутренний датчик температуры DS3231 и устройство EEPROM AT24C32.
Адрес I2C 0x68 соответствует DS3231, а 0x56 — AT24C32. Обратите внимание, что на некоторых платах новой ревизии адрес AT24C32 равен 0x57.
Программное обеспечение SwitchDoc Labs на основе Python для продукта Raspberry Pi находится здесь.
Здесь находится программное обеспечение для Arduino.
Вы можете купить модуль SwitchDoc Labs DS3231 в магазине SwitchDoc Labs.
Спецификация DS3231
Спецификация AT24C32
Результаты тестов
Модуль SwitchDoc Labs DS3231/AT24C32Лаборатория SwitchDoc провела несколько месяцев тестов производительности и проверки этого модуля DS3231 и сравнила его с другими часами реального времени. Мы выбрали DS3231 из-за его превосходной точности. Мы измеряем результаты в PPM (частях на миллион). Например, потеря 1 секунды в день — это дрейф в 11,5 PPM, а 1 PPM — дрейф в 0,0864 секунды в день. Погрешность измерения PPM (частей на миллион) показана на графике ниже:
Тест 3,4 миллиона секунд — PPM DS3231 — явный победитель. Зубчатые линии на графике связаны с тем, что мы можем обнаруживать ошибки только в целочисленных секундах, поскольку все три часа реального времени показывают только секунды. Raspberry Pi имеет лучшее разрешение, но мы округлим его, чтобы провести разумное сравнение с данными RTC. Вот сводные данные в виде таблицы:
Таблица результатов ниже:
Устройство | Длина теста (в секундах) | Измеренная часть на миллион | Спецификация PPM |
ДС1307 | 292 869 | 15 частей на миллион | 23 ч/млн |
ДС3231 | 3 432 851 | < 0,3 частей на миллион | 2 части на миллион |
ПКФ8563 | 3 432 851 | 24 стр/мин | 29 частей на миллион |
МСР79400 | 3 432 851 | 4 части на миллион | Не указано напрямую |
Дополнительные результаты для других часов реального времени приведены здесь и в окончательной статье в выпуске 7 и 8 журнала Raspberry Pi Geek Magazine.
Проверка Raspberry Pi
После подключения модуля SwitchDoc Labs DS3231 к Raspberry Pi (3,3 В, GND, SCL, SDA) выполните следующую команду:
pi@MouseAir2 ~/RTCEval/SDL_DS3231 $ sudo i2cdetect - у 1
Результаты должны быть примерно такими. 0x68 — это DS3231, а 0x56 — это AT24C32. Обратите внимание, что на некоторых платах новой ревизии адрес AT24C32 равен 0x57.
0 1 2 3 4 5 6 7 8 9 а б в г д е 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- УУ -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- 56 -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
После загрузки драйверов с github выполните следующую команду:
pi@MouseAir2 ~/RTCEval/SDL_DS3231 $ sudo python testSDL_DS3231.py
pi@MousePydo3SDL $_DSCEval/
Тест SDL_DS3231 Версия 1.0 — SwitchDoc Labs Программа началась:2014-12-21 02:01:23 ------------------ ------------------ Протестируйте EEPROM AT24C32. ------------------ запись первых 10 адресов со случайными данными адрес = 0 записываемое значение = 41 адрес = 1 записываемое значение = 249адрес = 2 запись значение = 198 адрес = 3 запись значение = 238 адрес = 4 запись значение = 190 адрес = 5 запись значение = 101 адрес = 6 запись значение = 171 адрес = 7 запись значение = 62 адрес = 8 запись значение = 255 адрес = 9 запись значение = 169 ------------------ чтение первых 10 адресов адрес = 0 значение = 41 адрес = 1 значение = 249 адрес = 2 значение = 198 адрес = 3 значение = 238 адрес = 4 значение = 190 адрес = 5 значение = 101 адрес = 6 значение = 171 адрес = 7 значение = 62 адрес = 8 значение = 255 адрес = 9значение = 169 ------------------ ------------------ Малина Пи= 21.12.2014 02:01:25 DS3231= 21.12.2014, 02:01:25 DS3231 Температура = 21,75 Малина Пи= 21.12.2014 02:01:35 DS3231= 21.12.2014, 02:01:35 DS3231 Температура = 21,75 Малина Пи= 21.12.2014 02:01:45 DS3231= 21.12.2014, 02:01:45 DS3231 Temp= 21,75
Зачем использовать часы реального времени?
Часы реального времени необходимы для любого проекта, требующего точного учета времени, особенно если у вас не всегда есть подключение к Интернету. Arduino имеет только программные часы для хронометража. Если он выключится, его больше нет. Raspberry Pi, отправленный на воздушном шаре, или Pi, работающий в отдаленном Карибском бассейне, например Project Curacao. Raspberry Pi довольно хорошо показывает время, но только если он подключен к Интернету. Pi использует интернет-сервис под названием NTP для установки часов при включении питания, если Интернет доступен. Затем он вызывает серверы NTP (некоторые из них на самом деле размещены в Национальном институте стандартов и технологий (NIST) и связаны с их атомными часами). Вы не получите точность атомных часов, используя NTP, но это довольно хорошо.
Правильный выбор RTC для вашего проекта
Когда дело доходит до измерения времени на микроконтроллерах, существует множество способов сделать это. Для большинства быстрых и грязных целей, таких как задержки устранения дребезга или другие состояния ожидания, достаточно просто отсчитать несколько циклов основных часов. С точностью до десятков миллисекунд они выполняют обычные коммунальные задачи без лишней суеты.
Однако многие проекты предъявляют гораздо более высокие требования. Когда вы создаете часы, регистратор данных или что-то еще, что основано на стабильном ощущении течения времени в течение более чем нескольких минут, вам понадобятся часы реального времени. Так называемые из-за их характера работы с в реальном времени, , как мы, люди, склонны понимать это, эти устройства берут на себя обязательство предоставлять услуги хронометража с высокой степенью точности. Мы составили руководство по часто используемым деталям и возможностям их применения, чтобы вы всегда могли делать все правильно с первого раза.
Ключевые требования
RTC, который вы выбираете для данного проекта, зависит от множества факторов. Проекты с батарейным питанием выиграют от низкого энергопотребления, в то время как устройствам для научных измерений может потребоваться максимальная точность с течением времени. Интерфейсы также важны, так как реализация RTC в уже существующей конструкции может потребовать выбора деталей из-за наличия I2C или SPI. Бюджет обычно не является проблемой для домашнего экспериментатора в этом пространстве, поскольку детали дешевы, однако производственный цикл в тысячах позволит значительно сэкономить количество за счет более дешевой детали. Как всегда, четкое представление о требованиях к проекту является ключом к выбору правильного компонента для работы.
Мне просто нужно знать который час!
Рекомендуемая деталь: DS1307
DS-1307 часто является выбором по умолчанию для RTC. Однако, если вам нужны расширенные функции, такие как сигналы тревоги или выходы прямоугольных импульсов, лучше искать более дорогие модели.
DS1307 носит гордое звание де-факто RTC для тех, кто экспериментирует с микроконтроллерами. Работая от 5 В, с потреблением тока 500 нА при резервном питании от батареи, это базовое решение для проекта, в котором необходимо отслеживать время. В отличие от более продвинутых решений, DS1307 использует внешний кварцевый резонатор 32,768 кГц для хронометража. Согласно техническому описанию, это означает, что на точность хронометража в некоторой степени влияет реализация конструкции из-за различных емкостей и шума. По этой причине Maxim не предоставляет запрещённого значения точности, но для средней сборки тактовой частоты или базового регистратора данных DS1307 справится с задачей. Модули DS1307 легко доступны, и часто это самое дешевое решение RTC, доступное в большинстве торговых точек.
Мне нужно что-то точное, с сигнализацией!
Рекомендуемая деталь: DS3231 (I2C), DS3234 (SPI)
DS3234 отличается тем, что использует интерфейс SPI вместо I2C.
Для тех, кому нужна точность, на которую они могут положиться, RTC со встроенным генератором является ключевым. Эти устройства гарантируют заводскую точность, так как при установке кристалла невозможна ошибка пользователя. Такие детали, как DS3231 и DS3234, соответствуют этим требованиям, поскольку их кварцевый генератор с температурной компенсацией (TCXO) может похвастаться точностью до ±2 ppm при температурах от 0°C до +40°C. Это происходит в ущерб току в режиме ожидания, обычно 1500 нА, что означает, что резервные батареи работают не так долго.
Эти более современные детали способны работать при напряжении от 2,3 до 5,5 В, что упрощает их использование с различными микроконтроллерами. Они также имеют прямоугольные и тревожные выходы. Их можно использовать для генерации тактов для другого оборудования или для пробуждения микроконтроллеров из спящего режима с помощью вывода GPIO, установленного в качестве прерывания. RTC обычно используются таким образом, чтобы проекты с батарейным питанием могли максимально использовать свои батареи, удерживая основной микроконтроллер в спящем режиме с низким энергопотреблением и просыпаясь только при необходимости. На борту также есть бонусный датчик температуры, который можно считывать, что может пригодиться в некоторых проектах.
Эти модули продаются с такими терминами, как DeadOn, из-за их точности. Однако дополнительные функции и более сложное оборудование стоят дороже.
Мне нужен RTC, который едва потребляет энергию, и все остальное!
Рекомендуемая деталь: RV-1805, RV-3028
RV-1805 потребляет так мало энергии, что этот модуль Sparkfun вообще может обходиться без резервной батареи. Вместо этого суперкап сохраняет время до 35 дней без внешнего питания. Когда дело доходит до заряда аккумулятора, важен каждый последний заряд сока. Для проектов, развернутых в полевых условиях, это еще более важно, поскольку часто нецелесообразно регулярно менять батареи или гарантировать постоянную подачу энергии из альтернативных источников, таких как солнце или ветер.
Для таких применений подойдет RV-1805 и его более новая замена RV-3028. В комплекте с сигнализацией и другими высокотехнологичными функциями их устройство для вечеринок потребляет абсолютно ничтожно малое количество электроэнергии. В специальном режиме, в котором используется маломощный RC-генератор с кварцем в качестве резервной калибровки, RV-1805 потребляет всего 22 нА в режиме измерения времени. Это достаточно мало, так как модуль Sparkfun указывает только суперкап, который способен поддерживать установленное время в течение полных 35 дней, в то время как другие RTC вместо этого должны полагаться на батареи. RV-3028 увеличивает этот показатель до 100 нА, а Pimoroni заявляет о потенциальном времени работы 9лет на включенной батарее. Точность этих деталей также на высшем уровне (±2 ppm RV-1805, ±1 ppm RV-3028), что делает их идеальными для точной регистрации данных в удаленных средах.
Особое упоминание: модули Raspberry Pi
RTC Pi — дешевое и простое решение для синхронизации Pi вдали от Интернета.
Raspberry Pi, как и многие компьютеры 1980-х годов, не имеет часов реального времени. Это устраняет необходимость в батарее, но также может вызвать хаос при ведении системного журнала и других обязанностях, особенно в несетевых средах. К счастью, многие из перечисленных выше устройств RTC доступны в виде специальных модулей, разработанных для конкретного форм-фактора Raspberry Pi. Они доступны во всех видах, от скромного DS1307 до острого как бритва DS3231.
Для их установки требуется немного усилий. Подавляющее большинство взаимодействует через I2C, что может стать головной болью для проектов, уже использующих интерфейс для других целей. Также необходимо установить утилиту для связи с RTC и использовать ее для правильного обновления системного времени, где это необходимо.
Заключение
Независимо от того, пытаетесь ли вы сделать симпатичные часы для своей гостиной или вести точные журналы отладки для сложной системы, точное хронометраж имеет ключевое значение.