Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

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

Инструменты

О проекте

Сначала скачайте библиотеки:

  1. Wire.h (встроена)
  2. RTClib.h (Adafruit)

Схема RTC-модуля

Arduino-часы реального времени на LED-дисплее: Надёжное отображение времени

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

Arduino-часы реального времени на LED-дисплее: Надёжное отображение времени

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

Arduino-часы реального времени на LED-дисплее: Надёжное отображение времени

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

Arduino-часы реального времени на LED-дисплее: Надёжное отображение времени

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

Arduino-часы реального времени на LED-дисплее: Надёжное отображение времени

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

Arduino-часы реального времени на LED-дисплее: Надёжное отображение времени

Если используете общий катод — измените код:

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

Arduino-часы реального времени на LED-дисплее: Надёжное отображение времени

Блок питания

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

Arduino-часы реального времени на LED-дисплее: Надёжное отображение времени

Код (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-часы реального времени на LED-дисплее: Надёжное отображение времени

Производственный процесс

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