ARDUINO Крутая гирлянда на ёлку. Обсуждение проекта

Сотнег

★★★★★★★
15 Янв 2020
4,388
1,504
@MTK,
что-то я поторопился...
Просто сдвинуть номер на 50+ не получится.
Придётся ещё декларировать #define NUM_LEDS 50+
и, если ещё где-то вылезет проблема, спрашивайте.
 
  • Лойс +1
Реакции: MTK

MTK

✩✩✩✩✩✩✩
19 Дек 2021
14
7
@Сотнег, Вас сбило слово маппинг. Речь не о лампе, а о гирлянде на елку, в ней нет функции XY, даже слово return не встречается. Скетч notamesh4_gyver_v1.1
 

poty

★★★★★★✩
19 Фев 2020
3,237
942
@MTK,
диоды прошиты по номерам и не взаимозаменяемые
не говорите ерунды! Скетч из проекта не использует адресации диодов, так что если он не изменялся, то ничего адресовать и не будет. Исходя из присланного видео я уверен, что в скетче что-то менялось (код или неверно изменены настройки). Загрузите пример First Light из примеров FastLED без изменений (только укажите количество диодов в строке 15 и номер пина, к которому подключено, в строке 21) и попробуйте с ним. Уверен, что будет всё ОК.
в гирлянде управляющий провод прозванивается тестером от начала до конца
Точно прозванивали управляющий провод? На отключенной ленте? Он там, насколько я помню, не центральный, как можно было бы ожидать. Прозвон, допустим, управляющего провода на один из питающих будет давать положительный результат в одну сторону, а если лента подключена, то, скорее всего, в две. Неправильная припайка гирлянды ко второму контролеру (что за контроллер, кстати, забыли указать? как в проекте?) может приводить к разным дурацким последствиям.
картинка сростков гирлянды
вообще ни о чём - нужно сфотографировать расправленный нетронутый участок и участок с пайкой, тоже расправленный. Нужно сфотографировать как это подключено у вас к Ардуино, включая разъём и провода от ответной части разъёма.
 

Сотнег

★★★★★★★
15 Янв 2020
4,388
1,504
@MTK,
в таком случае централизованного места для сдвига адресации светодиодов в прошивке нет.
Его придётся в каждый эффект вкорячивать.
Или в библиотеку FastLED влезть.
 

MTK

✩✩✩✩✩✩✩
19 Дек 2021
14
7
@poty, понимаю, я сам не поверил.
Один и тот же контроллер, разные гирлянды с ним работают нормально. Но та, которая из второго куска от 100шт, загорается при зажигании номеров 50-99, хотя всего в линии 50 диодов. Пробовал на 328 нано и мини-про, дело именно в гирлянде.
Линия зеленого (управляющего) провода звонится насквозь в обе стороны на отключенной гирлянде. Осциллограф на конце гирлянды показывает тот же набор пачек импульсов, что и на входе. Не знаю, как еще объяснить.
Пример First Light я использовал, даже доработал его, чтобы каждый десяток загорался своим цветом и в порт сбрасывал текущий номер.
Моя версия - контрафактные чипы. Они не регенерируют сигнал, все висят на общей линии и ловят каждый свою пачку по номеру. С точки зрения контроллера и прошивки ничего не меняется. Просто кусок ленты не видит номера 0-49, а управляется от номеров 50-99. Показательно, что продавец не спорил, согласился выслать новую гирлянду.
Буду пытаться всунуть одномерный маппинг сразу в сетап. Библиотеку не хотелось трогать.
 
  • Лойс +1
Реакции: markovivan

Divin

★★★✩✩✩✩
30 Янв 2021
438
192

@MTK,
А ведь было нечто подобное у других на аналогичной ленте, сам недавно получил схожую, на 50 диодов, но там 4 провода, хотя один не подключен, а сами диоды залиты смолой фиг разглядишь.
 

MTK

✩✩✩✩✩✩✩
19 Дек 2021
14
7
Сделал нужный костыль на основе FirstLight для проверки идеи.
Удалось сместить адресацию и исправить последовательность включения на бракованной гирлянде из сростков.
FirstLight_modified.ino:
#include <FastLED.h>

// How many leds are in the strip?
#define NUM_LEDS 50 // физическое кол-во диодов
#define NUM_LEDS_MAX 100 // максимальное пространство адресов


#define DATA_PIN 6

// This is an array of leds.  One item for each led in your strip.
CRGB leds[NUM_LEDS];  // физическое кол-во диодов
CRGB leds_max[NUM_LEDS_MAX]; // максимальное пространство адресов

const uint8_t XYTable[] = {
50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 88, 89, 90, 91, 92,
93, 94, 95, 96, 97, 85, 86, 87, 98, 99
};


void setup() {
delay(2000);
Serial.begin(9600);
FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds_max, NUM_LEDS_MAX);  // GRB ordering is typical
}

void loop() {
   // Move a single led
   for(int whiteLed = 0; whiteLed < NUM_LEDS; whiteLed = whiteLed + 1) {
      // Turn our current led on, then show the leds

if (whiteLed < 10) { leds[whiteLed] = CRGB::Yellow; }
else if (whiteLed < 20) { leds[whiteLed] = CRGB::Green; }
else if (whiteLed < 30) { leds[whiteLed] = CRGB::Purple; }
else if (whiteLed < 40) { leds[whiteLed] = CRGB::Blue; }
else if (whiteLed < 49) { leds[whiteLed] = CRGB::Gray; }
else if (whiteLed == 49) { leds[whiteLed] = CRGB::Green; }
else if (whiteLed < 99) { leds[whiteLed] = CRGB::Red; }
else if (whiteLed == 99) { leds[whiteLed] = CRGB::White; }

Serial.println(String(whiteLed) + " " + String(XYTable[whiteLed]));

  for(int nLed = 0; nLed < NUM_LEDS; nLed = nLed + 1) {
leds_max[XYTable[nLed]] = leds[nLed]; // Маппинг адреса  
   }

      // Show the leds
      FastLED.show();

      // Wait a little bit
      delay(800);

      // Turn our current led back to black for the next loop around
      leds[whiteLed] = CRGB::Black;
   }
}
 
Изменено:

poty

★★★★★★✩
19 Фев 2020
3,237
942
@MTK, в адресной ленте нет никаких номеров. Если звонится именно управляющая линия, то это - не WS2812. Не исключаю, что есть ещё какие то адресные ленты, но вряд ли они так легко совместимы с WS2812 по протоколу. Т.е., я предполагаю всё же, что есть какая-то проблема.
Пример First Light я использовал, даже доработал его
Не нужно дорабатывать - запустите его в первоначальном виде на своей гирлянде и посмотрите результат. Доработка - место ошибок, только и всего.
зачем столько телодвижений? Вы же всё равно, как говорите, не видите первых 50 светодиодов, так объявите пустой массив из 50 светодиодов, а непосредственно за ним тот, что Вы будете заполнять. FastLED-у скормите адрес первого массива с суммарным размером двух массивов. Всё, никаких "маппингов" и прочей ерунды.
C++:
#include <FastLED.h>

#define NUM_LEDS         50             // физическое кол-во диодов
#define NUM_HIDDEN        50            // невидимое количество светодиодов
#define NUM_LEDS_MAX      NUM_LEDS+NUM_HIDDEN

#define DATA_PIN 6

CRGB leds_max[NUM_HIDDEN];            // максимальное пространство адресов
CRGB leds[NUM_LEDS];                  // физическое кол-во диодов
CRGB mycolors[] = {CRGB::Yellow, CRGB::Green, CRGB::Purple, CRGB::Blue, CRGB::Gray};

void setup() {
    delay(2000);
    Serial.begin(9600);
    FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds_max, NUM_LEDS_MAX);  // GRB ordering is typical
}

void loop() {
    for(int flis=0, ns=0; flis < NUM_LEDS; flis+=10, ns++) {
        for (byte nlis=0; nlis < 10; nlis++) {
            leds[flis+nlis] = mycolors[ns];
            FastLED.show();
            delay(800);
            leds[flis+nlis] = CRGB::Black;
        }
   }
}
 
Изменено:

Tolk

✩✩✩✩✩✩✩
20 Дек 2021
1
0
Подскажите как подключать дополнительное питание и нужно ли оно? На каждой ленте есть дополнительные провода, но непонятно от куда туда вести питание и с какой периодичностью. Никто и нигде про это не говорится, я взял 5 лент по 50 диодов, подключил их через разъемы зигзагом, на ESP8266 закачал прошивку, прошло без ошибок. При подключении блок 5v3A сгорел через секунд 5, гирлянду не успел даже проверить, взял готовый контроллер SP108E, который рассчитан как раз для WS2812B, подключил к нему 3 ленты загзагом и взял другой БП на 2.55A, в итоге одна лента не работает, на другой работает 2 диода из 50, на третьей 9 из 50. Я уже замучился просто, что еще не так?
 

Вложения

  • 191.5 KB Просмотры: 24
  • 94.6 KB Просмотры: 25
  • 91.2 KB Просмотры: 24
  • 60.9 KB Просмотры: 21
  • 76.4 KB Просмотры: 20

MTK

✩✩✩✩✩✩✩
19 Дек 2021
14
7
@poty, Спасибо за потраченное время. ваш код красивый, но нерабочий.
Залил без изменений, вот результат - линк
Горят только первые 13 (кроме 9). 1 и 5 меняют цвета в такт, остальные фиксированы.
Там хомут во вложенном цикле. Но да, исправить - и заработает.

никаких "маппингов" и прочей ерунды
Если нужен просто сдвиг, то да. Но мне еще нужно было переставить местами часть диодов, чтобы исправить последовательность включения. Гирлянда с 3 сростками, перепутанными по порядку. С маппингом это получилось, см. мою карту маппинга, там номера не по порядку.

в адресной ленте нет никаких номеров
Тоже так думал, оказалось, это не так именно с моей гирляндой. Натыкался на отзывы, что людям приходилось выбрасывать рулонами новую ленту. Только потому, что не проверили сразу, а потом оказалось, что часть диодов или все не горят. Данный опыт мог бы помочь, потому и написал. Если адреса диодов за пределами сконфигурированных, то они не будут гореть.
Обычно номером является порядковый номер в цепочке, считая от контроллера. Каждый диод обрезает первую пачку 24 бита и передает дальше регенерированный кусок.
В моем случае все диоды видят все пачки импульсов, все сидят на одном управляющем проводе, но каждый реагирует только на свой порядковый номер пачки. Если пачки с таким номером нет, он просто не светит.
Возможно, это даже штатный режим, просто малоизвестный и резко используемый. По аналогии с высоковольтным программатором для прошивки фьюзов или загрузчика в камень. Понятно даже зачем это нужно. Главный недостаток штатного режима: если сгорел один диод, вся цепочка за ним гаснет. В данном случае, все диоды, кроме сгоревшего, работают независимо и продолжат работу.
Но это уже моя фантазия, возможно просто контрафактные чипы. Возможно их миллиарды наштамповано. Китайцы лепят весь мусор в гирлянды и продают (не удивлен). Я бы и не заметил подвох, если бы не разрезал ленту. И если бы в ней не было перепутанных фрагментов.
Еще раз, целая лента загорается всеми диодами, управляется нормально.
Если хотите, могу отрезать от гирлянды последний диод (от нее не убудет). И прислать Вам в качестве сувенира. У него будет адрес 99. Чтобы им управлять, нужно создать массив из 100 диодов и обращаться к последнему элементу. Если интересно, жду адрес в личку.
Или могу дать ссылку на товар продавца. Можно его затроллить, включая счетч с ломаным бегущим огнем из моего примера на видео и требовать новую гирлянду. Но я так не буду делать, он ответил сразу и выслал замену. Может это малолетние уйгуры в концлагере паяют гирлянды с утра до вечера и переставляя диоды местами сообщают миру о себе. (грустная шутка, которая может быть правдой).
Хотя, они продают явно левый товар, много людей могло попасться и списать все на наводки, блоки питания, свои кривые руки. Вижу, я первый, кто докопался.
 
  • Лойс +1
Реакции: markovivan

Сотнег

★★★★★★★
15 Янв 2020
4,388
1,504
@Tolk,
если мощности блока питания не хватает, тогда нужно наращивать мощность.

Дополнительные контакты 5V и G на ленте - это когда напряжение проседает на них.
Просто напрямую от бока питания можно подвести по удобному для вас маршруту.
 

poty

★★★★★★✩
19 Фев 2020
3,237
942
исправил.
Объяснительная идея красивая, но, похоже, далека от правды. Я не исключаю, что есть тип ленты с параллельным включением, но тогда должен быть и способ их программировать конкретный светодиод на порядковый номер. Фактически, без этого производство теряет всякий смысл.
При параллельном включении также очевидным решением является прямая передача адреса светодиода, который должен зажечься, чего, похоже, нет. Защита от выхода из строя одного светодиода есть и в последовательных лентах (с 4 проводами).
 

MTK

✩✩✩✩✩✩✩
19 Дек 2021
14
7
@poty,
Почти без изменений, 13 светят (кроме №9), 1, 3 и 5 меняют цвет.
Можно не заморачиваться с исправлением, спасибо.
Что хотел я получил, спасибо @Сотнег, за идею подсмотреть, как это сделано в Гайвер-лампе.
Думаю, смогу натянуть натянуть принцип на рабочую прошивку.
Что за чудо прислали китайцы неясно. Может был крупный спецзаказ типа на олимпиаду в Корее, осталось в мусорке куча нестандартных кристаллов.
Или просто один из вариантов кривого копирования или попытки что-то сделать. Факт, что такое бывает и с этим можно жить теперь.
Я бы не смог спокойно пить кофе, наблюдая сломанные эффекты в гирлянде на окне :)
 

FeanaR

✩✩✩✩✩✩✩
20 Дек 2021
2
0
Господа! Имею желание собрать гирлянду на WS2812 ленте, засунув по три светодиода в напечатанные из прозрачного пластика корпуса. Подкиньте идею как максимально быстро и просто заставить светодиоды гореть группами по три штуки? Пока в голову пришло только перед вызовом Fastled.Show пройтись по массиву и переназначить цвета... Но при таком простом подходе, боюсь, потеряется плавность градиента (если оно в каком-то эффекте используется, а такое было, ЕМНИП). Может быть кто-нибудь посоветует вариант изящнее? Заказал ленту WS2811, но боюсь что до НГ не успеет прийти.
 

MTK

✩✩✩✩✩✩✩
19 Дек 2021
14
7
@FeanaR,

заставить светодиоды гореть группами по три штуки
Спаять входы DIN всех 3 диодов в коробочке параллельно. Тогда они будут работать синхронно, как один светодиод. В прошивке ничего не менять, кол-во диодов сделать равным числу коробочек.
DOUT забирать от одного (любого из 3)
 
  • Лойс +1
Реакции: FeanaR

FeanaR

✩✩✩✩✩✩✩
20 Дек 2021
2
0
@Сотнег, для яркости. Фигурки хоть и из прозрачного пластика, но не идеально прозрачные.

@MTK, интересное решение, попробую. Спасибо!
 

VVViktorv

✩✩✩✩✩✩✩
22 Дек 2021
2
0
@MTK, день добрый. Столкнулся с такой же проблемой как и вы. По поводу ленты. Только у меня немного другие, но тоже залиты. Обидно то, что лично я заказывал с сайта Гувера, и по этой же ссылке в прошлом году были не герметичные. И все таки, я не могу понять. В прошивке для гирлянды, на сколько я понимаю, нет чёткого обращения к конкретному порядковому номеру светодиода. Как же тогда так получается?
 

MTK

✩✩✩✩✩✩✩
19 Дек 2021
14
7
@VVViktorv,
прошивке для гирлянды, на сколько я понимаю, нет чёткого обращения к конкретному порядковому номеру светодиода
Как раз есть четкое обращение по номерам, на этом и основана работа с адресными светодиодами. Создается массив leds и все эффекты назначают элементам этого массива свои цвета и яркость, каждому свое. Опишите, в чем у вас проблема. Если гирлянду не резали, то она должна нормально работать со стандартной прошивкой. Если разрезали или есть перепутанные куски, то могу прислать свой доработанный код для работы с такими кусками. У меня он работает, то есть именно эта проблема исправлена.
 

VVViktorv

✩✩✩✩✩✩✩
22 Дек 2021
2
0
@MTK, у меня немного другой прэкт, гирлянда на окно. Сюда залез только потому, что увидел схожую проблему с герметичными светодиодами.
А если коротко о проблеме то проблема такая. Купил две ленты по 10 метров, в каждой по 100 светиков. Первая идет целиком, вторая половинится по 5 метров. К первой ленте добавляем первые 5 метров от второй ленты (получаем 15 метров общей длины). Итог: лента отрабатывает так, что 101-150 пиксель дублирует 1-50 (напомню, добавил первые 5 метров от второй ленты). Меняю 5 метровый отрезок на другой (вторые 5 метров от второй ленты). Итог: теперь 101-150 пиксель дублирует 51-100. Как то так.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Мда... deer friends (не dear) китайские могут подсунуть нежданную подлянку. Один случай это случайность, но три - система. Сочувствую тем кто на граблю наступил. В общем случае проблема тяжело решаема на ESP8266, т.к. для использования кусков с одинаковыми номерами диодов видимо необходимо разносить по разным каналам и использовать ESP32, но это нужно править код, проводить отладку, проверку... Короче не то, чем есть желание заниматься за неделю до нового года. Это я уже молчу про то, что далеко не все прошивки поддерживают ESP32 и далеко не каждый сможет сделать соответствующие модификации прошивок.
 

MTK

✩✩✩✩✩✩✩
19 Дек 2021
14
7
Проверил гирлянды от другого продавца - там все нормально, управляющий провод не прозванивается насквозь и все работает так, как в теории.

Вот ссылка того, что хорошее. Брал 10м, пришло 2 по 5м. В антистатических пакетах с молниями, разъемы с двух концов (папа-мама) для наращивания длины.

Вот ссылка того, что с "граблями". Брал 10м, пришло 1 куском 10м с 1 разъемом. В смятой коробочке из жиденького картона. Для 1 гирлянды работает как обычно. При разрезании с танцами и бубном можно использовать. Для соединения в более сложные проекты нескольких гирлянд не годится.
 
  • Лойс +1
Реакции: markovivan

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@MTK, Вот такие: https://aliexpress.ru/item/33044727740.html 100% вариант, пару лет уже висит и работает :), собственно их и советую брать (единственное, что можно поглядеть где дешевле, т.к. ссылку дал первую попавшуюся).
 

Сотнег

★★★★★★★
15 Янв 2020
4,388
1,504
@kDn,
эти без изоляции светиков.
Не нужна?
В отзывах предлагают в термоусадку паковать каждый.