Часы реального времени DS3231 с Arduino: настройка даты и времени энкодером

Модуль DS3231 — один из самых точных и популярных часов реального времени для Arduino. В этом проекте своими руками мы соберём часы с настройкой даты и времени с помощью одного поворотного энкодера KY-040, выведем на LCD 1602 с I2C русские названия дней недели и месяцев, добавим выбор 12/24-часового формата и автоматический расчёт дня недели. Проект идеален для умного дома, метеостанций и любых устройств, где нужна точная временная метка.

DS3231 с энкодером и LCD 1602 — настройка времени Arduino

Возможности проекта

  • Полная настройка даты и времени одним энкодером (без кнопок)
  • Выбор 12- или 24-часового формата долгим нажатием на энкодер
  • Русские названия дней недели и месяцев на LCD
  • Автоматический расчёт дня недели при смене даты/года
  • Отображение температуры с датчика DS3231
  • Сохранение настроек при отключении питания

Необходимые компоненты

  • Arduino Uno / Nano / Pro Mini
  • Модуль часов реального времени DS3231 (ZS-042)
  • LCD 1602 с модулем I2C
  • Поворотный энкодер KY-040 (или обычный с подтягивающими резисторами)
  • Провода, макетная плата

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

Оба модуля (DS3231 и LCD I2C) подключаются к одной шине I2C:

  • VCC → 5V
  • GND → GND
  • SDA → A4
  • SCL → A5

Энкодер KY-040:

  • CLK → D2
  • DT → D3
  • SW → D4 (кнопка)
  • + → 5V
  • GND → GND

Как пользоваться часами

  • Короткое нажатие на энкодер — выбор параметра (курсор снизу)
  • Вращение — изменение значения
  • Долгое нажатие (2 сек) — переключение 12/24 ч (AM / 24H)
  • Если не трогать 2 секунды — выход из редактирования
  • Точка в правом верхнем углу — режим редактирования

Устанавливаемые библиотеки

  • RTClib (от Adafruit)
  • LiquidCrystal_I2C
  • LCD_1602_RUS_ALL — для русских символов (скачать по ссылке в описании видео)
  • Encoder

Готовый скетч Arduino

#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
#include <LCD_1602_RUS_ALL.h>
#include <Encoder.h>

RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27,16,2);
Encoder myEnc(2, 3);

boolean mode12 = false;  // false = 24ч, true = 12ч
// полный код в описании видео и на сайте

Заключение

Проект получился максимально удобным: всего один энкодер вместо шести кнопок, русские буквы, автоматический день недели и точность хода DS3231 лучше кварцевых часов. Такой модуль можно сразу встраивать в умный дом, будильники, термостаты и системы полива — везде, где нужна надёжная работа без подстройки времени.

FAQ — Часы DS3231 с энкодером

Чем DS3231 лучше DS1307?

DS3231 имеет встроенный TCXO-генератор и датчик температуры, погрешность менее 2 минут в год, DS1307 — до 20 минут в месяц.

Можно ли использовать обычный энкодер без модуля KY-040?

Да, просто припаяйте два подтягивающих резистора 10 кОм от CLK и DT к +5V.

Где взять русские буквы на LCD 1602?

Библиотека LCD_1602_RUS_ALL — ссылка в описании видео и на сайте.

Сохраняется ли время при отключении питания?

Да, DS3231 имеет батарейку CR2032 и хранит время годами.

📁 Скачать примеры