RTL-00, WS2812 — Глупая гирлянда

Захотелось сделать под новый год что-то эдакое, чтобы было и визуально красиво, и легко управлялось с телефона\ПК без всяких сторонних программ, прошивания МК или других костылей. Для этого вполне подходит WEB-управление по WiFi, ничего дополнительного не нужно, управляется с любого девайса с браузером, правда, первоначальные вложения, так сказать, довольно большие требуются в написании прошивки, WEB-морды (а я в этом вообще профан, ибо никогда не занимался версткой и JavaScript).

Ну, кое-чего получилось таки. В итоге выработалась более-менее работающая концепция проекта и со временем проект буду постепенно развивать. Под катом подробности и ссылки для скачивания первой версии. ;)

Все началось с данного проекта rtl8710_blinkenlights — тут есть довольно хороший драйвер светодиодов WS2812 на основе SPI с DMA. Есть некоторые недоработки (HSV в RGB преобразование упрощено, буфер под значения светодиодов не динамически выделяется, а по максимуму всегда, и еще по мелочи), но память расходуется достаточно экономно (по сравнению с другими виденными мною решениями на том же STM32), и как бонус есть еще простой сервер эффектов с WEB управлением.

Компилировать и тестировать названный выше проект я не стал, а просто взял основы оттуда (драйвер светодиодов), далее же творчески переработал остальное — там для фильтров были применены связанные списки , что круто, но для такой простой вещи довольно неплохо усложняет понимание кода сходу. Также своеобразно была организована работа «фильтров», мог быть активен только один, и общая логика несколько усложнена. Стопицот структур параметров также только мешают пониманию, что и где находится и как вообще работает. Хотя с упрощением я таки косякнул — там везде вычисления HUE (и остального) в фильтрах производились в uint32_t, а потом просто сдвигом приводились к необходимому uint8_t, что давало высокую плавность переходов, а также не было проблем с большим количеством светодиодов, у меня же при тестировании на ~220 светодиодах появляются иногда ступеньки резкие переходов и т.п. Ну это дело поправимое, решим (главное, не повторяйте моих ошибок! ;) )!

Итак, прошивка. Вкратце вышла такая структурная схема работы:

B44-3.PNG

По пунктам:

  • WEB — это переработанный оригинальный пример WEB-сервера от pvvx, в который добавлены дополнительные параметры для управления гирляндой, отключена авторизация и полностью заменены все html\js\css файлы;
  • LedEffectsServer — верхний слой абстракции гирлянды, в котором производится инициализация двух нижних и содержится простой таск по работе фильтров в цикле;
  • LedFilters — здесь уже содержатся все функции фильтров и структуры их параметров;
  • WS2812 — самый нижний слой, являющийся драйвером управления светодиодами WS2812 посредством SPI DMA.

Работа так называемых фильтров у меня построена по следующей иерархии:

B44-1.PNG

Главными являются фильтры цветового тона, которых на данный момент два:

  • Радуга — плавное изменение угла цветового тона (HUE) на заданном промежутке радуги и копирование этих промежутков на всю длину гирлянды;
  • Оттенок — просто выбор одного оттенка на всю гирлянду.

Далее идут фильтры яркости, которые уже модифицируют результат первых только по яркости. Фильтров на данный момент также два:

  • Выцветание — плавное уменьшение и величение яркости на всю длину гирлянды с заданием минимума и максимума яркости, а также скорости процесса;
  • Волна — синусообразное изменение яркости на всей гирлянде с заданием «длины» волны и скорости.

Итоговый результат уже выводится на светодиоды (гирлянду).

WEB-интерфейс же состоит из следующих основных файлов:

B44-2.PNG

Основная страница Index.html содержит кнопки-табы на две ниже стоящие страницы, которые подгружаются в iframe элемент по вызову. Страница Filters.html содержит в себе все доступные настройки фильтров. Страница Settings.html на данный момент содержит в себе только настройки Wi-Fi, в дальнейшем сюда добавятся настройки поведения пользовательской кнопки и светодиодов на самом модуле управления. В файле elements.css содержатся в основном классы внешнего оформления элементов для всех трёх страниц, а в файле elements.js содержатся функции для обработки евентов от элементов на страницах (на самом деле js код можно разделить еще на 2 файла, т. к. почти все функции разделены на 2 группы по страницам, где они используются).

Внешний вид страниц пока получился достаточно лаконичным и вроде бы даже удобным (нажми для увеличения):

Во время работы над html js я почувствовал себя вебером… мне даже в какой то момент понравилось, что у меня много получалось довольно быстро, и я втянулся в процесс, от этого потом стало немного грустно. Я же не вебер…

Прошивку и файлы WEB-морды можно посмотреть и скачать здесь. На данный момент есть еще следующие проблемы, которые будут устранены в дальнейшем (буду вычеркивать по мере устранения):

  1. Упрощенное преобразование HSV -> RGB, которое иногда дает неверный оттенок.
  2. Некорректный расчет HUE в фильтре Радуга, что иногда даёт ступеньку перелива оттенка.
  3. Некорректный расчет яркости в фильтре Волна, что даёт ступеньку яркости.
  4. Не отключаются взаимно конфликтующие фильтры и в итоге работает доминантный из них (к примеру, если включить Радугу и Оттенок — оба работают с цветом, но работает только один из них — Радуга).
  5. Мало интересных фильтров.
  6. Не работает сохранение параметров (да-да, Wi-Fi настройки не сохраняются!) и их загрузка при старте.
  7. Не функционирует кнопка (для сброса параметров по умолчанию).
  8. Не функционируют статусные светодиоды (Ок и Ошибка).
  9. D-дэзигн, еще далек от хорошего…
  10. На опере и хроме кнопка-лампа не загружает своё состояние при загрузке страницы (хотя в Edge все работает), отчего при загрузке страницы показывается, что гирлянда выключена, хотя реально она может находиться во включенном состоянии (с этим вообще идей нет, почему так).
  11. Что-то еще?

Дальше аппаратная часть. Вначале делаем схему… я хочу сделать простейшую плату ЛУТом (чего не делал уже года 3!! К хорошему быстро привыкаешь — заказывать платы с красивой маской, шелкографией и т.д и т.п.), минимально затратив на неё по времени, т.к. на ней толком-то и деталей не должно быть, отлаживал почти все вообще на мартышке, за полчаса спаянной.

Итак, получившаяся схема (нажми для увеличения):

На ней можно отметить следующие функциональные блоки по компонентам:

  • A1 — собственно мозг гирлянды и модуля управления в частности, сам модуль RTL-00 со всей необходимой обвязкой по питанию (C6, C7), прошивке (R1…R3, C1);
  • DA1 — LDO на 3,3В с минимальной обвязкой, более чем хватает любого LDO на ток 150-200 мА в корпусе SOT-23-5 (пробовал как китайский XC6204B332MR-G, так и MIC5205-3.3YM5 — все нормально);
  • DD1 — формирователь уровня 5В из 3,3В для светодиодов на копеечном шинном трансивере SN74AVC1T45;
  • SB1, HL1, HL2 — пользовательские приблуды, можно сделать простой сброс настроек или отображение ошибки\работы.

Перечень элементов (нажми для увеличения, на гите он же в екселе есть):

Описывать больше собственно и нечего… надо разводить плату! А плату же хочется сделать простую в изготовлении, значит односторонюю будем делать! ;)

Итоговый результат разводки (нажми для увеличения):

Вписались в размеры 30 * 30 мм. Аппаратную часть в виде проекта для Altium Designer можно посмотреть и скачать здесь.

Режем плату по-быстрому дремелем… криво, но сойдет. Главное, чтобы работало. :) Печатаем зеркально Top слой для ЛУТа и гладим утюгом:

Такс, уже не плохо пошло, может даже спустя столько лет и получится хороший результат сходу (давным-давно я много плат ЛУТом делал, усилители, того же УМЗЧ ВВ Сухова в различных модификациях… получалось очень даже хорошо).

B44-13.jpg

Ну…. почти. :) Подмажем цапон лаком и травить (тут тоже новшество для меня, раньше все в хлорном железе травил, в этот раз решил опробовать пятно-безопасный раствор из лимонной кислоты и перекиси водорода):

Довольно долго травилось, много пузырьков было, думаю из-за них как раз в паре мест отлетели даже дорожки из тонера и некоторые буквы. Лудим:

Под модуль клеим на плату термоскотч (каптон) для исключения замыканий дорожки под модулем на оголённые участки от маски на пузе модуля:

B44-18

Берем сгенерированный сборочный и паяем по перечню:

B44-27

В итоге после пайки компонентов плата вышла и не такая уж и ужасная, как казалось, подтравы были конечно в пару местах, перемычки кинул, замыканий нет и заработала сразу:

B44-19.jpg

Так-с, плата — это хорошо, но раз есть 3D принтер и SolidWorks, то почему бы и не…

B44-20

Ааааа… (свежесть мема зашкаливает ;) )

B44-21.PNG

Быстренько печатаем и примеряем:

Отлично, все вполне хорошо подошло и даже кнопка нажимается, правда пока не задействована в прошивке. :)

Файлы STL для печати и исходные файлы для SolidWorks 2016 можно посмотреть и скачать здесь.

Небольшое видео о работе этой глупой гирлянды во время тестирования (повесил, куда можно было, лишь бы у рабочего стола рядом :D ):

На этом всё, с наступающим новым годом всех!!

Побольше разработок, воплощения идей и удачи в начинаниях. ;)

 

Реклама

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

Please log in using one of these methods to post your comment:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

w

Connecting to %s