Мини матрица 16х16 ws2812b


Да, это адресные светодиоды, по картинке судя и злобным комментам покупателей :slight_smile: Им платка не зашла. Я взял из-за квадратности, разъёма на борту, и возможности клеить на бумажный скотч, удобство пайки с двух сторон и на “край”. То что она определяется как просто нано в IDE.

оооо, а я вас тоже знаю, вы тоже мой личный хейтер))) вот тут не точка а ?! должны быть наверное… хотя это не код, и тут так писать можно)))

lilik такой девайс появился, если надо совсем маленькое что то
Waveshare ESP32-S3 с RGB

Интересный калибр :slight_smile:
Осталось матрицу заменить дисплеем, МК плату - флешкой, разъём другого типа и будет красиво ! Вставил флешку, а на боковой поверхности фото хозяина с номером телефона - чтоб вернуть так сказать случайно утерянное.

Все три подключены на D2, причем D2 никуда больше не выведена.

1 лайк

А могли бы вывести с 3 адресного светодиода дальше на ленту вывод :slight_smile:
Купить платку 8х8 мини и приклеить её наоборот этой платы, выйдет дешевле, чем BABOS советует.

Почти тютька в тютьку.


конечно дешевле))) https://aliexpress.ru/item/1005006325461480.html (вроде она) я ту ссылку скидывал из за того что там видео работы ее есть

Можно попробовать цвета гармонизировать. В интернете есть онлайн калькуляторы. А можно - наеборот, использовать близкие цвета

Описание креативненькое ))

Не Ешьте эту светодиодную сетку только потому, что она такая красочная и размером с укус!

Это да :slight_smile:


А так да, можно делать светодиодный бейдж по типу 8Х(8,8,8,8)
Или в футляр деревянный как покупатель ниже этого Энрики

Ещё жалуются, но я и сам заметил - светодиод включения синий-яркий, а с 13 пина жёлтый-тусклый, на фоне синего почти не виден :slight_smile:

Тут я не пришёл к решению :slight_smile: В моих вариантах с адресными светодиодами всегда фигурирует М - псевдомощность(яркость) свечения от 0-255. В конкретно этих узорах цветоперебор реализован в виде

strip.setPixelColor(N,(cv%2)*M,((cv/2)%2)*M ,((cv/4)%2)*M );

с условными номерами цветов 0-7. Поэтому вопрос как подбирать комплект цветов с регулировкой их псевдояркости остаётся открытым.

Как вариант использовать не RGB, а HSV. В Adafruit_NeoPixel это вроде есть. В нестандартной есть(GitHub - HardProg/Adafruit-NeoPixel-With-HSV: This is the Adafruit NeoPixel library https://github.com/adafruit/Adafruit_NeoPixel WITH HSV), а в FastLED есть по умолчанию. Насыщенность сделать на всю(для красивости) и с яркостью работать проще.

Надо подумать на досуге. Плохо, что аппаратно то светодиоды работают именно в RGB пространстве.


Вот, номера цветов на этом конусе. Осталось яркость вставить :slight_smile:

Хех, походу, в HSV чаще работают не яркостью, а насыщенностью. В Fast led куча разных готовых функций и в большинстве эффектов “красявости” достигаются именно насыщенностью - типа fadeToBlackBy

не особо актуально, но в чем состоит “возможность клеить на бумажный скотч”?..
Можно ведь и термоклеем приклеить хоть что хоть куда, к слову ))

щас куплю матрицу 16 на 16, потом кто то сделает проект на 32 х32…)))

вроде не неопиксель не фаст лед не умеют и цвета менять, и яркость, разве что сделать кучу переменных, и для каждого пикселя выводить несколько раз в секунду, я давно так сделал проект за денежку… но сейчас вроде что то изменилось…

вроде работает, но кажется ваш эффект отвалился))) и появился другой(хорошо или плохо это я не знаю, у меня матрица 8 на 8))) ) если хорошо, то скиньте пж видео работы)))

// примеры для ws2812b
//Arduino UNO

#include "Adafruit_NeoPixel.h"

#define line_ 256 //число пикселей в ленте
uint8_t dataPin = 6;// вывод для подключения
Adafruit_NeoPixel strip = Adafruit_NeoPixel(line_, dataPin, NEO_GRB + NEO_KHZ800);// Создаем переменную strip для управления нашей лентой.

byte M = 2;//мощность свечения

// 1   2   3   4   5   6    7   8   9  10  11  12  13  14  15  16
byte massiv_per[16][16] = {
    {207, 199, 71, 79, 251, 243, 115, 123, 184, 176, 48, 56, 140, 132, 4, 12}, //1
    {223, 215, 87, 95, 250, 242, 114, 122, 168, 160, 32, 40, 141, 133, 5, 13}, //2
    {206, 198, 70, 78, 235, 227, 99, 107, 185, 177, 49, 57, 156, 148, 20, 28}, //3
    {205, 197, 69, 77, 219, 211, 83, 91, 186, 178, 50, 58, 172, 164, 36, 44}, //4
    {222, 214, 86, 94, 234, 226, 98, 106, 169, 161, 33, 41, 157, 149, 21, 29}, //5
    {239, 231, 103, 111, 249, 241, 113, 121, 152, 144, 16, 24, 142, 134, 6, 14}, //6
    {255, 248, 119, 127, 247, 240, 112, 120, 136, 128, 0, 8, 143, 135, 7, 15}, //7
    {238, 230, 102, 110, 233, 225, 97, 105, 153, 145, 17, 25, 158, 150, 22, 30}, //8
    {221, 213, 85, 93, 218, 210, 82, 90, 170, 162, 34, 42, 173, 165, 37, 45}, //9
    {204, 196, 68, 76, 203, 195, 67, 75, 187, 179, 51, 59, 188, 180, 52, 60}, //10
    {220, 212, 84, 92, 202, 194, 66, 74, 171, 163, 35, 43, 189, 181, 53, 61}, //11
    {237, 229, 101, 109, 217, 209, 81, 89, 154, 146, 18, 26, 174, 166, 38, 46}, //12
    {254, 246, 118, 126, 232, 224, 96, 104, 137, 129, 1, 9, 159, 151, 23, 31}, //13
    {253, 245, 117, 125, 216, 208, 80, 88, 138, 130, 2, 10, 175, 167, 39, 47}, //14
    {236, 228, 100, 108, 201, 193, 65, 73, 155, 147, 19, 27, 190, 182, 54, 62}, //15
    {252, 244, 116, 124, 200, 192, 64, 72, 139, 131, 3, 11, 191, 183, 55, 63}  //16
};

byte massiv_kolzo[16] = {2, 2, 2, 2, 0, 0, 0, 0, 6, 6, 5, 6, 0, 0, 0, 0};// начальный набор цветов
///RGB
void setup() { strip.begin(); }

void loop() {
for (int i = 0; i < 16; i++) { gruppa(i, massiv_kolzo[i]); }
strip.show(); delay(200); kolzo();
if (millis() % 5 == 0) {
massiv_kolzo[0] = random(0, 8);
M = random(1, 255); }// Изменение яркости случайным образом
if (millis() % 5 == 1) { massiv_kolzo[0] = 0; }
}

void gruppa(byte n, byte cv) {
for (int in = 0; in < 16; in++) {
strip.setPixelColor(massiv_per[n][in], (cv % 2) * M, ((cv / 2) % 2) * M, ((cv / 4) % 2) * M); }
}

void kolzo() {
byte V = 0;
for (int in = 0; in < 16; in++) {
if (in != 0 && in != 15) { massiv_kolzo[in] = massiv_kolzo[in + 1]; }
if (in == 0) { V = massiv_kolzo[in]; massiv_kolzo[0] = massiv_kolzo[1]; }
if (in == 15) { massiv_kolzo[in] = V;}
}
}

код писал ИИ!)))

В гладкой, ровной поверхности двух склеиваемых плат.

Он не даёт “нулевой” толщины между скреплёнными платами, не позволяет многократно перезакреплять платы или крепить неразборно.

1 лайк

Оно не поможет, узоры псевдослучайны. Если 8х8 сделали по подобию, то отрезаем мысленно визуально четверть и сравниваем со своим вариантом.
ролик 2

Вот ещё вариант:

Спойлер
/////////////////////////////////////
// примеры для ws2812b
//Arduino UNO

#include "Adafruit_NeoPixel.h"

#define line_ 256 //число пикселей в ленте
uint8_t dataPin = 6;// вывод для подключения
Adafruit_NeoPixel strip = Adafruit_NeoPixel(line_, dataPin , NEO_GRB + NEO_KHZ800); // Создаем переменную strip для управления нашей лентой.

byte M = 2; //мощность свечения


byte massiv_per2[4][64] = {{120, 121, 137, 153, 169, 168, 167, 166, 165, 164, 148, 132, 116, 100, 84, 68, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 77, 93, 109, 125, 141, 157, 173, 189, 205, 221, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 208, 192, 176, 160, 144, 128, 112, 96, 80, 64, 48, 32, 16, 0}, //1
  {135, 134, 118, 102, 86, 87, 88, 89, 90, 91, 107, 123, 139, 155, 171, 187, 203, 202, 201, 200, 199, 198, 197, 196, 195, 194, 178, 162, 146, 130, 114, 98, 82, 66, 50, 34, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 47, 63, 79, 95, 111, 127, 143, 159, 175, 191, 207, 223, 239, 255}, //2
  {136, 152, 151, 150, 149, 133, 117, 101, 85, 69, 70, 71, 72, 73, 74, 75, 76, 92, 108, 124, 140, 156, 172, 188, 204, 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 193, 177, 161, 145, 129, 113, 97, 81, 65, 49, 33, 17, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, //3
  {119, 103, 104, 105, 106, 122, 138, 154, 170, 186, 185, 184, 183, 182, 181, 180, 179, 163, 147, 131, 115, 99, 83, 67, 51, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 62, 78, 94, 110, 126, 142, 158, 174, 190, 206, 222, 238, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240}, //4

};
byte massiv_kolzo2[64] = {0, 0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 5, 5, 5, 5, 7, 7, 7, 7, 0, 0, 0, 0, 6, 6, 6, 6, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5, 5, 0, 0, 0, 0}; // начальный набор цветов фрагмента
///RGB
void setup() {
  strip.begin();

}
void loop() {
  for (int i = 0; i < 64; i++) {
    gruppa2(i, massiv_kolzo2[i]);
  }
  strip.show();
  delay(75);//быстрота смены узора
  kolzo2();
  if (millis() % 5 == 0) {
    massiv_kolzo2[0] = random(0, 8);
  }
  if (millis() % 5 == 1) {
    massiv_kolzo2[0] = 0;
  }
}
/////////////////////////////////////
void gruppa2(byte n, byte cv) {
  for (int in = 0; in < 4; in++) {
    strip.setPixelColor(massiv_per2[in][n], (cv % 2)*M, ((cv / 2) % 2)*M , ((cv / 4) % 2)*M );
  }
  //strip.show();
}
/////////////////////////////////////
void kolzo2() {
  byte V = 0;
  for (int in = 0; in < 64; in++) {
    if (in != 0 && in != 63) {
      massiv_kolzo2[in] = massiv_kolzo2[in + 1];
    }
    if (in == 0) {
      V = massiv_kolzo2[in];
      massiv_kolzo2[0] = massiv_kolzo2[1];
    }
    if (in == 63) {
      massiv_kolzo2[in] = V;
    }
  }
}
/////////////////////////////////////

0122
Этот будет работать только на 16х16, потому что базовый фрагмент не квадрат или треугольник, а спираль.