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

Мини-часы на LED-матрице 32×8 с Arduino Nano и DS3231 — DIY-настольные часы

Компоненты и материалы

Программное обеспечение

О проекте

Проект основан на часах Nick Hall («Nick's LED Projects»), адаптирован под дешёвый и компактный модуль 4-в-1 (32×8) с AliExpress. Часы обладают богатым функционалом:

Мини-часы на LED-матрице 32×8 с Arduino Nano и DS3231 — DIY-настольные часы

Схема проста: Arduino Nano, модуль RTC DS3231 (I2C — A4/A5), матрица MAX7219 (DIN=D12, CLK=D11, CS=D10), две кнопки на D2 и D3 (с подтяжкой). Библиотеки и модифицированный код доступны для скачивания.

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

Мини-часы на LED-матрице 32×8 с Arduino Nano и DS3231 — DIY-настольные часы

Основной скетч (Mini Clock v1.0)

/***********************************************************************
 Mini Clock v1.0, Jul 2014 by Nick Hall
 Adapted for 32x8 MAX7219 module (4 matrices)
 GPL license. Tested on IDE 1.6.5
***********************************************************************/
#include "LedControl.h"
#include 
#include 
#include "RTClib.h"
#include 

// LED Matrix: DIN=12, CLK=11, CS=10, 4 devices
LedControl lc = LedControl(12, 11, 10, 4);

byte intensity = 7;          // Яркость 0-15
byte clock_mode = 0;         // 0=basic, 1=small, 2=slide, 3=word, 4=setup
bool random_mode = 0;
byte old_mode = clock_mode;
bool ampm = 0;               // 0=24h, 1=12h
byte change_mode_time = 0;
unsigned long delaytime = 500;
int rtc[7];                  // [sec, min, hour, dow, date, month, year]
char days[7][4] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
char daysfull[7][9] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
char suffix[4][3] = {"st","nd","rd","th"};

#define NUM_DISPLAY_MODES 3
#define NUM_SETTINGS_MODES 4
#define SLIDE_DELAY 20
#define cls clear_display

RTC_DS1307 ds1307;
Button buttonA = Button(2, BUTTON_PULLUP);
Button buttonB = Button(3, BUTTON_PULLUP);

void setup() {
  digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH);
  Serial.begin(9600);
  for (int addr = 0; addr < 4; addr++) {
    lc.shutdown(addr, false);
    lc.setIntensity(addr, intensity);
    lc.clearDisplay(addr);
  }
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin();
#endif
  ds1307.begin();
  if (!ds1307.isrunning()) {
    Serial.println("RTC not running!");
    ds1307.adjust(DateTime(__DATE__, __TIME__));
  }
  printver();
  digitalWrite(13, HIGH);
}

void loop() {
  switch (clock_mode) {
    case 0: basic_mode(); break;
    case 1: small_mode(); break;
    case 2: slide(); break;
    case 3: word_clock(); break;
    case 4: setup_menu(); break;
  }
}

// --- Вспомогательные функции ---
void plot(byte x, byte y, byte val) { /* установка пикселя на нужной матрице */ }
void clear_display() { for (byte a=0;a<4;a++) lc.clearDisplay(a); }
void fade_down() { /* плавное затухание */ }
void printver() { /* тест LED и приветствие */ }
void puttinychar(byte x, byte y, char c) { /* вывод символа 3x5 */ }
void putnormalchar(byte x, byte y, char c) { /* вывод символа 5x7 */ }

// --- Режимы отображения ---
void small_mode() { /* время мелкими цифрами с секундами */ }
void basic_mode() { /* время большими цифрами 5x7 с мигающим двоеточием */ }
void slide() { /* анимация смены цифр слайдом */ }
void slideanim(byte x, byte y, byte seq, char cur, char nxt) { /* кадр анимации слайда */ }
void word_clock() { /* время словами на английском */ }
void display_date() { /* день недели, число, месяц с центрированием */ }
void switch_mode() { /* меню выбора режима отображения (кнопка A) */ }
byte run_mode() { /* проверка случайного режима смены */ }
void set_next_random() { /* выбор следующего режима и времени смены */ }
void setup_menu() { /* меню настроек: случайный режим, 12/24ч, установка времени, яркость, выход */ }
void set_random() { /* вкл/выкл случайного режима */ }
void set_ampm() { ampm ^= 1; cls(); } // переключение 12/24
void set_intensity() { /* настройка яркости кнопкой B с индикатором */ }
void set_time() { /* установка времени и даты через кнопки */ }
int set_value(byte msg, int val, int reset, int limit) { /* универсальный ввод числа */ }
void get_time() { /* чтение RTC в массив rtc[] */ }

// Полный код с всеми функциями доступен в разделе Code проекта.

Для работы необходимы библиотеки: LedControl, FontLEDClock, RTClib, Button. Скачайте их через менеджер библиотек Arduino IDE или по ссылкам в проекте.

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

  1. Сборка светодиодного секвенсора на таймере 555 и счетчике 4017: деление частоты и устранение дребезга
  2. Кукушка: история, мастерство и современная эволюция
  3. Матрицы в MATLAB: Создание, индексация, удаление строк/столбцов и операции
  4. Arduino Mini Boss Battle Game — ретро-игра в стиле босса
  5. Создание пользовательских LED-часов с будильником — видно с 12 метров
  6. Сборка Берлинских часов на Arduino UNO — LED-матричные часы своими руками
  7. Аналоговые POV-часы на Arduino Nano: персистенция зрения с 17 светодиодами
  8. Интерактивный LED-дисплей в двери с PIR-датчиком — новогоднее приветствие на Arduino
  9. Звукоактивируемый светодиодный дисплей 8 LED на Arduino
  10. Пошаговое руководство: сборка умного четырёхногого робота на Arduino