Неопиксельные часы с анимацией

Опубликовано От Sergey

Основной элемент этих часов светодиодное неопиксельное кольцо (WS2812). Кольцо состоит из адресуемых, красного, зеленого и синего, (RGB) светодиодов. Яркость каждого цвета можно регулировать независимо, обеспечивая до 16,8 миллионов цветов. Микропроцессор в этих часах необходим, чтобы получить время из Интернета и дать команду, какие светодиоды и каким цветом должны загореться.

Инструменты и материалы:
-Светодиодное кольцо WS2812 60 пикселей;
-ESP8266 Wemos D1;
-Резистор 470 Ом;
-Электролитический конденсатор 1000 мкФ;
-Винты M3 x 12 — 2 шт;
-Гайки M3 — 2 шт;
-Многожильный кабель;
-Суперклей;
-Разъем питания;
-Саморезы;
-Блок питания 5В 3А;

Шаг первый: проект
Физический корпус настольных часов основан на размерах неопиксельного кольца. Мастер хотел, чтобы дизайн был минималистичным и имел сглаженные линии дизайна, чтобы вещь не только показывала время, но и была привлекательна на вид.

Для работы у часов не должно быть кнопок или переключателей. Синхронизация времени будет проходить по сети.
Для питания часов используется сетевой адаптер питания. Мастер подсчитал, что для каждого светодиода потребуется 15 мА, а на каждом неопикселе три светодиода. Для всего кольца может потребоваться максимальный ток 45 мА x 60 = 2,7 А.

Корпус был разработан с помощью программы FreeCAD и состоит из двух ключевых компонентов. Держатель кольца — это защитный кожух для неопикселей, который открывает только переднюю лицевую поверхность неопикселей, скрывая соединения проводов сзади. В основании находится микропроцессор и разъем питания. Эти элементы будут соединятся с помощью суперклея, а доступ к электронике будет через панель в основании устройства.

Для этого проекта был выбран микропроцессор ESP8226. Он достаточно быстрый, имеет встроенную антенну и может связываться с сетью по беспроводной сети. Эти устройства дешевы, и их легко программировать с помощью платформы Arduino IDE.

Шаг второй: сетевой протокол времени
Ключевой задачей микропроцессора является подключение к Интернету и получение времени UTC с сервера с использованием протокола сетевого времени (NTP). Образец клиента NTP включен в IDE Arduino. Принцип его работы заключается в получении IP-адреса случайного сервера времени из списка доступных. Это значит, что мы всегда сможем синхронизировать время, даже если один из серверов времени отключится.

Затем микропроцессор отправляет пакет данных на сервер времени, который запрашивает время и ожидает возврата 48-байтового пакета данных. После получения пакет разбивается на байты для восстановления метки времени. Преобразуется в число и представляет количество секунд с 1 января 1900 года.

Например, вот типичные 48 байтов, возвращаемых в пакете данных: 28 1 13 227 0 0 0 16 0 0 0 32 78 73 83 84 227 40119 255 0 0 0 0 0 0 0 0 0 0 0 0 227 40 120 43 108 18 197 18 32 27 40 120 43 108 18 234 100
Отметка времени хранится в четырех байтах, начиная с байта 40 (выделено синим шрифтом). Затем они преобразуются в двоичное число b11100011 00101000 01111000 00101011 = 3811080235. Время Unix начинается 1 января 1970 года, но сделанные вычисления относятся к 1 января 1900 года, поэтому нужно убрать секунды, рассчитанные на 70 лет (2208988800 ).
время с 1 января 1900 г. (3811080235) — 1 января 1970 г.(2208988800) = время с 1 января 1970 г.(1602091435)
Когда мы вычисляем 1602091435 секунд с 1 января 1970 года, это число преобразуется в 17:23:55 7 октября 2020 года. В реальном времени весь процесс выполнения запроса, отправки пакета данных и выполнения вычислений занимает несколько миллисекунд.

Шаг третий: стрелки часов
Каждая «стрелка» часов представлена неопикселем своего цвета: красный — часы, синий — минуты, зеленый — секунды. Если посмотреть на традиционные часы, легко понять, как движутся минутная и секундная стрелки, перескакивая на следующую цифру. Часовая стрелка движется медленно и равномерно, в том числе между цифрами. Эту функция мастер тоже реализовал, чтобы стрелка медленно вращалась вокруг кольца.
Каждые 15 минут на часах запускается различный набор светового шоу с более длинным набором эффектов в полдень и полночь. Компания Adafruit разработала несколько отличных анимированных световых эффектов, и они доступны бесплатно, если установлена их библиотека neopixel (Examples → Adafruit Neopixel → strandtest). К ним мастер добавил эквивалент «звонка» в конце светового шоу, которое отображается как белый светодиодный индикатор, заполняющий четверть часа.

Шаг четвертый: британское летнее время
Так как мастер проживает в Великобритании, он вводит корректировку для летнего и зимнего времени. Такая корректировка должна быть «зашита» в код, поскольку у микроконтроллера нет внутренних часов, как, например, на Рассбери.
Подробно этот шаг мы разбирать не будем, поскольку обзор самоделки производится для русскоязычной аудитории, где перевод часов не актуален. Желающие могут ознакомится с этим шагом на сайте-источнике, в конце статьи.

Шаг пятый: неопиксельное кольцо
Первое, что нужно сделать при сборке часов — это собрать кольцо. Обычно продавец поставляет его в виде 4 сегментов.
Сборку необходимо аккуратно разобрать, а неровные края можно отпилить алмазным напильником. Эти четыре сегмента должны точно образовывать круг.



Чтобы закрепить кольцо, был напечатан временный шаблон. Сегменты закрепляются на нем с помощью скотча.

Дальше припаиваются все соединения кроме одного. Это точка, в которой данные подаются на кольцо, и она будет расположена в позиции 6 часов.

Нужно подготовить три провода. Они припаиваются под прямым углом к кольцу. Красный — для питания +5 В (Vcc), черный — для земли, а зеленый — для последовательного ввода данных. На линии данных нужно припаять резистор 470 Ом.


Шаг шестой: печать корпуса
Дальше нужно напечатать детали корпуса. Файлы для печати можно скачать ниже.
Base.stl
neopixel support ring.stl
Base Cover.stl
neopixel soldering jig.stl

Шаг седьмой: сборка
Дальше мастер приступает к сборке часов.
В ESP8266 нужно просверлить два отверстия, чтобы его можно было прикрепить к основному корпусу.
Провода, прикрепленные к кольцу, можно пропустить через отверстие в передней части основания. Корпус кольца теперь можно приклеить к корпусу и временно зафиксировать скотчем.

Подключается все согласно схемы.

Устройство сможет потреблять достаточно энергии и через USB-соединение, но рекомендуется использовать адаптер питания 5 В.
Дальше нужно загрузить код, который можно скачать ниже.

ESP8266_Desktop_Equinox_Clock_Instructables.ino
После того, как код загружен, и устройство проверено, можно приклеить светодиодное кольцо внутри держателя и установить крышку.

Все готово.

Хотя светодиоды имеют форму кольца, на самом деле они представляют собой просто последовательность светодиодов. Кольцо полностью электрически не связано, поэтому у него есть начало и конец. Первоначально мастер решил поместить начало последовательности светодиодов в верхней части круга, представляя 12 часов, так как это упростило программирование. Со временем светодиоды загораются по часовой стрелке. Проблема заключалась в том, что он поставил перед собой цель физического дизайна — быть минималистичным, чтобы создать изящную вещь. Для правильной работы нужно было протянуть провода к верхней точки, а если подключать нижнюю, время «переворачивалось». Тогда мастер программно сдвинул рассчитанные положения часов, минут и секунд на 180 градусов.

Дальше он решил запрограммировать самодиагностику, типа, как на ПК. Различные последовательности звуковых сигналов указывают на конкретные проблемы с ПК. Он не проектировал зуммер в свои часы, но встроил несколько простых визуальных эффектов в процедуру запуска. Когда устройство включено, отображается полный красный круг, чтобы показать, что все светодиоды работают. Затем оно пытается подключиться к Интернету, и после подключения загорается зеленым светом. Следующим этапом является получение метки времени с сервера времени. Пока он ожидает этих данных, он отображает янтарный свет. При сильном сигнале Wi-Fi эти процессы происходят почти мгновенно, поэтому при включении часы становятся красными.

Источник (Source)

Источник: https://usamodelkina.ru/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *