А по мне, то лучший способ провести длинные тёмные зимние вечера — это за разработкой алгоритмов для праздничной иллюминации.
Представляю открытый проект новогодней гирлянды на основе LED ленты со светодиодами WS2812B. Гирлянда питается от 4-х AA аккумуляторов. С текущими настройками проект поддерживает 122 светодиода на ленте, но легко может быть расширен до 1000 светодиодов и более. Гибкий перенастраиваемый алгоритм генерации световых эффектов. Проект содержит программу управления гирляндой с телефонов или планшетов, компилируемую без модификаций под iOS, Android и Windows.
Управляется лента в моем проекте модулем K66BLEZ c микроконтроллерами семейства Kinetis.
Знакомство с модулем K66BLEZ1 было начато в статьях:
— Модуль универсального контроллера для интернета вещей. Вдыхаем жизнь
— Модуль универсального контроллера для интернета вещей. Тестирование FatFs
— Модуль универсального контроллера для интернета вещей. Основы программирования
— Схема модуля
— Репозитарий проекта
Высокопроизводительный способ работы со светодиодной лентой на WS2812B был описан здесь. В данном проекте я использую тот же принцип. Как и STM32 микроконтроллеры семейства Kinetis K66 имеют в себе таймеры с доступом по DMA (механизм прямого доступа к памяти минуя процессор). На этот раз я использую прерывания после окончания каждого цикла DMA чтобы обновить состояния светодиодов согласно алгоритму генератора эффектов.
К модулю присоединяемся через макетную плату:
Макетная плата практически ничего не содержит кроме двух разъемов. Один разъем предназначен для подключения аккумуляторов, другой для подключения ленты.
Ниже схема макета (кликабельно):
Напряжение питания
Интересной особенностью ленты является ее способность работать от гораздо более низкого напряжения чем написано в спецификации. Гирлянда сохраняет работоспособность при понижении напряжения на аккумуляторах до 2.9 В!
При свежих аккумуляторах гирлянда получает напряжение 5 В, но при этом управляющий сигнал подается напрямик с микроконтроллера и имеет амплитуду 3 В и сбоев в управлении светодиодами не происходит.
Так выглядит работа гирлянды на столе в режиме отладки:
Исходники проекта находятся здесь — Indemsys/K66BLEZ_WS2812B_LED_strip_control.
Проект состоит из 3-х программных частей:
- Директория MK66 — содержит проект для микроконтроллера MK66FX1M0VLQ18 модуля K66BLEZ. Микроконтроллер выполняет основное приложение. Работа приложения базируется на операционной системе реального времени MQX.
Помимо основного приложения проект содержит стеки USB, TCP/IP, файловую систему, отладочный монитор и многое другое. По сути это фреймворк для создания разнообразных приложений где управление гирляндой является просто некоторым простейшим демонстарционным приложением. Среда разработки — IAR 7.70.2.
- Директория MKW40Z — содержит проект для микроконтроллера MKW40Z160VHT4 модуля K66BLEZ. Микроконтроллер занимается поддержкой связи по протоколу Bluetooth LE. Работа стека Bluetooth базируется на операционной системе реального времени FreeRTOS. Среда разработки — IAR 7.70.2
- Директория PC_app содержит проект управляющей программы на PC в среде RAD Studio 10.1. Использован кросплатформенный фреймворк позволяющий компилировать приложение под Windows, iOS и Android.
Проект развивается. И надеюсь к следующему Новому году гирлянда будет управляться голосом и из облаков.
Комментарии (21)
Celtis
31.12.2016 18:39Замеры потребления гирлянды делали?
По грубым прикидкам на таком световом паттерне хороших батарей должно хватить максимум на 40-60 минут.
Vnuchok
01.01.2017 11:58Носимая — это что бы носить с собой или на себе, верно? Ну, например, как детали одежды, так? Хватит аккумуляторов, примерно, на час. Далее так и вижу:
Подожди, я сейчас платье подзаряжу и пойдём!
Ну или можно сделать зарядку от движений. Картинка номер 2:
— а чего это её так колбасит?
— да она платье заряжает.
Ну это я так, чисто поржать))
VioletGiraffe
01.01.2017 11:59Не понимаю, как это работает. Что за хитрая светодиодная лента с тремя выводами, позволяющая добиться разного цвета светодиодов в одной ленте?
Обычно у RGB-лент 4 вывода — земля и 3 анода R, G, B.
vladimir_open-dev
01.01.2017 14:01То, что у вас нет сбоев при управлении лентой уровнем 3в — сущее везение. Будет работать через раз(от экземпляра к экземпляру).
Indemsys
01.01.2017 22:31На таком принципе сделано около сотни устройств.
Отказов ни разу не было.
С даташитом все согласуется. Согласно нему граница логических уровней лежит в пределах 2 В при питании 5 В.
Обычный TTL уровень.vladimir_open-dev
01.01.2017 22:35Все так, вот только TTL логика это 5В, а не 3,3… и по документации уровень самой плохой лог. 1 получается 0,7*Uпит~3,5В. Поэтому я вам и говорю, что вам чисто повезло (скорее всего у вас питание проваливается при работе и логический уровень начинает совпадать).
Leerooooy
03.01.2017 00:39TTL вполне себе стабильно работает и при лог.1 равной 2.5В. Правда есть некоторые «НО», например, потребление самого контроллера и цепей управления растет, что ощутимо для портативного устройства с батарейным и питанием. Ну и конечно это все работает пока в радиусе нескольких метров не появится источник помех — тогда-то все и накроется)))
Для игрушки это приемлемо, для китайцев это тоже приемлемо, для серьезного продакшена уже разумеется нет.vladimir_open-dev
03.01.2017 06:35Надо документацию смотреть в таком случае… я вот не посмотрел — 300 устройств с ws2812 дорабатывать пришлось, хотя до этого от 3,3в управления работало и макет нормально работал, а продакшн не заработал. Хорошо, что малой кровью отделались.
Indemsys
03.01.2017 11:37-1Скорее всего проблема была в способе управления. Время рефреша, согласование с волновым сопротивлением кабеля и проч.
Уверяю вас от 3 В работает железно. Уж более года производим.vladimir_open-dev
03.01.2017 13:31Скорее всего, но как изменение уровня управления повлияло на эти вещи? И получается, что документация врет??
Я вас уверяю, что вам повезло(такое часто бывает)… либо у вас питание ленты не 5В, а ниже.Indemsys
03.01.2017 15:09-1Не врет, а просто ее надо правильно понимать.
Возьмите Vil (уровень логического нуля ) и добавьте Vh (гистерезис) и получите уровень переключения.
Leerooooy
03.01.2017 21:27+1Все классно… уровень нуля… гистерезис… только «мертвую зону» вы учли? «VIL + VH» — это лишь нижняя границы «зоны неопределенности». Вы хоть документацию правильно интерпретируйте. Производитель не гарантирует стабильность работы в данной границе, любые помехи и наводки будут искажать состояние линий и вызывать ошибки, а значит это очередной «хуяк, хуяк и в продакшен» — чисто российско-китайский подход.
Ugrum
Для шагающей ёлки?
А собссно по сабжу — красиво и добротно сделано.
Респект.
Rumlin
Например приманка для отлова гиков
https://geektimes.ru/post/252988/