Так я фантазировал висюльки из обычных светодиодов заменить на адресные. Чтобы эффект в помещение шел. Есть у меня такая - 200 светодиодов на десяти линиях и проводок прозрачный. Смотрится более-менее.... Но вот адресные - все, как на подбор, - монстрообразны. Я бы даже был согласен не на полную яркость.
Я тоже что-то загорелся давеча этим 1000S, но потом почитал и притух. На led-форумах его разносят в пух и прах, типа схемотехника херовая, FPS неконтролируемо падает, только 16 программ, еще там что-то... Лучше выглядит K-1000C.
Хотя, на елку корпусированный контроллер за 1300р - это вообще сказочно.
А так-то да - свой колхоз всегда милее, даже если он просто обмотан строительным скочтем.
ну вот у нас в городе можно без проблем в том же кристал-электро купить различного размера коробочки и туда все спрятать и даже дырочек насверлить. конечно контроллер с мотком проводов это только на период отладки.
А так-то да - свой колхоз всегда милее, даже если он просто обмотан строительным скочтем.
ну вот у нас в городе можно без проблем в том же кристал-электро купить различного размера коробочки и туда все спрятать и даже дырочек насверлить. конечно контроллер с мотком проводов это только на период отладки.
В такую и засунул. Вместе с энкодерами, питателем и IR. Уже две реконструкции произвел. Поэтому знаю, о чем говорю ))
Елку делал в прошлом году - 10 метеоров на WS2812 и звезда большая. Контроллер ставил ESP8266. Но пришлось бить все это на сегменты и писать программу для каждого сегментами этакими сценариями
Все таки для больших проектов нормальные контроллеры, где эффекты можно создавать с помощью специальных программ - это сила
Учитывается ли в чипе компенсация визуальной силы какого-либо "цвета" (красный ярче синего при равных условиях) - сложно сказать, в даташите я что-то не нашёл такого (хотя сильно и не вчитывался).
это - gamma. Не учитывается. Люди отдельные массивы пишут. Но все равно на 2812 оно корявое.
могу вам точно сказать, повторившись, что корпусированный контроллер за 1300р - это сказочно ))
Если достаточно китайских эффектов "абы блымало" - то соглашусь. А если кастомное и с громадными возможностями, то есть более изящные решения, которые в разы функциональней. Если себе собрать парочку, наверно на 1300 и выйдет. Это взять модули готовые, заказать обвязочную плату, напаять чуток деталюшек, ну и залить прошивку. Да, возможно нужен будет и корпусок и так далее. Если переводить каждую свою минуту в бабло, как тут принято иногда - то будет дороже 1300р. Но это уже от рукастости зависит и от наличия ништяков в загашниках )
Смотреть лучше с серединки, там боль-мень симпотишные эффекты. Это я тупо переключал их подряд, чтобы хоть как-то изобразить что оно такое. Интернет плохой, снято в минимальном качестве, а потом еще и пожато. Эффекты не доигрывают и одного круга, просто для общей картинки снято.
щас без коробка висит в окне. Соседей радует. 70 см в диаметре, 200 диодов.
Кто хочет повторить - инфа в описании. Там не сложно, код не дам, потому как не допилен. Да и по сути весь код - из оригинала. Я лишь допилил массивы для увеличения количества диодов. Долго понимал логику автора, но таки понял )
Еще такое как-то делал, но оно мелкое - не интересно. Надо побольше мудрить, а мне ни к чему. Да и рассеиватели в виде сантехнической гофро-трубы не ахти как выглядят. На большой инсталляции может и будут норм.
Интернет паршивый, это вроде видео с носками вместе )) Где-то было менее корявое и с рассеивателями, но интернет поганый, лень искать куда я его засунул.
Смотреть лучше с серединки, там боль-мень симпотишные эффекты. Это я тупо переключал их подряд, чтобы хоть как-то изобразить что оно такое. Интернет плохой, снято в минимальном качестве, а потом еще и пожато. Эффекты не доигрывают и одного круга, просто для общей картинки снято.
щас без коробка висит в окне. Соседей радует. 70 см в диаметре, 200 диодов.
Кто хочет повторить - инфа в описании. Там не сложно, код не дам, потому как не допилен. Да и по сути весь код - из оригинала. Я лишь допилил массивы для увеличения количества диодов. Долго понимал логику автора, но таки понял )
ну так блин-банан - помогите допилить :D
Оно с опенсурса взято и туда же будет покладено. Мож без некоторых плюшек.
Но главный костылек - то есть исходный проект допиленный, он будет выложен. А там бери и добавляй свои эффекты, какие хошь. Сделано-то как раз под те хотелки, что выше озвучивали: вэбморда и прочее. Причем меняем только процедуры в коде, а html, java-script и прочее остаются без изменений.
Размножить туда колорпикера, чтобы была возможность свои палитры генерить и сразу видеть, разнести некоторые настройки специфические в отдельный раздел, да и еще какие-то мелочи. Вы тут сыпете порою в разы сложнее кодом просто чтобы потыкать неуча палкой! И бесплатно! А я даже компенсирую чуток денюжкой. На отдых не хватит, канеш, но и не бесплатно же! ))
Плохо, что нема спойлера. А дабы доказать, что не реклама - то вот дублирую ссыль на маньяков управляемых диодов: https://youtu.be/QpoDb3PEmn8 Не уверен, но если предположить, что там тыщ 50-70 диодов, то не сильно ошибусь.
Плохо, что нема спойлера. А дабы доказать, что не реклама - то вот дублирую ссыль на маньяков управляемых диодов: https://youtu.be/QpoDb3PEmn8 Не уверен, но если предположить, что там тыщ 50-70 диодов, то не сильно ошибусь.
Ого, очень красиво сделано, был бы у меня загородный дом, я бы точно решился бы на такой проект.
Так я фантазировал висюльки из обычных светодиодов заменить на адресные. Чтобы эффект в помещение шел. Есть у меня такая - 200 светодиодов на десяти линиях и проводок прозрачный. Смотрится более-менее.... Но вот адресные - все, как на подбор, - монстрообразны. Я бы даже был согласен не на полную яркость.
допилил я код, немного изменил эффекты. гирлянда уже на елке, единственное скорость некоторых эффектов высоковата, но у espшки один аналоговый вход.
#include "FastLED.h" unsigned long change_time = 30; // время смены режима секунд unsigned long last_change; int modes = 25; // Количество режимов int ledmode = 0; // Стартовый режим int fps = 20; // значение скорости еффектов int pos = 0; int pos1 = 0; bool part_flag = false; int color_x = 0; int BRIGHTNESS = 5; // Стартовое значение яркости #define DATA_1 1 // Определяем пин для ленты 1 #define DATA_2 3 // Определяем пин для ленты 2 #define DATA_3 5 // Определяем пин для ленты 3 #define DATA_4 4 // Определяем пин для ленты 4 #define DATA_5 0 // Определяем пин для ленты 5 #define DATA_6 2 // Определяем пин для ленты 6 //#define DATA_7 14 // Определяем пин для ленты 7 //#define DATA_8 12 // Определяем пин для ленты 8 //#define DATA_9 13 // Определяем пин для ленты 9 //#define DATA_10 15 // Определяем пин для ленты 10 #define BRIGHT_RES A0 // потенциометр яркости #define LED_TYPE WS2812B #define COLOR_ORDER GRB #define NUM_LEDS 49 #define NUM_STRIPS 6 CRGB leds[NUM_STRIPS][NUM_LEDS]; void setup() { Serial.begin(115200); // Для отладки delay(3000); FastLED.addLeds<LED_TYPE,DATA_1,COLOR_ORDER>(leds[0], NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.addLeds<LED_TYPE,DATA_2,COLOR_ORDER>(leds[1], NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.addLeds<LED_TYPE,DATA_3,COLOR_ORDER>(leds[2], NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.addLeds<LED_TYPE,DATA_4,COLOR_ORDER>(leds[3], NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.addLeds<LED_TYPE,DATA_5,COLOR_ORDER>(leds[4], NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.addLeds<LED_TYPE,DATA_6,COLOR_ORDER>(leds[5], NUM_LEDS).setCorrection(TypicalLEDStrip); // FastLED.addLeds<LED_TYPE,DATA_7,COLOR_ORDER>(leds[6], NUM_LEDS).setCorrection(TypicalLEDStrip); // FastLED.addLeds<LED_TYPE,DATA_8,COLOR_ORDER>(leds[7], NUM_LEDS).setCorrection(TypicalLEDStrip); // FastLED.addLeds<LED_TYPE,DATA_9,COLOR_ORDER>(leds[8], NUM_LEDS).setCorrection(TypicalLEDStrip); // FastLED.addLeds<LED_TYPE,DATA_10,COLOR_ORDER>(leds[9], NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(BRIGHTNESS); pinMode(BRIGHT_RES, INPUT); } uint8_t gHue = 0; // rotating "base color" used by many of the patterns void loop() { BRIGHTNESS = map(analogRead(BRIGHT_RES), 0, 985, 10, 255); FastLED.setBrightness(BRIGHTNESS); if ((millis() - last_change)/1000 > change_time) { // ledmode ++; ledmode = random(0, modes); if (ledmode > modes) ledmode = 0; Serial.println(String("Mode: ") + ledmode); last_change = millis(); } switch (ledmode) { case 0: rainbow(1, 0, 0); FastLED.show(); break; case 1: rainbow(12, 0, 0); FastLED.show(); break; case 2: rainbow(50, 0, 0); FastLED.show(); break; case 3: rainbow(1, 1, 0); FastLED.show(); break; case 4: rainbow(12, 1, 0); FastLED.show(); break; case 5: rainbow(50, 1, 0); FastLED.show(); break; case 6: rainbow(1, 0, 1); FastLED.show(); break; case 7: rainbow(1, 1, 1); FastLED.show(); break; case 8: rainbow(15, 0, 1); FastLED.show(); break; case 9: rainbow(15, 1, 1); FastLED.show(); break; case 10: rainbowWithGlitter(0); FastLED.show(); break; case 11: rainbowWithGlitter(1); FastLED.show(); break; case 12: confetti(); FastLED.show(); break; // x-------------я case 13: sinelon(); FastLED.show(); break; // вверх/вниз цвета case 14: bpm(); FastLED.show(); break; // вверх/вниз цвета больше case 15: juggle(); FastLED.show(); break; case 16: horizont_2(100); FastLED.show(); FastLED.delay(1000/fps); break; case 17: horizont_2(200); FastLED.show(); FastLED.delay(1000/fps); break; case 18: horizont_2(500); FastLED.show(); FastLED.delay(1000/fps); break; case 19: horizont_3(100); FastLED.show(); FastLED.delay(1000/fps); break; case 20: horizont_3(200); FastLED.show(); FastLED.delay(1000/fps); break; case 21: horizont_3(500); FastLED.show(); FastLED.delay(1000/fps); break; case 22: snow_1(); FastLED.show(); break; case 23: snow_2(); FastLED.show(); break; case 24: up_to_down_circle(); FastLED.show(); break; case 25: up_to_down_circle_color(); FastLED.show(); break; case 26: circular(); FastLED.show(); break; // case 27: FastLED.show(); break; // case 28: FastLED.show(); break; // case 29: FastLED.show(); break; // case 30: FastLED.show(); break; // case 31: FastLED.show(); break; // case 32: FastLED.show(); break; } // FastLED.delay(1000/fps_rezistor); EVERY_N_MILLISECONDS( 1 ) { gHue++; } // slowly cycle the "base color" through the rainbow } void rainbow(int deltahue, bool t, bool u){ for(int i=0; i < NUM_STRIPS; i++){ static uint8_t a = 0; if (u == 0) a = gHue; else a++; if (t == 0) deltahue; else deltahue++; fill_rainbow(leds[i], NUM_LEDS, a, deltahue); } } void rainbowWithGlitter(bool t){ rainbow(1, t, 0); addGlitter(80); } void addGlitter(fract8 chanceOfGlitter){ if( random8() < chanceOfGlitter) { for(int i=0; i < NUM_STRIPS; i++){ leds[i][ random16(NUM_LEDS) ] += CRGB::White; } } } void confetti(){ int pos = random16(NUM_LEDS); for(int i=0; i < NUM_STRIPS; i++){ fadeToBlackBy(leds[i], NUM_LEDS, 10); leds[i][pos] += CHSV(gHue + random8(64), 200, 255); } } void sinelon(){ int pos = beatsin16(13,0,NUM_LEDS-1); for(int i=0; i < NUM_STRIPS; i++){ fadeToBlackBy(leds[i], NUM_LEDS, 20); leds[i][pos] += CHSV(gHue, 255, 192); } } void bpm(){ uint8_t BeatsPerMinute = 62; CRGBPalette16 palette = PartyColors_p; uint8_t beat = beatsin8( BeatsPerMinute, 64, 255); for(int ii = 0; ii < NUM_LEDS; ii++) { //9948 for(int i=0; i < NUM_STRIPS; i++){ leds[i][ii] = ColorFromPalette(palette, gHue+(ii*2), beat-gHue+(ii*10)); } } } void juggle(){ for(int i=0; i < NUM_STRIPS; i++){ fadeToBlackBy( leds[i], NUM_LEDS, 20); } byte dothue = 0; for(int ii = 0; ii < 8; ii++) { for(int i=0; i < NUM_STRIPS; i++){ leds[i][beatsin16(ii+7,0,NUM_LEDS)] |= CHSV(dothue, 200, 255); } dothue += 32; } } void horizont_2(int k){ for(int i=0; i < NUM_STRIPS; i++){ fadeToBlackBy(leds[i], NUM_LEDS, k); } if(pos1 > NUM_STRIPS-1) {pos1 = 0; color_x = color_x+1;} if(color_x > 3) color_x = 0; CRGB color[] = {CRGB(255, 0, 0), CRGB(0, 255, 0), CRGB(0, 0, 255), CRGB(255, 255, 255), CRGB(255, 0, 255), CRGB(0, 255, 255), CRGB(255, 255, 0), CRGB(255, 150, 150)}; for (int i=0; i <= NUM_LEDS-1; i++){ leds[pos1][i] = color[color_x]; } pos1 = pos1+1; } void horizont_3(int k){ for(int i=0; i < NUM_STRIPS; i++){ fadeToBlackBy(leds[i], NUM_LEDS, k); } if(pos1 > NUM_STRIPS-1) pos1 = 0; for (int i=0; i <= NUM_LEDS-1; i++){ leds[pos1][i] = CHSV( gHue, 255, 192); } pos1 = pos1+1; } void snow_1(){ if(pos1 > NUM_LEDS*2-1) pos1 = 0; for(int i=0; i < NUM_STRIPS; i++){ fadeToBlackBy(leds[i], NUM_LEDS, 50); } for(int i=0; i < NUM_STRIPS; i++){ leds[i][NUM_LEDS-pos1/2-1] = CRGB(255, 255, 255); } pos1 = pos1+1; } struct snow_line{ // объявляем структуру для ленты снега byte pos; long end_time; int start_delay; } type; snow_line snow_2_vars[NUM_STRIPS]; void snow_2(){ for(int i=0; i < NUM_STRIPS; i++){ fadeToBlackBy(leds[i], NUM_LEDS, 40); } for(byte i=0; i < NUM_STRIPS; i++){ if(snow_2_vars[i].pos > NUM_LEDS*2-1){ // Если дошли до конца ленты то... snow_2_vars[i].pos = 0; // Сбрасываем позицию на ноль snow_2_vars[i].end_time = millis(); // Записываем время окончания эффекта } if(snow_2_vars[i].pos == 0){ // Если задана нулевая позиция - значит начало, то... snow_2_vars[i].start_delay = random(10, 3000); // Генерируем врменную задержку запуска эффекта (до 3х секунд) } if(millis() > snow_2_vars[i].end_time+snow_2_vars[i].start_delay){ // Если вышла задержка перед запуском эффекта, запускаем... leds[i][NUM_LEDS-snow_2_vars[i].pos/2-1] = CRGB(255, 255, 200); if(NUM_LEDS-snow_2_vars[i].pos/2-1 > 0 && NUM_LEDS-snow_2_vars[i].pos/2-1 < NUM_LEDS){ leds[i][NUM_LEDS-snow_2_vars[i].pos/2-2] = CRGB(20, 20, 20); } snow_2_vars[i].pos++; } } } void up_to_down_circle(){ if(!part_flag){ if(pos < pos1){ pos = NUM_LEDS-1; pos1++; } if(pos1 > NUM_LEDS-1){ /*pos1 = 0*/; part_flag = !part_flag; } for(int i=0; i < NUM_STRIPS; i++){ for(int n=NUM_LEDS-1; n >= pos1; n--){ leds[i][n] = CRGB( 0, 0, 0); // гасим всё кроме собранных внизу } //fadeToBlackBy( leds[i], NUM_LEDS, 30); } for (int strip=0; strip < NUM_STRIPS; strip++){ // leds[strip][pos] = CHSV( gHue, 255, 255); leds[strip][pos] = CRGB(200, 150, 50); } pos = pos-1; } else { if(pos == 23 && pos1 == 25){pos = 0; pos1 = 24;} // Если старт этой части эффекта, то перезадаём позиции for(int i=0; i < NUM_STRIPS; i++){ for(int n = 0; n < NUM_LEDS-1-pos1; n++){ leds[i][n] = CRGB(0, 0, 0); // гасим всё кроме собранных ВВЕРХУ //Serial.println(n); //delay(100); } } for (int strip=0; strip < NUM_STRIPS; strip++){ leds[strip][pos] = CRGB(200, 150, 50); } pos--; if(pos < 0){ pos = NUM_LEDS-1-pos1; pos1--; } if(pos1 <= 0) {part_flag = !part_flag; pos1 = 1; pos = -1;} } } void up_to_down_circle_color(){ if(!part_flag){ if(pos < pos1){ pos = NUM_LEDS-1; pos1++; } if(pos1 > NUM_LEDS-1){ /*pos1 = 0*/; part_flag = !part_flag; } for(int i=0; i < NUM_STRIPS; i++){ for(int n=NUM_LEDS-1; n >= pos1; n--){ leds[i][n] = CRGB(0, 0, 0); // гасим всё кроме собранных внизу } //fadeToBlackBy( leds[i], NUM_LEDS, 30); } for (int strip=0; strip < NUM_STRIPS; strip++){ leds[strip][pos] = CHSV(gHue, 255, 255); // leds[strip][pos] = CHSV(random8(), random8(), random8()); } pos = pos-1; } else { if(pos == 23 && pos1 == 25){pos = 0; pos1 = 24;} // Если старт этой части эффекта, то перезадаём позиции for(int i=0; i < NUM_STRIPS; i++){ for(int n = 0; n < NUM_LEDS-1-pos1; n++){ leds[i][n] = CRGB(0, 0, 0); // гасим всё кроме собранных ВВЕРХУ //Serial.println(n); //delay(100); } } for (int strip=0; strip < NUM_STRIPS; strip++){ leds[strip][pos] = CHSV(random(0, 256), 255, 255); } pos--; if(pos < 0){ pos = NUM_LEDS-1-pos1; pos1--; } if(pos1 <= 0) {part_flag = !part_flag; pos1 = 1; pos = -1;} } } void circular() { for (int i = 0; i < NUM_STRIPS; i++) { fadeToBlackBy(leds[i], NUM_LEDS, 100); } if (pos1 > NUM_LEDS - 1) { pos1 = 0; color_x = color_x + 1; } if (color_x > 3) color_x = 0; CRGB color[] = {CRGB(255, 0, 0), CRGB(0, 255, 0), CRGB(0, 0, 255), CRGB(255, 255, 255), CRGB(255, 0, 255), CRGB(0, 255, 255), CRGB(255, 255, 0), CRGB(255, 150, 150) }; for (int i = 0; i <= NUM_STRIPS - 1; i++) { leds[i][pos1] = color[color_x]; delay(5); FastLED.show(); } pos1 = pos1 + 1; }Ну вы Ёлку нам покажите с гирляндой, спасибо за код. Желательно видео.
понравилось очень, вот такое решение https://youtu.be/7VZa0Lcj97M сама идея. На Ардуинке собрано похожее https://youtu.be/_d43bXjtRsk
Я тоже что-то загорелся давеча этим 1000S, но потом почитал и притух. На led-форумах его разносят в пух и прах, типа схемотехника херовая, FPS неконтролируемо падает, только 16 программ, еще там что-то... Лучше выглядит K-1000C.
Хотя, на елку корпусированный контроллер за 1300р - это вообще сказочно.
Хотя, на елку корпусированный контроллер за 1300р - это вообще сказочно.
на ёлку вполне справится arduino или esp.
Вот моя леджия: ардуино + glediator + лоджия https://youtu.be/Dlhg67HnLFw
Хотя, на елку корпусированный контроллер за 1300р - это вообще сказочно.
на ёлку вполне справится arduino или esp.
Я четвертый год на проминьке кручу фонарики и могу вам точно сказать, повторившись, что корпусированный контроллер за 1300р - это сказочно ))
А так-то да - свой колхоз всегда милее, даже если он просто обмотан строительным скочтем.
Вот ссылки на видео, пока что 6 гирлянд, ещё 4 добавлю когда лента придет, все режимы не снимал...
https://yadi.sk/i/ilNfFziVmPV57Q
https://yadi.sk/i/PYnarbnkWYWJFA
https://yadi.sk/i/xeJ3CJSQkDgONQ
Вот на столе, питание с блока питания ПК, родные провода выпаял, запаяли свои, зелёный сразу на черный.
https://yadi.sk/i/Mxro4ugesQNeiw
А так-то да - свой колхоз всегда милее, даже если он просто обмотан строительным скочтем.
ну вот у нас в городе можно без проблем в том же кристал-электро купить различного размера коробочки и туда все спрятать и даже дырочек насверлить. конечно контроллер с мотком проводов это только на период отладки.
я вот тоже буду питать с БП компа, думаю сделать управление БП с ардуины, да и запитать сам контроллер можно от дежурного питалова БП.
Тоже так думал, но пока так, времени не хватило, хотел ещё вебинтерфейс для смены режимов, регулировки скорости и яркости
А так-то да - свой колхоз всегда милее, даже если он просто обмотан строительным скочтем.
ну вот у нас в городе можно без проблем в том же кристал-электро купить различного размера коробочки и туда все спрятать и даже дырочек насверлить. конечно контроллер с мотком проводов это только на период отладки.
В такую и засунул. Вместе с энкодерами, питателем и IR. Уже две реконструкции произвел. Поэтому знаю, о чем говорю ))
эх, 3d принтер уже надо покупать, чтоб корпуса печатать.
красивая ёлка получилась.
По крайней мере сын доволен)
А сколькими ws2812b esp8266 способна управлять, думаю заменить Arduino mega на esp8266.
Точно не помню, но вроде 512 на канал
я использую 600 диодов, для этого использую Mega2650, но esp8266 производительней ведь.
А я все елачками балуюсь. Наделал на подарки таких.
3 батарейки AAA и конроллер Attiny85
https://youtu.be/V-u19rA-D9Y
Елку делал в прошлом году - 10 метеоров на WS2812 и звезда большая. Контроллер ставил ESP8266. Но пришлось бить все это на сегменты и писать программу для каждого сегментами этакими сценариями
Все таки для больших проектов нормальные контроллеры, где эффекты можно создавать с помощью специальных программ - это сила
Я тут на медне доделал под себя погодную тучу. Типа погоду показывает . И переделал скетч ring clock , на 60 или 120 лампочек.
Как показывает, откеда данные берет?
Время берет с гугла. Вот ссылка одним словом (не маё) https://www.youtube.com/watch?v=5c7LYEAVJHg
Учитывается ли в чипе компенсация визуальной силы какого-либо "цвета" (красный ярче синего при равных условиях) - сложно сказать, в даташите я что-то не нашёл такого (хотя сильно и не вчитывался).
это - gamma. Не учитывается. Люди отдельные массивы пишут. Но все равно на 2812 оно корявое.
Если достаточно китайских эффектов "абы блымало" - то соглашусь. А если кастомное и с громадными возможностями, то есть более изящные решения, которые в разы функциональней. Если себе собрать парочку, наверно на 1300 и выйдет. Это взять модули готовые, заказать обвязочную плату, напаять чуток деталюшек, ну и залить прошивку. Да, возможно нужен будет и корпусок и так далее. Если переводить каждую свою минуту в бабло, как тут принято иногда - то будет дороже 1300р. Но это уже от рукастости зависит и от наличия ништяков в загашниках )
а коли пошла пъянка меряться пипирками, то вот шо у меня есть:
https://www.youtube.com/watch?v=PDc_siO9afY
Смотреть лучше с серединки, там боль-мень симпотишные эффекты. Это я тупо переключал их подряд, чтобы хоть как-то изобразить что оно такое. Интернет плохой, снято в минимальном качестве, а потом еще и пожато. Эффекты не доигрывают и одного круга, просто для общей картинки снято.
щас без коробка висит в окне. Соседей радует. 70 см в диаметре, 200 диодов.
Кто хочет повторить - инфа в описании. Там не сложно, код не дам, потому как не допилен. Да и по сути весь код - из оригинала. Я лишь допилил массивы для увеличения количества диодов. Долго понимал логику автора, но таки понял )
Время берет с гугла. Вот ссылка одним словом (не маё) https://www.youtube.com/watch?v=5c7LYEAVJHg
Не, я про погоду (тучу). Сливает у синоптиков или предсказывает по приборам?
Если достаточно китайских эффектов "абы блымало" - то соглашусь.
16 кастомных эффектов на ёлку уже в готовой коробке - идеально, на мой взгляд, в 90% случаев.
Еще такое как-то делал, но оно мелкое - не интересно. Надо побольше мудрить, а мне ни к чему. Да и рассеиватели в виде сантехнической гофро-трубы не ахти как выглядят. На большой инсталляции может и будут норм.
https://cloud.mail.ru/public/5RSa/8DG32epF7
Интернет паршивый, это вроде видео с носками вместе )) Где-то было менее корявое и с рассеивателями, но интернет поганый, лень искать куда я его засунул.
А тучу , она берет из http://openweathermap.org
а коли пошла пъянка меряться пипирками, то вот шо у меня есть:
https://www.youtube.com/watch?v=PDc_siO9afY
Смотреть лучше с серединки, там боль-мень симпотишные эффекты. Это я тупо переключал их подряд, чтобы хоть как-то изобразить что оно такое. Интернет плохой, снято в минимальном качестве, а потом еще и пожато. Эффекты не доигрывают и одного круга, просто для общей картинки снято.
щас без коробка висит в окне. Соседей радует. 70 см в диаметре, 200 диодов.
Кто хочет повторить - инфа в описании. Там не сложно, код не дам, потому как не допилен. Да и по сути весь код - из оригинала. Я лишь допилил массивы для увеличения количества диодов. Долго понимал логику автора, но таки понял )
Очень красиво и эффектно.
Ага оч класно!
ну так блин-банан - помогите допилить :D
Оно с опенсурса взято и туда же будет покладено. Мож без некоторых плюшек.
Но главный костылек - то есть исходный проект допиленный, он будет выложен. А там бери и добавляй свои эффекты, какие хошь. Сделано-то как раз под те хотелки, что выше озвучивали: вэбморда и прочее. Причем меняем только процедуры в коде, а html, java-script и прочее остаются без изменений.
Размножить туда колорпикера, чтобы была возможность свои палитры генерить и сразу видеть, разнести некоторые настройки специфические в отдельный раздел, да и еще какие-то мелочи. Вы тут сыпете порою в разы сложнее кодом просто чтобы потыкать неуча палкой! И бесплатно! А я даже компенсирую чуток денюжкой. На отдых не хватит, канеш, но и не бесплатно же! ))
Плохо, что нема спойлера. А дабы доказать, что не реклама - то вот дублирую ссыль на маньяков управляемых диодов: https://youtu.be/QpoDb3PEmn8 Не уверен, но если предположить, что там тыщ 50-70 диодов, то не сильно ошибусь.
Плохо, что нема спойлера. А дабы доказать, что не реклама - то вот дублирую ссыль на маньяков управляемых диодов: https://youtu.be/QpoDb3PEmn8 Не уверен, но если предположить, что там тыщ 50-70 диодов, то не сильно ошибусь.
Ого, очень красиво сделано, был бы у меня загородный дом, я бы точно решился бы на такой проект.
3. Пишем и публикуем свои шедевры.
:)
В память о хорошей теме...
Нафорточный вариант (про мини 168, аккумулятор от сотика 3,7 В), вымучено в Arduino IDE версии 1.8.2.
Число пикселей ограничено значением int... и аккумулятором.
///////////////////////////////////// /// примеры для ws2812b //////////////////////////////////// #define line_ 33 //число пикселей в ленте uint8_t dataPin = 6;// вывод для подключения byte R=0; byte G=0; byte B=0;//составляющие цвета пикселя int t=75;// пауза между кадрами byte effekt=1;// номер эффекта ///RGB void setup() { } void loop() { /// t=30*random(1,5);//псевдослучайный выбор длительности паузы между кадрами в эффекте effekt=random(1,14);//псевдослучайный выбор эффекта /// for (int ti = 0; ti < line_; ti++) {//перебор номеров кадров в ленте for (int ni = 0; ni < line_; ni++) {//перебор номеров пикселей в ленте cvet(ti,ni);// функция определения цвета пикселя в зависимости от его номера в ленте и момента времени (кадра анимации) WS2812bOut(dataPin, R, G, B);//функция вывода данных цвета для текущего номера пикселя } delay(t); } /// } /////////////////////////////////////// void cvet (int it,int in){ switch (effekt) { case 1: if(in==it){R=0;G=14;B=2;}else{R=7;G=1;B=0;}//бегущий по оранжевой ленте -> цвета бирюзового пиксель -> break; case 2: { byte mnogo=9; R=5*((in+it%mnogo)%mnogo);G=5*((mnogo-1-(in+it%mnogo)%mnogo));B=0;}// бегущая по ленте <-палитра от зелёного до красного (переход из 9 штук)<- break; case 3: if(in<=it){R=5;G=0;B=10;}else{R=0;G=10;B=0;}// ->полоса фиолетового цвета набегает на полосу зелёного -> break; case 4: if(in%(it+1)==0){R=15;G=15;B=10;}else{R=7;G=1;B=1;}// -> выстрел белыми пикселями с их взаиморазлётом -> на розовом фоне break; case 5: if(in==line_-it||in+1==line_-it||in+2==line_-it||in+3==line_-it||in+4==line_-it){R=15;G=3;B=0;}else{R=0;G=0;B=7;}//бегущий по синей ленте -> цвета оранжевого 5 пикселей -> break; case 6: { byte mnogo=10; R=5*((in+it%mnogo)%mnogo);G=0;B=5*((mnogo-1-(in+it%mnogo)%mnogo));}// бегущая по ленте <-палитра от синего до красного (переход из 10 штук)<- break; case 7: if(in<=line_-it){R=10;G=10;B=0;}else{R=0;G=7;B=7;}// <-полоса голубого цвета набегает на полосу жёлтого <- break; case 8: if(in%(it+1)==0){R=15;G=15;B=10;}else{R=0;G=2;B=2;}// -> выстрел белыми пикселями с их взаиморазлётом -> на голубом фоне break; case 9: { byte mnogo=32; R=3;G=1*(mnogo-1-(it%mnogo));B=1*((it%mnogo));}// плавный переход цвета ленты от "зеленоватого к синеватому" break; case 10: { byte mnogo=32; R=1*(mnogo-1-(it%mnogo));G=1;B=1*((it%mnogo));}// плавный переход цвета ленты от "красноватого к синеватому" break; case 11: { byte mnogo=7; R=0*((mnogo-1-(in+it%mnogo)%mnogo));G=2*((mnogo-1-(in+it%mnogo)%mnogo));B=5*((mnogo-1-(in+it%mnogo)%mnogo));}// бегущая по ленте <-поток метеоров (переход из 7 штук)<- break; case 12: {if(in==it){R=0;G=0;B=0;}if(in+1==it){R=10;G=0;B=0;}if(in+2==it){R=10;G=3;B=0;}if(in+3==it){R=10;G=10;B=0;}if(in+4==it){R=0;G=10;B=0;} if(in+5==it){R=0;G=10;B=10;}if(in+6==it){R=0;G=0;B=15;}if(in+7==it){R=3;G=0;B=10;} }// бегущая по ленте ->радуга (переход из 7 штук)-> break; case 13: {if(in==line_-it){R=0;G=0;B=0;}if(in+2==line_-it){R=10;G=0;B=0;}if(in+4==line_-it){R=10;G=3;B=0;}if(in+6==line_-it){R=10;G=10;B=0;}if(in+8==line_-it){R=0;G=10;B=0;} if(in+10==line_-it){R=0;G=10;B=10;}if(in+12==line_-it){R=0;G=0;B=15;}if(in+14==line_-it){R=3;G=0;B=10;} }// бегущая по ленте <-радуга (переход из 14 штук)<- break; default: { R=0;G=0;B=0;}//выключаем пиксели если не выбран эффект } } ////////////////////////////////////// //функция вывода цвета пикселя ///////////////////////////////////////////////////////////////////////////////////////////////// static void WS2812bOut(const uint8_t _dataPin, uint8_t R, uint8_t G, uint8_t B ) { uint8_t _data[] = {G, R, B}; uint16_t _dataSize = 3; volatile uint8_t hi, lo, next, currentByte, currentBit = 0x08, *port, *ptrData = _data; uint8_t pinMask; digitalWrite(_dataPin, LOW); pinMode(_dataPin, OUTPUT); port = portOutputRegister(digitalPinToPort(_dataPin)); pinMask = digitalPinToBitMask(_dataPin); currentByte = *ptrData++; hi = *port | pinMask; lo = *port & ~pinMask; next = lo; noInterrupts(); asm volatile ( "head20:" "\n\t" // Clk Pseudocode (T = 0) "st %a[port], %[hi]" "\n\t" // 2 PORT = hi (T = 2) "sbrc %[byte], 7" "\n\t" // 1-2 if(b & 128) "mov %[next], %[hi]" "\n\t" // 0-1 next = hi (T = 4) "dec %[bit]" "\n\t" // 1 bit-- (T = 5) "st %a[port], %[next]" "\n\t" // 2 PORT = next (T = 7) "mov %[next] , %[lo]" "\n\t" // 1 next = lo (T = 8) "breq nextbyte20" "\n\t" // 1-2 if(bit == 0) (from dec above) "rol %[byte]" "\n\t" // 1 b <<= 1 (T = 10) "rjmp .+0" "\n\t" // 2 nop nop (T = 12) "nop" "\n\t" // 1 nop (T = 13) "st %a[port], %[lo]" "\n\t" // 2 PORT = lo (T = 15) "nop" "\n\t" // 1 nop (T = 16) "rjmp .+0" "\n\t" // 2 nop nop (T = 18) "rjmp head20" "\n\t" // 2 -> head20 (next bit out) "nextbyte20:" "\n\t" // (T = 10) "ldi %[bit] , 8" "\n\t" // 1 bit = 8 (T = 11) "ld %[byte] , %a[ptr]+" "\n\t" // 2 b = *ptr++ (T = 13) "st %a[port], %[lo]" "\n\t" // 2 PORT = lo (T = 15) "nop" "\n\t" // 1 nop (T = 16) "sbiw %[count], 1" "\n\t" // 2 i-- (T = 18) "brne head20" "\n" // 2 if(i != 0) -> (next byte) : [port] "+e" (port), [byte] "+r" (currentByte), [bit] "+r" (currentBit), [next] "+r" (next), [count] "+w" (_dataSize) : [ptr] "e" (ptrData), [hi] "r" (hi), [lo] "r" (lo) ); interrupts(); } ///////////////////////////////////////////////////////