Бесконечное зеркало-часы: элегантный дизайн и точное время
Компоненты
- Модуль реального времени (RTC) DS1302 — 1 шт.
- Arduino Nano R3 — 1 шт.
- Резисторы 10 кОм — 3 шт.
- Лента WS2812B (60 LED) — 1 шт.
- Два зеркала (обычное + полупрозрачное), корпус, кнопки настройки
О проекте
Эффект «бесконечного зеркала» создаётся двумя зеркалами с LED-лентой между ними. Часы показывают время цветными точками на кольце из 60 светодиодов: красный — секунды, зелёный — минуты, синий — часы (в 12-часовом формате). Настройка времени — тремя кнопками (Set, Up, Down). При удержании Set включается демо-режим с анимациями.
Принцип работы
- RTC DS1302 держит точное время (питается от батарейки).
- Arduino Nano управляет лентой через пин 8 (библиотека Adafruit_NeoPixel).
- Каждую секунду обновляется индикация: гаснет старый секундный LED, зажигается новый.
- При смене минуты/часа обновляются соответствующие индикаторы.
- Кнопки: Set — вход в настройку (мигает текущий параметр), Up/Down — изменение, Set — подтверждение и переход к следующему (часы → минуты → выход).
Код (основные фрагменты)
#include
#include
#define PIN 8
#define NUMPIXELS 60
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
const int kCePin = 5, kIoPin = 6, kSclkPin = 7;
DS1302 rtc(kCePin, kIoPin, kSclkPin);
void printTime() {
Time t = rtc.time();
byte h = t.hr; if (h >= 12) h -= 12;
byte m = t.min, s = t.sec;
pixels.setPixelColor(5*h, pixels.Color(25,25,255)); // часы (каждый 5-й LED)
pixels.setPixelColor(m, pixels.Color(0,200,10)); // минуты
pixels.setPixelColor(s, pixels.Color(255,0,0)); // секунды
pixels.show();
// очистка старых позиций при переходе минут/секунд
}
void animacija() {
colorWipe(strip.Color(255,0,0), 25);
colorWipe(strip.Color(0,255,0), 25);
colorWipe(strip.Color(0,0,255), 25);
theaterChase(strip.Color(127,127,127), 50);
theaterChase(strip.Color(127,0,0), 50);
theaterChase(strip.Color(0,0,127), 50);
// очистка
}
void loop() {
// машина состояний kontrol: 0=работa, 1=настройка часов, 2=минут, 3=выход
// опрос кнопок с антидребезгом, установка RTC через yenisaat()
// в режиме 0 — printTime() каждую секунду, Up — демо-анимация
}
Сборка
- Печатаем/изготавливаем корпус (фото в разделе CAD).
- Монтируем зеркала, LED-ленту по периметру, электронику внутри.
- Прошиваем скетч, настраиваем время кнопками.
Схема подключения: RTC — пины 5,6,7; LED-лента — пин 8; кнопки — пины 10,11,12 (pull-up резисторы 10 кОм).
Производственный процесс
- Кукушка: история, мастерство и современная эволюция
- Наука и мастерство современных зеркал: от полированного металла к diéлектрическим покрытиям
- Infinity Gears: 41‑ступенчатый редуктор с периодом вращения 346 квинтиллионов лет
- Arduino POV-часы: сборка дисплея на эффекте сохранения образа
- Генератор тактового сигнала в Verilog: проектирование и реализация
- Слово-часы (Word Clock) на Arduino — DIY-часы с текстовой индикацией времени
- DIY зеркальный гигрометр на Arduino: точное измерение точки росы и влажности
- DIY Калейдоскоп-бесконечное зеркало: потрясающий LED-дисплей
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Итальянские словесные часы на Arduino Nano, NeoPixel, LCD и RTC