Arduino-часы реального времени на LED-дисплее: Надёжное отображение времени
Компоненты и материалы
| Arduino UNO | 1 |
| Модуль RTC (DS1307 / DS3231) | 1 |
| Резистор 1 кОм | 15 |
| Резистор 120 Ом | 15 |
| Стабилизатор 7805 (5В) | 1 |
| Конденсатор 22 пФ | 1 |
| Кварц 16 МГц | 1 |
| Конденсатор 10 мкФ | 1 |
| Батарея CR2032 + держатель | 1 |
| LED 5 мм зелёный | 190 |
| Транзистор NPN (RF) | 10 |
| Транзистор PNP (универсальный) | 12 |
| Тактильные кнопки | 4 |
| Блок питания 12В 5А (60Вт) | 1 |
Инструменты
- Паяльник
- Пятно для пайки (свинец-свободное)
- Мультиметр
О проекте
Сначала скачайте библиотеки:
Wire.h(встроена)RTClib.h(Adafruit)
Схема RTC-модуля

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

Подключение RTC (I2C)

Кнопки управления

Определение анода/катода LED

Схема дисплея (Общий анод)

Если используете общий катод — измените код:
В функции lightNumber() поменяйте SEGMENT_ON на LOW, SEGMENT_OFF на HIGH, и инвертируйте логику включения разрядов (DIGIT_ON/DIGIT_OFF).

Блок питания
На базе 7805 с конденсаторами сглаживания. См. фото сборки.

Код (Arduino)
Скетч для 6-разрядного 7-сегментного индикатора (часы:минуты:секунды) с динамической индикацией, переключением 12/24ч, установкой времени кнопками и мигающей точкой (1 Гц от SQW DS1307).
/* 4-разрядный 7-сегментный дисплей: SparkFun 9483
Модификация niq_ro, код BMIAK Basnayaka */
#include
#include "RTClib.h"
RTC_DS1307 RTC;
// Пины сегментов
int segA = 0, segB = 1, segC = 2, segD = 4, segE = 7, segF = 8, segG = 12, segDP = 13;
// Пины разрядов (6 цифр)
int digit1 = 11, digit2 = 10, digit3 = 9, digit4 = 6, digit5 = 5, digit6 = 3;
// Кнопки установки
byte SW0 = A0, SW1 = A2, SW2 = A1, SWT = A3;
int Adhr=0, Admnt=0, D=0, Z=0;
void setup() {
Wire.begin(); RTC.begin();
// Включаем SQW 1Гц на пине 7 RTC
Wire.beginTransmission(0x68);
Wire.write(0x07); Wire.write(0x10); Wire.endTransmission();
// Настройка пинов
for(int p: {segA,segB,segC,segD,segE,segF,segG,segDP,
digit1,digit2,digit3,digit4,digit5,digit6})
pinMode(p, OUTPUT);
pinMode(SW0, INPUT_PULLUP);
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2, INPUT_PULLUP);
pinMode(SWT, INPUT_PULLUP);
digitalWrite(segDP, LOW);
}
void loop() {
DateTime now = RTC.now();
long HR = now.hour()*1000;
long timp = HR*10 + now.minute()*100 + now.second();
Adhr = now.hour(); Admnt = now.minute();
// Переключение 12/24ч кнопкой SWT
if (digitalRead(SWT)==0) { delay(300); D = !D; }
if (D == 0 && timp >= 130000) { timp -= 120000; digitalWrite(segDP, HIGH); }
if (timp < 130000) digitalWrite(segDP, LOW);
// Динамическая индикация (3 цикла для 6 разрядов)
for(int i=100; i>0; i--) timp>=100000 ? displayNumber01(timp) : displayNumber02(timp);
for(int i=100; i>0; i--) timp>=100000 ? displayNumber03(timp) : displayNumber04(timp);
for(int i=100; i>0; i--) timp>=100000 ? displayNumber05(timp) : displayNumber06(timp);
// Установка времени удержанием SW0
if (digitalRead(SW0)==0) { delay(100); Z=1; set_time(); }
}
void set_time() {
byte hours=Adhr, minutes=Admnt;
// ... (логика установки часов/минут кнопками SW1/SW2, запись в RTC)
// Полный код в исходнике
}
// Функции displayNumber01..06 — по одной на разряд (динамическая индикация)
void displayNumber01(long toDisplay) { /* ... */ }
void displayNumber02(long toDisplay) { /* ... */ }
// ... до displayNumber06
void lightNumber(int n) {
// Таблица сегментов для общего анода (SEGMENT_ON=HIGH)
// n=0..9, 10=гасить
}
Полный код с функциями установки времени и динамической индикацией доступен для скачивания.
Схемы

Производственный процесс
- Arduino POV-часы: сборка дисплея на эффекте сохранения образа
- Слово-часы (Word Clock) на Arduino — DIY-часы с текстовой индикацией времени
- Создание осциллографа на Arduino Nano с дисплеем Nokia 5110 (20 кГц): простое DIY-руководство
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Умные шторы: автоматическое управление светом на Arduino с солнечной энергией
- Итальянские словесные часы на Arduino Nano, NeoPixel, LCD и RTC
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Пошаговое руководство: сборка умного четырёхногого робота на Arduino
- Точные 7-сегментные часы на Arduino Pro Mini и DS1302 RTC
- Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25