Главная » Световые эффекты
Призовой фонд
на октябрь 2020 г.
1. 1500 руб
Сайт Паяльник
2. Тестер компонентов MG328
Сайт Паяльник
3. 150 руб.
От пользователей


Уличный светодиодный светильник на солнечных батареях

RGB LED Pixels

RGB LED Pixels - цифровая система состоящая из RGB-светодиодов (полноцветных), где у каждого светодиода имеется свой контроллер. Т.о. для каждого пикселя (RGB-светодиода) можно задать свой цвет, что позволяет создавать различные светодиодные решения. Подобным образом устроена цифровая RGB-светодиодная лента.
В каждом RGB LED-модуле или пикселе (в дальнейшем будем придерживаться данной терминологии, подразумевая, что это один полноцветный светодиод), контроллер управления (драйвер LED) и сам светодиод помещены в силиконовый водонепроницаемый корпус.

В данной статье мы рассмотрим 2 типа самых популярных на сегодняшний день RGB LED пикселей: диаметром 12мм и 20мм. И тот и другой тип имеют подобные чипы контроллеров, но содержат разные светодиоды и отличаются формой.

Итак, немного характеристик RGB LED-модулей:
- диаметр пикселей 12мм и 20мм
- 4-х проводная шина
- в 20мм пока что используется контроллер LPD6803. 12мм могут идти с контроллером WS2801 или LPD6803
- в LPD6803 (даташит) используется 15 битный цвет (5 бит на каждый цвет)
- в WS2801 (даташит) используется 24 бит (8 бит на цвет)
- питание 5В, потребление максимум 60мА на 1 пиксель (когда на максимум выставлены все цвета, т.е. отображается белый цвет)
- 2-пин SPI-подобный протокол связи

Теперь, небольшое видео иллюстрирующее работу 12мм RGB LED пикселей:

20мм RGB LED пиксели

20мм RGB LED пиксели

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

Максимальный ток потребления одного RGB модуля составляет 60мА, по 20мА на каждый цвет.

12мм RGB LED пиксели

12мм RGB LED пиксели

12мм пиксели немного вытянутее чем их 20мм собратья. В них используются 8мм светодиоды, которые менее яркие чем те, которые стоят в 20мм RGB-модулях. Но зато у них отличное смешивание цветов!

Энергопотребление точно такое же, как и у 20мм пикселей.

Расстояние между пикселями

Между собой RGB-пиксели соединены при помощи 4-х жильного плоского кабеля. Расстояние между ними разное, к примеру у рассматриваемых 20мм модулей оно составляет 63мм, а у 12мм расстояние составляет 90мм. Естественно, его можно увеличить, разрезав стандартный кабель и удлинив его на необходимое расстояние.

Расстояние между 16мм и 20мм RGB LED модулями

Применение

На представленных ниже видео, вы можете посмотреть различное применение RGB LED Pixels:



Контроллеры RGB LED

В каждом корпусе RGB-пикселя содержится микрочип - драйвер управления RGB-светодиодом. В основном сейчас используются WS2801 или LDP6803. Работают чипы очень просто - последовательные данные принимаются на одну ножку чипа, обрабатываются и транзитом выходят на другую ножку чипа. В чипе LPD6803 используется последовательность из 16 бит (15 бит данные цвета и 1 стартовый бит), в WS2801 задействовано 24 бита данных.

Т.о. если необходимо записать данные в 10 RGB LED пикселей, то необходимо передать последовательность из 10 * 16 или 24 бит.

Теперь рассмотрим различия между этими двумя драйверами.

LPD6803
Данный чип позволяет вручную управлять ШИМ яркостью цвета. Чем быстрее будет ШИМ, тем цвета в RGB LED будут более смазанные, однако частота ШИМ не может быть очень быстрой из-за задержки в чипах.
Следует заметить, что частота тактирования ШИМ такая же как и у данных, что позволяет сэкономить нам один вывод МК. Это хорошо, но к примеру на Arduino реализуется только при помощи прерывания.

WS2801
Этот контроллер более функциональный, помимо 24 битного цвета здесь используется встроенный ШИМ. Это экономит ресурсы управляющего микроконтроллера и в нем уже можно обойтись без прерываний.

Питание

Как уже было сказано выше, каждый RGB-светодиод может потреблять до 60мА от 5В источника питания. Соответственно при 20 RGB-пикселях максимальный ток потребления составит уже 1.2А, а при 25 - 1.5А. Естественно, это когда все светодиоды горят белым цветом (при белом цвете горят все 3 составляющие RGB светодиода).
Для такого количества пикселей необходимо использовать как минимум источник питания 5В, 2А. А можно поступить проще и воспользоваться старым ATX-блоком питания от компьютера (см. распиновку ATX) который обеспечивает ток до 30А. Не забудьте соединить вместе "земли" блока питания и вашего контроллера.

Подключение

Отличительной особенностью рассматриваемых RGB модулей является то, что они с цифровым управлением, а это значит, что для управления используется всего 2 провода (clock и data) и можно подключать столько RGB-пикселей, сколько вам нужно. Плюс 2 провода питания.

Однако не стоит забывать, что это не общая шина, где все пиксели включены в параллель. Проводники питания (5В и GND) включены везде параллельно, а вот управляющие линии в каждый RGB-пиксель подключены в "вход", соответственно выходящие линии к "выход", т.е. в разрыв.

Подключение RGB LED пикселей

Когда будете подключать к микроконтроллеру, то обратите внимание, чтобы к МК подключался вход "input" от RGB-пикселя. Для этого, обычно на платке подключения присутствуют стрелочки. К примеру на рисунке выше, большая стрелка в верхнем правом углу - это выход, а напротив нее, слева, находится вход. Далее, все остальные RGB LED пиксели подключаются от выхода к входу.

Рассмотрим практический пример подключения и использования с контроллером Arduino. Максимальный ток, который может обеспечить плата Arduino, составляет 500мА, поэтому необходимо использовать внешний более мощный источник питания.

Для RGB-пикселей с использованием контроллера LPD6803 красный провод необходимо подключить к +5В блоку питания, зеленый - к цифровому выводу 3 контроллера Arduino, желтый - к 2 цифровому выводу и наконец синий провод к минусу блока питания и GND контроллера Arduino.
Цвета проводников, при использования контроллера WS2801 могут отличаться! Поэтому перед подключением внимательно изучите инструкцию.

Подключение RGB LED пикселей к Arduino

12мм RGB-модули бывают как на контроллере WS2801, так и на старом LPD6803. Отличить их просто - для этого достаточно прочитать надпись на плате.

Надпись на плате WS2801

Учтите, что цвета проводом для контроллера WS2801 могут отличаться!

Программа для LPD6803

Учитывая то, что управление ШИМ чипа и линию данных можно обьединить, программа очень проста. В библиотеке используется прерывание, которое вызывается каждые несколько миллисекунд. Если данные пришли, то они пересылаются, если нет, то на выходе Arduino сохраняются импульсы, чтобы поддерживать частоту ШИМ. Для прерывания используется Timer 1.
Код программы базируется на bliptronics, саму библиотеку и пример можно скачать с GitHub.

Немного разъяснений по использованию библиотеки и strandtest.pde. Инициализация объекта происходит вызова процедуры с 3 параметрами: количеством RGB LED пикселей, указанием вывода data и clock.

LPD6803 strip = LPD6803(20, dataPin, clockPin);

Следующим этапом происходит вызов setup():

void setup() {
  strip.setCPUmax(50);  // start with 50% CPU usage. up this if the strand flickers or is slow
 
  // Start up the LED counter
  strip.begin();
 
  // Update the strip, to start they are all 'off'
  strip.show();
}

setCPUmax() - конфигурирует Timer1 для выдачи прерывания, чтобы обеспечить работу ШИМ, контроллера RGB LED. Значение может быть от 0 до 100.

begin() - начинает работу прерываний

show() - обновляет состояние всех RGB-пикселей. Данную функцию необходимо вызывать после того, как сделаны все установки для цветов и теперь их необходимо отобразить. Функция обновляет все RGB LED за раз, даже если вы обновили цвет только одного пикселя. Т.к. данные передаются сразу для всех RGB LED.

И напоследок, рассмотрим пример функции colorWipe. Функция создает подобие бегущего огня с изменением цвета. Это обычный цикл с инкрементированием пикселей (для подсчета общего количества пикселей удобно пользоваться функцией numPixels()) и установкой цвета от (инкремент i) к c. В данном случае цвет сохраняется в 16 битной переменной. Затем, записанные данные передаются в RGB LED дисплей для отображения, командой show(). И в конце цикла, небольшая задержка.

Снизу, приведена функция Color(), которая преобразовывает 8 битные Red, Green и Blue цвета в один 15-битный RGB-цвет для контроллера LED. Т.о. максимальное десятичное значение для каждого цвета составляет 31.

// fill the dots one after the other with said color
// good for testing purposes
void colorWipe(uint16_t c, uint8_t wait) {
  int i;
 
  for (i=0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}
 
/* Helper functions */
 
// Create a 15 bit color value from R,G,B
unsigned int Color(byte r, byte g, byte b)
{
  //Take the lowest 5 bits of each value and append them end to end
  return( ((unsigned int)g & 0x1F )<<10 | ((unsigned int)b & 0x1F)<<5 | (unsigned int)r & 0x1F);
}

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

colorWipe(Color(31, 0, 0), 50);  // red fill
colorWipe(Color(0, 31, 0), 50);  // green fill
colorWipe(Color(0, 0, 31), 50);  // blue fill

Программа для WS2801

Программа для данного контроллера аналогична LPD6803, но немного проще, т.к. нам не требуется постоянно выдавать сигнал от прерывания для ШИМ.

Скачать библиотеку и пример использования с GitHub. Загрузите пример скетча strandtest.pde в ваш контроллер Arduino.

И пробежимся немного по основным функциям. Для начала, необходимо создать объект strip. Для этого, происходит вызов конструктора объекта с указанием количества RGB LED и пинами data и clock.

WS2801 strip = WS2801(25, dataPin, clockPin);

Далее, идет процедура setup():

oid setup() {
  // Start up the LED counter
  strip.begin();
 
  // Update the strip, to start they are all 'off'
  strip.show();
}

begin() - производит начальную инициализацию библиотеки и выключает все RGB LED пиксели

show() - так же как и в примерах LPD6803 выше обновляет состояние всех RGB LED

И наконец рассмотрим пример функции colorWipe(). Она работает таким же образом как и в примере с LPD6803, но отличие заключается в том, что здесь используется 32 битная переменная для хранения цвета. Перед передачей данных, 32 битный цвет необходимо преобразовать к 24 битному значению при помощи функции Color(). Максимальное десятичное значения для каждого цвета составляет 255.

// fill the dots one after the other with said color
// good for testing purposes
void colorWipe(uint32_t c, uint8_t wait) {
  int i;
 
  for (i=0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}
 
/* Helper functions */
// Create a 24 bit color value from R,G,B
uint32_t Color(byte r, byte g, byte b)
{
  uint32_t c;
  c = r;
  c <<= 8;
  c |= g;
  c <<= 8;
  c |= b;
  return c;
}

Напоследок, небольшой пример применения:

colorWipe(Color(255, 0, 0), 50);  // red fill
colorWipe(Color(0, 255, 0), 50);  // green fill
colorWipe(Color(0, 0, 255), 50);  // blue fill

Оригинал статьи на английском языке (перевод Колтыков А.В. для сайта cxem.net)

Оригинал статьи

Теги:

none Опубликована: 2011 г. 0 1
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (3) | Я собрал (0) | Подписаться

0
Константин #
Здравствуйте скажите пожалуйста, где можно заказать WS2801? Спрашивал у Googla но результатов нет, Помогите ссылочкой...
Ответить
0
talibanich #
Плохо спрашивали. Вбиваем WS2801 и сразу же получаем несколько магазинов: sparkfun, adafruit, alibaba и т.п
Ответить
0
Алексей #
Очень понравилась данная статья, однако возник один вопрос - нашёл много RGB пикселей в наличии на алибабе, однако все они идут лентами по 50 штук, в статье не сказано, можно ли делить пиксельную ленту? Я так понимаю, можно оставить на ленте сколько нужно пикселей, а потом в программе указать количество, тогда контроллер будет пускать сигнал на первый пиксель, а тот передаст второму, тот третьему и т.п., до указанного количества?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Набор для сборки - LED лампа
Набор для сборки - LED лампа
iMAX B6 - зарядное для Lion, LiPo, LiFe, Pb, NiCd и NiMH аккумуляторов Набор 4WD Kit Bluetooth
вверх