Проекты : Автоматика: управление, контроль, световые эффекты, реклама


Тимофей Носов     

Многоцветная светодиодная подсветка или RGB-контроллер своими руками

Для чего мне нужна многоцветная светодиодная подсветка? У меня растёт дочка и она совсем малышка. И в один прекрасный момент меня в очередной раз торкнуло сделать поделку для неё, а если быть точнее – украсить подвесной потолок детской комнаты подсветкой. Для этих целей в детскую комнату было приобретено четыре катушки светодиодной RGB ленты.

 

 

Железо и запчасти для светодиодной подсветки.

Продается светодиодная RGB лента в рулонах на катушках. В продаже встречаются экземпляры по 60 и по 30 светодиодов на метр, т.е. светодиоды плотнее или реже расположены на ленте. Берем 60 светодиодов на метр, т.к. оптом ещё дешевле и суммарно ярче.

В моем случае лента герметичная, т.е. находится в силиконовой оболочке. С силиконом лента конструктивно намного надежнее. Не знаю как вам,  а мне нужна надежность и яркость.

 

 

Лента имеет маркеры мест разреза и контактных площадок (+12V, G, R, B). Может разрезаться на кусочки по три светодиода. Квадратные светодиоды под силиконом имеет по 6 выводов, три вывода с одной стороны, и три с противоположной. Визуально под общей линзой находится три кристалла.

Данная лента комплектуется блоком управления и пультом дистанционного управления. Начинаем методично ломать эту железку. Блок управления собран на микроконтроллере SONIX типа SN8P2501B http://www.sonix.com.tw и микросхеме памяти 24С02С . Ниже фотографии общего вида и внутренностей.

 

 

Очень радует симпатичный пульт в комплекте. И всё это прекрасно работает, но чего-то не хватает. В этом контроллере отсутствует ручная настройка. Хочется настройки цвета энкодером. И этот подход к управлению запал в душу. Согласитесь, что радиолюбительский вариант должен быть доступным для повторения. А по сему было принято решение сделать светодиодную подсветку с управлением с помощью энкодера со встроенной кнопкой, который будет культурно монтироваться в корпус типового диммера.

 




Теория управления RGB светодиодами с помощью ШИМ.

Теперь кратко разберемся в теории как управляется RGB светодиод и что такое в принципе RGB. RGB-светодиод, как мы выяснили, это три близко расположенных светодиода под одной линзой: красный – Red, зелёный – Green и синий – Blue, отсюда и название. Как известно, сочетанием этих трёх цветов можно получить любой другой цвет. Обычно эти три светодиода имеют один общий вывод. В нашем случае плюсовой, т.е. общий анод. Яркость свечения светодиода зависит от протекающего через светодиод тока.

Для регулировки протекающего тока используется ШИМ. Что такое ШИМ? Широтно-импульсная модуляция (ШИМ) – есть импульсный сигнал постоянной частоты и переменной скважности, то есть отношения длительности импульса к периоду его следования. С помощью задания скважности (длительности импульсов) можно менять яркость светодиода.

 

 

Говоря по простому – ШИМ это соотношение времени включенного и выключенного состояния светодиода. Переключение происходит на высокой частоте и незаметно для зрительного восприятия.

Теперь поговорим о смене цвета. Микроконтроллер каждому из основных цветов – красный, зеленый и синий может установить 256 уровней яркости (от полностью выключенного до полностью включенного), а это в свою очередь позволяет сделать 256*256*256=16777216 комбинаций оттенков. Антиреально много. Мне изначально хотелось попроще, типа радуги с её мнемоникой "Каждый Охотник Желает Знать Где Сидит Фазан", т.е. красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый и с плавными переходами между ними. Я никого не удивлю, но реализация алгоритма есть у каждого в компьютере.


Программная реализация непрерывного спектра.

Запускаем тестовый редактор Word (у меня в составе Office XP). Меню Формат – Границы и заливка… . Выбираем вкладку Заливка. Нажимаем кнопку Другие цвета... . Выбираем вкладку Спектр. Устанавливаем стартовые значения цветов вручную 255-0-0.

 

 

Затем указатель цвета (крестик) в цветном поле ведем вдоль верхнего края и одновременно следим как меняются цифры значений цвета. В общем всё довольно просто.

По-умолчанию формулу R-G-B начнем с красного цвета 255-0-0.
1) Наращивается зеленый цвет 255-1-0, 255-2-0 ... 255-255-0.
2) Уменьшается красный цвет 254-255-0, 253-255-0 ... 0-255-0.
3) Наращивается синий цвет 0-255-1, 0-255-2 ... 0-255-255.
4) Уменьшается зеленый цвет 0-254-255, 0-253-255 ... 0-0-255.
5) Наращивается красный цвет 1-0-255, 2-0-255 ... 255-0-255.
6) Уменьшается синий цвет 255-0-254, 255-0-253 ... 255-0-0.

Как видим, мы начали красным цветом и закончили красным цветом. Этим мы обеспечиваем непрерывность смены цвета по кругу.

Теперь определимся (точнее я уже определился экспериментально) с шагом смены значения ШИМ. Чуть выше мы перечислили шесть сцен с наращиванием и уменьшением значений цвета. Каждая сцена имеет 255 шагов. Чтобы пройти все сцены нам потребуется 255*6=1530 шагов. Или 1530 оттенков. Уже интересно. Смотрим как работает на практике. Энкодер имеет 20 кликов. 1530/20=76 полных оборотов. Мне наверняка не понравится столько крутить энкодер чтобы сделать полную смену цветов. Сделаем еще немного расчетов.

Вычисляем новый шаг приращения/уменьшения значения ШИМ. Желательно, чтобы это число было кратным 255. Приведем несколько чисел: 5, 15, 17.
Шаг = 5; одна сцена 255/5=51 клик; шесть сцен 51*6=306; оборотов энкодера 306/20=15.
Шаг = 15; одна сцена 255/15=17 клик; шесть сцен 17*6=102; оборотов энкодера 102/20=5.
Шаг = 17; одна сцена 255/17=15 клик; шесть сцен 15*6=90; оборотов энкодера 90/20=4,5.

В итоге остановимся на шаге 15. Смена цветов плавная из 102 оттенков. Реально два соседних оттенка еле различимы для глаза. Поздравляем друг друга – мы определились с алгоритмом.

 

 

Следует сказать, что в Интернете этот алгоритм также встречается под названием алгоритм непрерывного спектра. Теперь посмотрим один из вариантов реализации примитивного алгоритма на Си. Здесь алгоритм приведен для примера, на самом деле способы реализации могут быть более замороченными.

void min (void){
if (scena == 1) {if(G<255) G=G+15; else scena = 2;}
if (scena == 2) {if(R>0)   R=R-15; else scena = 3;}
if (scena == 3) {if(B<255) B=B+15; else scena = 4;}
if (scena == 4) {if(G>0)   G=G-17; else scena = 5;}
if (scena == 5) {if(R<255) R=R+17; else scena = 6;}
if (scena == 6) {if(B>0)   B=B-17; else scena = 1;}
}


void max (void){
if (scena == 1) {if(G>0)   G=G-15; else scena = 6;}
if (scena == 2) {if(R<255) R=R+15; else scena = 1;}
if (scena == 3) {if(B>0)   B=R-15; else scena = 2;}
if (scena == 4) {if(G<255) G=G+15; else scena = 3;}
if (scena == 5) {if(R>0)   R=R-15; else scena = 4;}
if (scena == 6) {if(B<255) B=R+15; else scena = 5;}
}


Как видим у нас две функции: min и max. В зависимости от направления вращения энкодера вызывается та или иная функция. На этом хватит теории, переходим к практике.


Реализация контроллера светодиодной подсветки на AVR.

Плата контроллера изготовлена методом ЛУТ. Значительное место на плате занимают винтовые зажимы для подключений (отдельное спасибо Александру Калмыкову за зажимы).

 

 

Плата имеет размер 4x5 см. Электрические соединения настолько просты, что конструктив можно легко реализовать на куске монтажной платы. Далее собственно схема блока управления и электрических соединений.

 

 

Основой устройства является популярный, доступный и дешевый микроконтроллер ATtiny2313. Как видим, в схеме присутствует датчик ИК приемника (TSOP1736) для управления с пульта дистанционного управления. TSOP1736 можно не устанавливать на плату и отсутствие этого датчика никак не сказывается на работе устройства.

Для пульта от заводского контроллера в программе я продублировал функции:
– включение и выключение,
– 256 уровней яркости,
– 15 фиксированных цветов,
– выбор любого (!) цвета из палитры непрерывного спектра,
+ режимы анимации и спецэффектов:
– динамичное переливание цветов,
– стробоскоп любого текущего цвета,
– случайное смешение цветов,
– плавная смена цветов палитры непрерывного спектра.
Напрограммировал от души. Выглядит потрясающе красиво и эффектно.

Как работает блок управления? Подаем питание – ничего не светится. Это сделано для того, чтобы в моё отсутствие случайный скачок напряжения в доме не включил подсветку. Далее любой кнопкой на пульте (кроме кнопки выключения) включаем необходимый режим.

Предположим, что у вас нет пульта. Вы можете нажать на кнопку энкодера и включить белый цвет свечения. Либо можете просто вращать в любую сторону и выбирать необходимый оттенок свечения из всей палитры непрерывного спектра. Очередным нажатием на кнопку энкодера светодиодная лента переводится из включенного состояния в выключенное. Повторяю, при подаче питания ничего не светится.

При прошивании микроконтроллера ATtiny2313 устанавливать следующие фьюзы.

 

 




Оформление экнодера в корпусе диммера.

Сначала разбираем диммер. Внутренности можно использовать для регулятора нагрева паяльника.

 

 

Далее делаем плату (также можно сделать на обрезке монтажки).

 


 

Энкодер монтируем со стороны фольги (пайки). Разъемы и конденсаторы монтируем с другой стороны.

В корпусе диммера сверлим отверстия (4 шт) под ввод проводов. Обтачиваем напильником плату до кондиции. На корпусе энкодера стачиваем выступ. Примеряем плату в корпус и оцениваем примыкание. До финальной фиксации желательно оценить работоспособность путем подключения к блоку управления.

Затем клеем из обычного термопистолета (GLUE GUN) делаем крепление платы в корпусе диммера. Ожидаем пять минут для отвердевания клея.

 

 

Затем собираем корпус диммера-энкодера.

 

 

Поздравляем друг друга с успешной сборкой.


Реализация контроллера светодиодной подсветки на PIC.

Плата контроллера изготовлена методом ЛУТ. Значительное место на плате занимают винтовые зажимы для подключений (отдельное спасибо Александру Калмыкову за зажимы).

 

 

Плата имеет размер 3,5x5 см. Электрические соединения настолько просты, что конструктив можно легко реализовать на куске монтажной платы. Далее собственно схема блока управления и электрических соединений.

 

 

Основой устройства является популярный, доступный и дешевый микроконтроллер PIC12F629 (можно использовать PIC12F675). Работа схемы аналогична предыдущей схеме. После подачи питания всё выключено. Нажатием на кнопку энкодера включается белый цвет свечения. Вращением выбирается любой оттенок из непрерывного спектра. Повторное нажатие на кнопку энкодера переводит светодиодную RGB ленту из включенного состояния в выключенное.


Заключение.

У вас возникнет вопрос, какой проект лучше - на AVR или на PIC. Отвечаю - лучше на AVR.

Плюсы.
Микроконтроллер ATtiny2313 имеет 4 шт аппаратных ШИМ. В микроконтроллерах PIC 12й и 16й серий 3 шт аппаратных ШИМ в одном корпусе мне не удалось обнаружить и поэтому пришлось сделать программный ШИМ. Казалось бы, какая разница, ведь и то и другое работает. Программный ШИМ ограничивает реализацию дистанционного управления; эти два процесса (ШИМ и ДУ) имеют слишком разные требования по времени исполнения программы; ДУ будет тормозить ШИМ, что приведет к мерцанию светодиодов в момент управления с пульта. Конечно можно попытаться напрячь мозг и сделать красиво, но у меня большие сомнения за конечный результат. Можно разделить эти процессы и сделать проект на двух микроконтроллерах PIC. Однако, тут нужно взвесить цену этого "двухконтроллерного" проекта.

Минусы.
По моим ранним проектам вы успели заметить, что я отдаю предпочтение PIC, так как для меня "лучше то, что лучше знаешь" (так уж сложилось). В этом заключении я делаю своё субъективное сравнение, т.е. ничего личного. Размер выходного кода у AVR примерно раза в два больше чем у PIC. Скорее всего это особенность компиляторов, а может и особенность системы машинных команд. Что бы вы не говорили, но я приучен к экономии. Также мне НЕ понравился доступ к битам (из AVR Studio 4); капитальный неудобняк. Также есть минус с которым как-бы можно смириться - долбанная система фьюзов.


Благодарности.

Роман Абраш и Вадим Гончарук - огромное вам спасибо за консультирование и мой быстрый старт в AVR. Роман - мне очень нравится твоя уникальная способность давать ответы, которые заставляют думать. Вадим - все твои советы были к месту и по делу. Процветания вам и творческих успехов, берегите себя.


Файлы:
Печатная плата под ATtiny2313
Прошивка под ATtiny2313
Печатная плата под PIC12F629 / PIC12F675
Прошивка под PIC12F629 / PIC12F675
Печатная плата энкодера в корпус диммера
Видео (3 мб)


Полезные ссылки:
Попробуй сделать печатную плату на кухне
Собери себе подходящий программатор
Узнай как прошить микроконтроллер прошивкой
Научись программировать и делать прошивки
Задай вопрос или найди ответ в форуме


Назад

Просмотров: 251354

 








 
 
 

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