Наигравшись с линейкой состоящей из 10 светодиодов WS2812B, описанной в предыдущей статье, решил сделать что-нибудь посложнее.
После изготовления погодной станции появилась мысль, оснастить все комнаты часами с показом температуры от центрального сервера.
Думал делать такие часы из семисегментных индикаторов с цифрами высотой 7-10 см, но тут очень удачно подвернулись пиксельные светодиоды.
Для отображения 4-х цифр можно применить матричный дисплей 8×16 или даже 5×15. Но взглянув на свое табло от погодной станции — на графический дисплей такого мизерного разрешения ничего толком не вывести. Тем более количество оставшихся после пайки линеек светодиодов решило все сомнения. Буду делать сегментный индикатор.
Спроектировал дисплей в графическом пакете: четыре знака под цифры, три десятичные точки, для отображение, например, температуры и двоеточие между часами и минутами. Получилось всего 57 светодиодов WS2812B.
Ссылка на даташит WS2812B, схемы включения и цоколевка есть в статье про светодиодные линейки.
Печатную плата дисплея на WS2812B проектирую в Spirit Layout 6.0
Скачать чертеж печатной платы для программы Spirit Layout 6.0
Изготавливаю печатную плату методом ЛУТ
Паяю светодиоды на плату
Тестовый скетч из библиотеки Adafruit Neo Pixel показал работоспособность дисплея
Несколько демо скетчей для дисплея на WS2812B
Скетч показывающий возможности управления цветом цифр дисплея
Демо скетч для дисплея WS2812. Управление цветомhttp://www.youtube.com/watch?v=jBZXpmer-Z0
Скетч демонстрирующий скорость работы дисплея
Демо скетч для дисплея WS2812. Таймерhttp://www.youtube.com/watch?v=OoOvGaJTyEg
Скетч демонстрирующий управление яркостью цифр дисплея
Демо скетч для дисплея WS2812. Управление яркостьюhttp://www.youtube.com/watch?v=sBo0-AbZsQw
Небольшой итог
Дисплей полностью оправдал мои надежды. Ресурсы Ардуино тратятся только во время записи в цепочку WS2812.
Если после этого выключить контроллер, информация в светодиодах остается.
Никакого мерцание при перерисовке светодиодов, как на некоторых матричных дисплеях.
Максимальное энергопотребление дисплея ~600мА, приводит периодически к перезагрузке контроллера при питании от USB компьютера. При питании от внешнего источника все работает стабильно.
Нагрев дисплея при работе не более 40С
Стоимость данного дисплея получается около $7.5 + печатная плата и все материалы для пайки
К недостаткам данной реализации можно привести слабоватую читаемость цифр. Для улучшения читаемости лучше сделать цифру 4×7 диодов, что приведет к увеличению количества WS2812 до 85 и стоимость примерно $11
Кто работал, кто устал … можно и отдохнуть в рабочем кресле!
Есть желание собрать типа экрана на 30 х 60 точек RGB. Сложно сделать управление?
Хочу сделать на параллельном чипе — http://www.alibaba.com/products/F0/ws2821/8.html
Можно и на этом.
Смотря что ждать от управления.
Мне проще на ардуине сделать
В даташите написано что обязателен конденсатор и для некоторых вариаций и резистор. У тебя их нет. Зачем они тогда нужны?
Кондеры или RC цепочки там для того чтобы уменьшить помехи от ШИМ на шину питания.
У меня пока ни сбоев не помех не обнаружено. Шины достаточно толстые, в случае чего думаю обойтись несколькими керамическими кондерами
Спасибо
Подскажите, помогите, как зажечь ТРИ светика такой матрицы.
Прошу, хочу понять как работают такие светики по трем проводам (+\-\s)
Ну в первой статье алгоритм расписан, а подробнее в даташите даже с графиками.
Каждый пиксель обрабатывает одну команду (три байта) из последовательности после сброса, остальные просто транслирует на выход. Получается, что первый отображает первые три байта, второй следующие и так далее. Всего заявлено управление 1024 штуками с частотой 30 раз в секунду
Спасибо, попробую, для меня это сложно )))
Можно маленький скечт для трех светодиодов, чтоб понять как сам скечт работает. Ну пусть будет один цвет и простая бегушка — хочется посмотреть алгоритм скетча, а не как устроен принцип работы таких светиков. Просто в моем случаи сложность в программирование на ардуине )))
Заранее спасибо всем за помощь ))))
#include
Adafruit_NeoPixel led3 = Adafruit_NeoPixel(3, 2, NEO_GRB + NEO_KHZ800); //Три светодиода на DIO 2
void setup() {
led3.begin();
}
void loop() {
// Бегущий огонь на 3 светодиода красного цвета cо скоростью 0.5 сек
for( int i=0; i<3; i++ ){
for( int j=0; j<3; j++ ){
if( i == j )led3.setPixelColor(j, led3.Color(255,0,0));
else led3.setPixelColor(j, led3.Color(0,0,0));
}
led3.show();
delay(500);
}
}
Кстати, в библиотеке есть неплохие примеры
Алексей, ОГРОМНОЕ СПАСИБО за помощь ))))
Алексей, никак не пойму, как в скетче связаны uint16_t DIGIT[] и unsigned int R_MASK[].
Я так понимаю R_MASK[] это маска, по которой в цикле создается цифра? Никак не могу сообразить, как маску переделать под цифры размером 4 на 7 диодов.
Массив цифр у меня получился следующий:
uint16_t DIGIT[] = {
0xFF6FF, /* 0 */
0xFE000, /* 1 */
0x9FFcF, /* 2 */
0x83FFF, /* 3 */
0xF097F, /* 4 */
0xF3FF9, /* 5 */
0xFFFF9, /* 6 */
0x8067F, /* 7 */
0xFFFFF, /* 8 */
0xF3FFF /* 9 */
};
Подскажите, какую маску под них нужно написать?
привет. Я жду помощи по этому проекту я хочу на сегодняшний день P10 .16×32 час рейтинга.
ТУРЦИЯ / АНКАРА
Проблем никаких, только экономически нецелесообразно.
Дешевле на Али готовый дисплей купить P10
Мне нужно время, температура матрицы проекта
ТУРЦИЯ / АНКАРА
Добрый времень суток,
А как все-таки сделать 4*7?
Я вроде и DIGIT перерисовал и отметку начала цифр изменил, и количество точке с 13 до 20, но все равно 20 диод не светится, а ещё в каждой цифре 2-3 лишних светодиоды светится.
uint16_t DIGIT[] = {
0xFF6FF, /* 0 */
0x7F, /* 1 */
0xF3FF9, /* 2 */
0x83FFF, /* 3 */
0x1E97F, /* 4 */
0x9FFCF, /* 5 */
0xFFFCF, /* 6 */
0x30FF, /* 7 */
0xFFFFF, /* 8 */
0x9FFFF /* 9 */
};
uint8_t POSITION[] = { 3,24,47,68 };
…
for( int i=0; i<20; i++ )
Подскажите пожалуйста
long R_MASK[20]={0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x100,0x200,0x400,0x800,0x1000,0x2000,0x4000,0x8000,0x10000,0x20000,0x40000,0x80000};
// Буфер экрана
uint32_t SB[PIXEL_COUNT];
SB[23] = color;
Вот это еще надо было.
Еще число пикселов поставить нормальное при инициализации