HSV Clock: Яркие, настраиваемые часы для энтузиастов Arduino
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino UNO | 1 |
| Seeed 2.8" TFT Touch Shield (V1.0) | 1 |
О проекте
HSV Clock
Во время поездки в США я приобрёл Seeed 2.8" TFT Touch Shield (V1.0) в RadioShack. С его помощью я создал красочные часы в подарок отцу на его 80-летие.
Основные моменты:
- Циферблат основан на сетке прямоугольных ячеек. Углы ячеек искажены небольшими случайными величинами, а каждая ячейка разделена случайной диагональю. На ячейки наносится случайный набор цветов, а каждый треугольник затеняется для создания 3D-эффекта. Внутренне цвета представлены в модели HSV (Hue, Saturation & Value), но для вывода на LCD конвертируются в RGB. Время отображается простым шрифтом за счёт окраски определённых ячеек в дополнительные цвета.
- Корпус выполнен из бамбука лазерной резки, спроектирован в Inkscape, вырезан на Ponoko.
- К сожалению, у щита нет отверстий для крепления, поэтому я зажимаю его в корпусе к передней панели. Arduino Uno устанавливается сверху на гнезда щита.
- Для доступа к внешнему RTC (DS3232) по I2C потребовались свободные пины. Щит не выводит их, поэтому использовался Uno с дополнительными пинами SDA/SCL. Я сделал низкопрофильный разъём для этих пинов, который сидит под щитом. Питание и землю взял с аналогичного разъёма на ICSP, также под щитом.
- Добавлена простая поддержка перехода на летнее/зимнее время в скетче (один раз в год меньше часов для перевода!). Вместо логики «последнее воскресенье сентября» используется небольшая таблица с конкретными датами начала и окончания для будущих лет (в моём случае для Новой Зеландии).
- Код библиотеки тачскрина упрощён, чтобы сенсорный экран работал как сетка 4×4 débounced-кнопок. Например, установка времени происходит касанием левого нижнего и правого верхнего углов.
- Приложены значительные усилия для ускорения отрисовки: перерисовка ячеек занимает около четверти секунды. Рендеринг основан на записи горизонтальных строк пикселей определённого цвета. Используется модифицированный алгоритм Брезенхэма для вычисления горизонтальных границ пар линий, образующих треугольники ячейки. Код отправки пикселей на LCD основан на библиотеке, но встроен, развёрнут, упрощён и оптимизирован. Поскольку данные цвета пикселей записываются через несколько PORTx, все значения предварительно вычисляются при выборе цвета, что ускоряет установку N пикселей в строку.
- LCD используется в альбомной ориентации. Долгое время не мог заставить экран обновляться по горизонтальным строкам. Даташит контроллера запутан. Есть команды установки «курсора» (R20h, R21h) и смены ориентации «Entry Mode» (R03h), но смена ориентации на альбомную и позиционирование курсора не работало. Решение (которое, возможно, зарыто в даташите) — использовать команду «окна» вместо команды курсора: «Horizontal and Vertical RAM Address Position» (R50h, R51h, R52h, R53h). Установка координат левого верхнего угла окна заставляет данные пикселей начинаться там и обновляться горизонтально (в альбомном режиме).
Схема подключения
Схема проста:
- TFT-щит установлен на Uno.
- +5В, GND, SDA и SCL идут с помеченных пинов Uno на модуль RTC. Показано на первых трёх фото (щит снят). Обратите внимание: питание/земля берутся с разъёма ICSP1.
Фото проекта приведены ниже.
Производственный процесс
- Казу: от древнего мирлитона к современной пластиковой игрушке — история, производство и будущее
- Арфа: от древних корней к современным шедеврам
- Пенополистирол (EPS): производство, свойства и устойчивость
- Мастерство датчиков Raspberry Pi: практическое руководство по электронике и протоколам связи
- Создание умного робота с Bridge Shield — интеграция Raspberry Pi и Arduino
- Веб-управляемая DMX-система освещения: Arduino Mega как мастер-контроллер
- Понимание резаков нитей: типы, использование и применения
- Понимание карьеров: типы, использование и глобальное распределение
- Понимание мастер-ключей: типы, использование и историческое значение
- Генерация азота на месте: повышение безопасности и надежности лабораторий