Урок 28: Модуль реального времени DS3231

1. Введение

DS3231 — высокоточный модуль реального времени (RTC) с интегрированным кварцевым резонатором и температурной компенсацией (TCXO). Он поддерживает резервное питание от батареи, работает по интерфейсу I2C и обеспечивает точный отсчёт времени даже при отключении питания Arduino. Модуль совместим с системами 3.3В и 5В.

2. Необходимое оборудование

Кол-во

Деталь

1

Плата Arduino UNO

1

Модуль часов реального времени DS3231

1

Перемычки

1

USB-кабель

3. Спецификация

Параметр

Значение

Диапазон температур

-40…+85°C

Точность времени

±5ppm (±0.432 сек/день)

Резервное питание

Да (батарея)

Энергопотребление

Низкое

Календарь

Секунды, минуты, часы, день недели, дата, месяц, год (до 2100)

Выходы

1Гц, 32.768кГц

Интерфейс

I2C (400кГц)

Напряжение питания

3.3В – 5.5В

Датчик температуры

±3°C

Корпус

16-контактный (300 мил)

4. Подключение

  • SDA — A4 Arduino

  • SCL — A5 Arduino

  • VCC — 5V Arduino

  • GND — GND Arduino

5. Пример кода

Перед компиляцией кода установите библиотеку DS3231 (например, RTClib).

ds3231_rtc_module.ino
//////////////////////////////////////////////////////////
//DS3231

#include <Wire.h>
#include "DS3231.h"
DS3231 RTC;
char weekDay[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
DateTime dt(2011, 11, 10, 15, 18, 0, 5);
void setup (){
  Serial.begin(57600);
  Wire.begin();
  RTC.begin();
  RTC.adjust(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);
}
//////////////////////////////////////////////////////////

6. Результат теста

После загрузки кода и подключения модуля, откройте серийный монитор (57600 бод). Вы увидите текущие дату, время и день недели.

7. Частые ошибки

  • Нет данных — проверьте подключение SDA/SCL к A4/A5.

  • Время сбрасывается — батарея разряжена или отсутствует.

  • Некорректная дата/время — проверьте корректность инициализации DateTime.

8. Практические задачи

  • Часы с календарём и будильником.

  • Логирование данных с временной меткой.

  • Автоматизация по расписанию (освещение, полив).

9. Идеи для расширения

  • Синхронизация времени по интернету (NTP).

  • Использование дисплея для вывода времени.

  • Управление устройствами по расписанию.


Подробнее о DS3231: https://randomnerdtutorials.com/arduino-ds3231-real-time-clock/