RTC-модуль DS3231: точное время для Arduino, схемы, библиотеки и проект часов-календаря
Arduino Uno сбрасывает время при выключении. RTC (Real-Time Clock) — отдельный чип с кварцем и батарейкой, который тикает годами. DS3231 — золотой стандарт: точность ±2 ppm (0–40 °C), встроенный термокомпенсированный кварц (TCXO), два будильника, I²C, 3.3/5 В.
Почему DS3231, а не DS1307?
| Параметр | DS3231 | DS1307 |
| Точность | ±2 ppm (±1 мин/год) | ±20–50 ppm (5–25 мин/мес) |
| Кварц | Встроенный TCXO | Внешний 32.768 кГц |
| Темп. датчик | Есть (±3 °C) | Нет |
| Будильники | 2 | 1 |
| I²C скорость | 400 кГц | 100 кГц |
| Питание | 2.3–5.5 В | 4.5–5.5 В |
Распиновка модуля (стандартная плата с батарейкой CR2032)
VCC — 3.3–5 В (питание модуля)
GND — земля
SDA — I²C данные (к A4 Uno / D18 Nano / GPIO21 ESP32)
SCL — I²C такт (к A5 Uno / D19 Nano / GPIO22 ESP32)
SQW — выход прямоугольников (1 Гц, 1 кГц, 4 кГц, 8 кГц) или будильник
32K — 32.768 кГц выход (для внешних схем)
BAT — держатель CR2032 на обратной стороне (входит в комплект)
Подключение к Arduino Uno
DS3231 Arduino Uno
VCC → 5V (или 3.3V)
GND → GND
SDA → A4 (SDA)
SCL → A5 (SCL)
SQW → D2 (опционально, для прерывания 1 Гц)
Pull-up резисторы 4.7 кОм на SDA/SCL — обычно уже есть на модуле. Проверьте мультиметром.
Библиотеки (Arduino IDE → Менеджер библиотек)
- RTClib by Adafruit — основная, поддерживает DS3231, DS1307, PCF8523.
- Wire.h — встроенная (I²C).
- LiquidCrystal_I2C by Frank de Brabander — для LCD 1602/2004 по I²C (адрес 0x27/0x3F).
Проект: Часы-календарь на LCD 1602 I²C
Компоненты
- Arduino Uno / Nano
- DS3231 модуль
- LCD 1602 I²C (адрес 0x27)
- Макетка, провода
Код (полный, с установкой времени через Serial)
#include
#include
#include
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
Wire.begin();
lcd.init(); lcd.backlight();
if (!rtc.begin()) {
lcd.print("RTC not found!");
while (1);
}
if (rtc.lostPower()) {
lcd.print("Set time: send U");
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // или раскомментируйте для автоустановки по компиляции
}
}
void loop() {
DateTime now = rtc.now();
// Вывод на LCD
lcd.setCursor(0, 0);
lcd.print(now.year()); lcd.print('/');
if (now.month() < 10) lcd.print('0');
lcd.print(now.month()); lcd.print('/');
if (now.day() < 10) lcd.print('0');
lcd.print(now.day());
lcd.setCursor(0, 1);
if (now.hour() < 10) lcd.print('0');
lcd.print(now.hour()); lcd.print(':');
if (now.minute() < 10) lcd.print('0');
lcd.print(now.minute()); lcd.print(':');
if (now.second() < 10) lcd.print('0');
lcd.print(now.second());
// Установка времени по команде 'U' в Serial Monitor
if (Serial.available()) {
char c = Serial.read();
if (c == 'U' || c == 'u') {
lcd.clear(); lcd.print("Enter: YYMMDD");
lcd.setCursor(0,1); lcd.print("HHMMSS;");
while (Serial.available() < 12) delay(10);
String s = Serial.readStringUntil(';');
if (s.length() == 12) {
int y = s.substring(0,2).toInt() + 2000;
int mo = s.substring(2,4).toInt();
int d = s.substring(4,6).toInt();
int h = s.substring(6,8).toInt();
int mi = s.substring(8,10).toInt();
int sec = s.substring(10,12).toInt();
rtc.adjust(DateTime(y, mo, d, h, mi, sec));
lcd.clear(); lcd.print("Time SET!");
delay(1000);
}
}
}
delay(1000);
}
Работа с будильниками (Alarm 1, Alarm 2)
// Включение будильника 1 на 07:30 каждый день
DateTime alarmTime(2024, 1, 1, 7, 30, 0); // дата игнорируется при режиме daily
rtc.setAlarm1(alarmTime, DS3231_A1_Hour); // срабатывает при совпадении часов и минут
rtc.enableAlarm(1); // разрешить прерывание на SQW
// На SQW (ножка модуля) появится LOW при срабатывании (open-drain, нужен pull-up 10к)
// Обработка в loop или прерывании:
if (rtc.checkAlarm(1)) { rtc.clearAlarm(1); /* действие */ }
Питание и батарейка CR2032
- Батарейка держит время и настройки при отключении VCC.
- Ток утечки ~0,5–1 мкА → CR2032 (220 мА·ч) хватает на 3–5 лет.
- Если модуль не используется — выньте батарейку, иначе разрядится за год.
- Не паяйте к ножкам батарейки — только держатель!
Типичные проблемы
| Проблема | Решение |
| RTC не найден (rtc.begin() = false) | Проверьте SDA/SCL, питание, pull-up 4.7к, адрес 0x68 (сканер I²C) |
| Время сбрасывается | Села CR2032, плохой контакт держателя, нет VCC при включении |
| Время идёт неточно | Фальшивый чип (часто на дешёвых модулях). Купите у проверенных продавцов. |
| SQW не работает | Нужно включить: rtc.writeSqwPinMode(DS3231_SquareWave1Hz); |
Продвинутые идеи
- Автономные часы: Arduino Pro Mini 3.3В + DS3231 + e-ink дисплей + CR2477 → год от батареи.
- Триггер по будильнику: SQW → прерывание МК → пробуждение из deep sleep → действие (полив, фото, лог).
- Температурный логгер: встроенный датчик DS3231 (±3 °C) + SD-карта / FRAM.
- NTP-синхронизация: ESP32/ESP8266 получает время из интернета → пишет в DS3231 → автономная точность.
Заключение
DS3231 — лучший выбор для точного времени в Arduino-проектах. Подключается 4 проводами, работает от 3.3/5 В, не требует внешнего кварца, даёт будильники и температуру. Библиотека RTClib делает код простым. Для коммерческих устройств — покупайте оригиналы Maxim/Analog Devices или проверенные модули (Waveshare, Adafruit, CJMCU). Вопросы по коду, схеме или выбору модуля — пишите.
-
AMS1117: распиновка, схема подключения и полное руководство для начинающих
AMS1117 — линейный стабилизатор напряжения, часто в SMD (DCY корпус). 3 вывода: регулируемое/фиксированное выходное напряжение. Нагрузка до 1 А.
Статья: применение, конфигурации, характеристики, схемы, аналоги.
Распиновка AMS1117
Три вывода (слева направо): Земля, Выход, Вход.
Вход (Vin) — входное
-
AD9850: DDS-генератор сигналов — подключение к Arduino, код и применение
Что такое AD9850?
Модуль прямого цифрового синтеза (DDS) на чипе AD9850 (Analog Devices). Генерирует синусоиду и прямоугольник до 40 МГц (внутренний такт 125 МГц). Управляется по SPI/параллельно через МК. Малый, дешёвый, идеален для хоббийных генераторов, ВЧ-экспериментов, тактирования.
(Устройство
-
Полное руководство по платформе разработки FRDM-KL25Z Freedom для микроконтроллеров Kinetis
Что такое FRDM-KL25Z?
Freescale FRDM-KL25Z board
FRDM-KL25Z — ультрадешевая платформа разработки от NXP (Freescale) для Kinetis L-серии (Cortex-M0+). Назначение: быстрый старт, прототипирование, демо приложений (управление питанием, освещение, малые счетчики, аудио).
Пример применения: аудиосис
-
Как выбрать лучший материал для ваших проектов СНС-обработки
СНС-обработка (CNC machining) — универсальный, высокоточный традиционный производственный процесс, идеальный для средних и больших серий сложных деталей. СНС-обработка — вычитательный процесс, означающий, что станок постепенно срезает материал из твердого блока для создания готовой детали — а не пос