- Контроллер ws2812 своими руками
- Задача
- Оборудование
- Назначение контроллера
- Интерфейс
- Состояние системы
- Эффекты
- Чистые цвета
- Сценарии
- Цветные часы
- Световой будильник
- Настройки
- Сетевой командный интерфейс
- Заключение
- Контроллер для светодиодов WS2812
- Протокол WS2812B на STM32 без пустых циклов и прерываний. И как сделать правильную радугу
- LED-контроллер для WS2812
Контроллер ws2812 своими руками
Задача
Создание универсального Wi-Fi контроллера цветовой подсветки, динамических эффектов и световых сценариев для управления лентами на «умных» светодиодах WS2812B. Управление контроллером по беспроводной Wi-Fi сети со смартфона или планшета из веб-интерфейса, а также автоматическое управление световыми эффектами другими контроллерами посредством посылки ими сетевых команд.
Оборудование
Этот проект представляет собой продвинутую и модернизированную версию более раннего проекта «Wi-Fi LED контроллер» и использует практически то же самое аппаратное обеспечение. Обо всех подробностях и используемом оборудовании можно прочитать на странице первого проекта.
Назначение контроллера
«WS2812B Wi-Fi контроллер» можно применять как для чисто декоративной подсветки интерьера (потолков, плинтусов, ниш, панно, лестниц и т. п.), так и в качестве универсального устройства индикации и световой сигнализации в составе современного умного дома.
Этот проект разработан для интеграции в систему «Умной дачи» в качестве системы цветовой подсветки строений и прочих нужд светового оформления поместья.
Интерфейс
Интерфейс и внутренне устройство системы значительно переработаны и добавлено много новых функций и возможностей.
Состояние системы
В этом разделе крупным шрифтом выводится текущий действующий эффект, в данном случае это сценарий «Световой будильник». Перед названием эффекта выводится его номер, который используется в сетевых управляющих командах для автоматического переключения эффектов.
Эффекты
Раздел управления системой в котором можно выбрать любой из десятков красивых эффектов для светодиодной ленты «NeoPixel». Системой также поддерживаются групповые эффекты, когда несколько одиночных эффектов автоматически переключаются в заданной последовательности.
Чистые цвета
Чистые цвета — это свечение ленты каким-либо одним цветом: красным, синим, жёлтым, зелёным и т. п. Сюда же входит свечение ленты белым цветом с различной интенсивностью: 100%, 50%, 25%, 10% и т. д. «Чистые цвета» применяются для декоративной подсветки и для индикации различных событий в умном доме.
Например, в нормальном состоянии какой-либо предмет интерьера может подсвечивается синим или зелёным цветом, а при возникновении тревожной ситуации подсветка становится красной. Для стороннего наблюдателя изменение цвета подсветки выглядит просто как цветовой эффект, а для хозяина дома несёт ещё и дополнительную информацию.
Сценарии
«Сценарии» это мощный инструмент управления световыми эффектами. Контроллер может выполнять сложные действия по изменению световых эффектов в соответствии с заранее определённым сценарием или в зависимости от событий внешнего мира.
В текущей версии «WS2812B Wi-Fi контроллера» реализовано два световых сценария — «Цветные часы» и «Световой будильник». Это скорее демонстрация возможностей, в будущем к этим сценариям могут быть добавлены и другие. Немного подробнее о реализованных сценариях.
Цветные часы
«Цветные часы» это сценарий который переключает цвет свечения ленты каждый час. Например, 12 часов — красный, 13 часов — оранжевый и т. д. При постоянном использовании этого сценария цвета запоминаются и по цвету свечения ленты можно определить который сейчас час.
Световой будильник
«Световой будильник» это реализация модного «природного» будильника, который в заданное время медленно повышает яркость свечения ленты, имитируя естественный восход солнца.
В веб-интерфейсе можно задать время срабатывания «Светового будильника».
Настройки
В систему добавлен механизм отслеживания астрономического времени восхода и захода солнца (тёмного и светлого времени суток). Это используется для автоматического включения ленты вечером и выключения её утром с восходом солнца.
Эту функцию можно отключить и тогда лента будет работать круглосуточно, не выключаясь автоматически в светлое время суток.
Сетевой командный интерфейс
Всё, о чём говорилось ранее, относилось к управлению контроллером вручную посредством веб-интерфейса. Кроме этого система поддерживает управление при помощи сетевых команд. Этот метод предназначен для работы контроллера в составе умного дома.
При помощи сетевого интерфейса контроллеры умного дома могут управлять включением и выключением световых эффектов и сценариев, посылать команды для включения тревожной цветовой сигнализации и т. п.
Формат управляющих сетевых команд очень простой:
Заключение
«WS2812B Wi-Fi контроллер» представляет собой отличное решение по визуальному оформлению современного умного дома и, при желании, его функционал может быть значительно улучшен и дополнен новыми функциями, световыми эффектами и сценариями.
Источник
Контроллер для светодиодов WS2812
WS2812 — это RGB светодиод в корпусе 5050 со встроенным ШИМ-контроллером. Принцип работы такого светодиода прост: на вход Din поступает 24 бита информации о состоянии уровня цвета каждого светодиода в корпусе, после чего последующая информация передается через выход Dout на следующий светодиод.
Как результат, такие светодиоды можно последовательно объединять в ленты, длина которых ограничивается только источником питания и доступной памятью микроконтроллера.
Согласно спецификации, электрические параметры светодиода следующие:
Цвет | Длинна волны (нм) | Интенсивность (мКд) | Ток (мА) | Напряжение (В) |
---|---|---|---|---|
Красный | 620 — 630 | 550 — 700 | 20 | 1,8 — 2,2 |
Зеленый | 515 — 530 | 1100 — 1400 | 20 | 3 — 3,2 |
Синий | 465 — 475 | 200 — 400 | 20 | 3,2 — 3,4 |
Протокол общения со светодиодом достаточно прост: передача логического «0» и логической «1» происходит посредством изменения длительности положительного импульса так, как показано на рисунке.
Типичная схема включения светодиодов выглядит следующим образом:
Предлагаемый контроллер реализуется согласно следующей принципиальной схеме.
Печатная плата, которая реализует изображенную выше принципиальную схему, имеет следующий вид.
Плату необходимо изготовить на листе одностороннего фольгированного стеклотекстолита размером 26 х 38 мм. Типичная ширина дорожек равна 0,6 мм, максимальная 0,8 мм.
Компоненты размещаются в соответствии с принципиальной схемой так, как показано на рисунке ниже.
Объемный рендеринг печатной платы выглядит следующим образом:
Немного о компонентах
Разъем J1 — это micro USB, контактные площадки под него можно переделать в соответствии с разъемом, который будет иметься в наличии. Диод D1 необходим для защиты платы от переполюсовки в случае подключения питания напрямую, не через USB. Этот же диод ограничивает максимальный ток нагрузки. Светодиод D2 используется для индикации состояния контроллера в некоторых режимах роботы. Конденсаторы С1 — С3 ставить не обязательно (т.к. на светодиодных лентах с W S2812 обычно устанавливаются конденсаторы рядом с каждым светодиодом) , но желательно.
Контроллер имеет три режима работы:
- Режим выбора количества светодиодов.
- Режим регулирования яркости каждого канала на всех светодиодах одновременно.
- Режим эффектов.
- S3 и S2 в первом режиме добавляет (+) и уменьшает (-) количество светодиодов соответственно, а во втором режиме увеличивает и уменьшает яркость выбранного канала.
- S1 во втором режиме осуществляет переход от одного канала к другому, а в третьем режиме переключает эффекты.
- Одновременное нажатие S1 и S3 осуществляет переход между режимами.
Во втором режиме при достижении максимального значения яркости на канал будет загораться светодиод D2.
Прошивка для микроконтроллера ATtiny85 написана в среде разработки Arduino IDE 1.6 с установленными платами Digispark, для управления светодиодами использовалась библиотека Adafruit NeoPixel. Прошивать микроконтроллер необходимо с помощью SPI программатора.
После травления и пайки компонентов готовая плата выглядит так:
Печатную плату можно покрыть сверху каким-либо защитным диэлектрическим слоем, например, лаком.
Работа контроллера продемонстрирована на видео.
Источник
Протокол WS2812B на STM32 без пустых циклов и прерываний. И как сделать правильную радугу
На Хабре уже есть пара статей о работе с RGB светодиодами WS2112B, но почему-то они все используют довольно архаичный способ формирования битовой последовательности. Способ заключается в формировании точных интервалов времени с помощью пустых программных циклов. Возможно, это издержки использования Arduino, но мы, конечно, уже давно перешли на ARM Cortex-M4 в лице STM32 и можем себе позволить сделать красивее.
Итак, напомню “протокол” WS2112B.
Светодиодная полоса на WS2112B имеет всего один цифровой вход – DIN, подключенный к первому светодиоду на полосе. На него подается специальная импульсная последовательность, кодирующая биты, как изображено на рисунке. У каждого светодиода есть один цифровой выход – DOUT соединенный с входом DIN следующего светодиода на полосе. Каждому светодиоду нужно передать 24 бита (по 8 бит на каждый цвет: красный R, зеленый G и синий B). Таким образом, чтобы зажечь все светодиоды надо передавать 24*N бит, где N количество светодиодов на полосе.
Приняв биты светодиоды загораются и статично горят пока не получат новую битовую последовательность. Каждая битовая последовательность начинается с установки DIN в лог. ноль на время не менее 50 мкс.
Как видно биты кодируются достаточно короткими импульсами с жесткими допусками. От микроконтроллера, пытающегося сформировать их программными задержками требуется как минимум запретить все прерывания чтобы невзначай не сформировался сброс или сбойный бит. Ресурсы процессорного времени здесь также расходуются нерационально, чтобы зажечь 100 светодиодов процессору нужно отработать 3 мс. Если обновлять состояние светодиодов с частотой 100 Гц, то такой” протокол” заберет 30% процессорного времени.
Слышатся предложения использовать интерфейс SPI для передачи битового потока на WS2112B. Но здесь препятствием может стать недостаточное соответствие тактовой частоты системной шины и сильные погрешности длительностей импульсов.
А между тем в STM32 и вообще во всех чипах на Cortex-M есть отличный механизм прямого доступа к памяти (DMA). Биты можно формировать с помощью таймеров в режиме широтно-импульсной модуляции, а каждый следующий бит извлекать из ОЗУ с помощью DMA.
На рисунке ниже показана схема взаимодействия DMA и таймера TIM4 в чипе STM32F407VET6. Отладка проводилась на моем промышленном контроллере именно с таким чипом, но с тем же успехом все можно повторить на любом чипе семейства STM32. В данном случае у меня именно вывод 8 GPIOB был свободен, чем я и воспользовался.
После этой инициализации начинается автоматическая пересылка битового потока из массива DMA_buf расположенного в ОЗУ на внешний вывод 8 GPIOB. Автоматически генерируется и 50-и микросекундная пауза сброса. Процессор в пересылке никак не участвует, не используются даже прерывания. Чтобы зажечь какой-либо светодиод, надо просто записать соответствующее слово в массив DMA_buf по соответствующему смещению. Это делается в проекте функцией LEDstrip_set_led_state.
Нельзя сказать, что данный механизм вообще не влияет на процессор. Его работа несколько замедляется. Поскольку он разделяет вместе с DMA общий доступ к ОЗУ и системной шине. Но измерения показали, что это замедление в данном случае не превышает 0.2%
Для написания проекта использовалась среда разработки MDK-ARM Professional Version: 4.72.1.0. Частота процессора – 144 МГц, частота PCLK1 – 72 МГц. Легко переносится на платы серии STM32 MCU Discovery Kits. Весь проект выложен здесь
В проекте не были использованы библиотеки от ST или какие-либо другие сторонние библиотеки. Проект очень компактный, всё написано через прямые обращения к регистрам, это делает текст короче, яснее и позволяет его легче переносить в другие среды разработки.
Источник
LED-контроллер для WS2812
Здравствуйте, решил собрать себе под новый год так сказать управлятор для линеек WS2812. По началу присматривался к проектам на ARDUINO, но как то там все разбросано и всегда для меня чего то не хватало. В итоге решил попробовать объединить несколько проектов в один и вот что получилось. Прошу строго не судить, впервые работаю с WS2812 да и прошивка еще не окончательный вариант. И да здесь присутствуют эффекты из проекта AlexGyvera
В качестве основы был выбран PIC18F27K42, изначально предполагалось что он прекрасно подойдет для данного проекта, но с ростом возможностей контроллера к сожалению его функций стало не хватать ( в дальнейшем есть планы перейти на PIC18F27Q43 либо что еще лучше dsPIC), но проект все еще остался самодостаточным хотя и лишился такой хорошей фишки как DMA с CLC.
После долгих раздумий и переживаний бала создана данная схема.
Благодаря Китайским братьям из компании JLCPCB были получены вот такие платки.
И все скомпоновалось вот в этот корпус.
И вот что получилось.
Как уже писалось выше сердцем данного контроллера является PIC18F27K42, для управления был выбран TFT сенсорный экран ILI9341 с разрешением 320х240. Данный экран очень хорошо помог в разгрузке портов МК, избавив управление от кнопок. Для работы с аудио был выбран семи полосный спектроанализатор MSEGQ7 (тут возможна лотерея, из 6 китайских нормально запустились только два), в качестве предусилителя была выбрана классическая схема компрессора взятая отсюда, за исключением того что в качестве ОУ был применен MCP602 с real-to-real выходом. Источником звука может служить как линейный вход так и китайский микрофонный модуль ADMP401
, я бы очень рекомендовал именно этот модуль так как с ним удалось добиться наименьших помех при работе. В качестве регулятора громкости было выбрано электронное сопротивление MCP41100 на 100 кОм с 256 шагами перестройки, поначалу были сомнения в его работе но все обошлось да и самое главное его достоинство нет механических частей значит нет сопутствующих проблем.
Для работы в режиме GLEDIATOR к разъему XP4 необходимо подключить пин TXD разъема XP4 с таким же пином TXD какого либо конвертара USB — TTL(RS232) в моем случаи это модуль на основе FT232 и установив перемычку используемого напряжения в положение 3.3 вольта.
Далее идет модуль ESP8266, он в первую очередь использован для работы в режиме WiFi и задел на будущее для разработке управления через тот же WiFi. Для того чтобы данный модуль корректно работал на нем должна быть установлена at прошивка для esp8266. Затем необходимо установить скорость работы по UART равную 1000000 бод и аппаратное управление потоком, для этого подключаем модуль ESP8266 к компьютеру, а в программе терминала, после установки связи с модулем, вводим команду AT+UART_DEF=1000000,8,1,0,3.
Прочитав много информации в интернете, было принято решение использовать собственный источник питания для платы контроллера, в качестве него хорошо подошел HLK-5M03
Для полной развязки контроллера и ленты была использована оптопара ACPL-772L-000E, в общем то можно обойтись и без нее установив перемычку между 2 и 6 выводом колодки оптопары, но я всетаки настоятельно рекомендовал установить её.
И последним остался модуль для работы с SD картами, были опробованы несколько их видов и выбор был остановлен на данном варианте.
Для работы в режиме чтения SD карт, необходимо использовать карты 10 класса размером не превышающем 32 гигабайта, в частности были проверены карты на 8 и 6 гигабайт.
Ну а теперь по работе с контроллером.
После включения мы видим следующее сообщение.
Выбираем использовать текущие настройки или нет, если выбрали нет то попадаем в настройки матрицы.
Настраиваем матрицу под себя, при необходимости сохраняем настройки либо сбрасываем их до состояния настроек которые были получены до входа в меню настроек матрицы. Далее после выхода изменю или подтвердив начальные настройки необходимо выбрать один из режимов работы.
Первый режим, это режим с ручным переключением эффектов, то есть выбрав один определенный он будет работать все время.
Далее следует режим авто смены эффектов, здесь мы можем в режиме настройке эффекта настроить последовательность выполнения эффектов и их продолжительность, на момент выхода статьи поддерживается изменение длительности для всех эффектов.
Далее следует режим чтения SD карт. Здесь считываются данные с sd карты, пока работает чтение только одного файла, в дальнейшем хочется сделать режим с несколькими файлами, изначально хотел сделать так чтобы система не была особо привязана к названиям файлов, название файлов не должно превышать 18 символов вместе с расширением (в конце текстовой строки названия файла, если название меньше 18 символов, необходимо поставить прямоугольник с крестом),фактически так и получилось, но встала трудность с набором файлов и только недавно посетили мысли как это все можно организовать, в общем это будет сделано в будущей версии прошивки.
WiFi artnet, самоназвание в общем то говорит само за себя, данный режим был опробован в программе jinx led matrix control и показал себя с хорошей стороны, хотя мне все еще кажется что стоит приподнять скорость общения по uart между ESP8266 и PIC18f27K42.
Как всегда при старте данного режима выбираем подключится к WiFi по текущем настройкам либо изменить их.
После удачного подключения видим следующие.
Как было замечено в настройках JINX желательно использовать небольшое число universe с большим количеством каналов.
Режим Glediatir, подключились к компьютеру по usb кабелю, настроили программу JINX или GLEDIATOR по себя и наслаждаемся зрелищем.
И последний режим это режим АУДИО, пока есть только один эффект это спектроанализатор на 7 полос. Дальше я думаю будет больше.
Никаких особых настроек мой проект не требует и должен заработать сразу.
Источник