Найти тему
ЯПлакалъ

Новогодняя ёлка из подручных материалов

Тяп, ляп и в продакшен!

Настал момент такой, что надо бы доставать ёлки, ёлочные игрушки и прочие блестяшки. Ну а у меня руки зачесались, чтобы самому сделать ёлку, причём быстро и относительно недорого.

А для этого что нам нужно? Правильно! Ленты адресных светодиодов типа WS2812B и платка контроллера ESP-12. Благо и того, и другого у меня достаточно. Для создания такой ёлки нам понадобиться два метра ленты WS2812B, плата контроллера ESP-12 (но можно и тот, что вам больше по душе), кусок толстой проволоки (но можно и без неё), пара листов бумаги формата А3 и два метра дождика или серпантина (кто как его называет).

П.С. По современным ценам глянул у нас в городе: Лента светодиодная стоит 490р. за метр, контроллер – до 280р., дождик купил за 67 рублей. Бумага и проволока халявная.

19 фото

2. Проволока из которой сделал основу.

-2

3. Отрезал два светика на звезду. Она у нас, по задумке, будет мигать красным.

-3

4. Делаем из провода основу. Подпаиваем к звезде провода.

-4

5. Крепим на вершину основы звезду.

-5

6. Изначально задумывал свернуть спиральку из ленты, чтобы она сама держала форму, но тут меня ждал облом. Лента не захотела держать форму и ссыпалась вниз. Был вариант сделать спираль из проволоки и к ней приклеить ленту, но потом свернул из бумаги конус.

-6

7. На конус и наклеил ленту. Получилось очень даже замечательно.

-7

8. А это плата контроллера, который будет командовать светиками.

-8

9. Вид изнутри ёлки.

-9

10. Припаиваем звезду к остальной ленте, а начало ленты к контроллеру: GND к GND, 5V к VIN, DIN к D7. Впрочем, можно и не к D7, а к какому-то другому дискретному выходу. Только надо будет изменить это и в программе.

-10

11. Скоренько набросал простейшую прогу и запустил испытание. Раз, два три – ёлочка, гори! Испытания прошли успешно: ёлка – зелёная, звезда – красная.

-11

12. Берём дождик и приклеиваем к конусу. Это вообще без проблем, так как лента имеет клеевую основу, что не совсем плотно приклеена к конусу. Так что на этой клеевой поверхности дождик и держится.

-12

13. А так выглядит с дождиком.

-13

14. Сэлфи со старшей подругой.

15. Программа с некоторыми эффектами. Их вы можете сделать на свой вкус:

Код #include

#define PIN 13 // Лента на пин D7
#define NUMPIXELS 120 // Количество светиков в ленте

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); // Параметры ленты

byte fire[] = {32,64,96,128,160,192,224,255};

byte StarRed = 255;

byte j = 0;
byte t = 0;
byte step = 0;

void StarShow() // Гори, гори моя звезда!

{

if (StarRed == 0) {

StarRed = 255;

}

else {

StarRed = 0;

};

strip.setPixelColor(118, strip.Color(StarRed,0,0));
strip.setPixelColor(119, strip.Color(StarRed,0,0));

}

void Show_0() // Ёлка, гори!

{

for (byte i=0; i
strip.setPixelColor(i, strip.Color(t,t,t));

};

};

void Show_1() // Ёлка, угасни!

{

for (byte i=0; i
strip.setPixelColor(i, strip.Color(255-t,255-t,255-t));

};

};



void Show_2() // Бегущие золотые огоньки на белой ёлке

{

for (byte i=0; i
if (i % 5) {

strip.setPixelColor(i+j, strip.Color(100,100,100));

}

else {

strip.setPixelColor(i+j, strip.Color(100,100,0));



}

};

if (j == 4) {

j=0;

}

else {

j++;

};

};

void Show_3() // Бегущие жёлтые огни по зелёной ёлке

{

for (byte i=0; i
if (i % 5) {

strip.setPixelColor(i+j, strip.Color(0,100,0));

}

else {

strip.setPixelColor(i+j, strip.Color(100,100,0));

}

};

if (j == 4) {

j=0;

}

else {

j++;

};

};



void Show_4()

{

for (byte i=0; i
if (i % 5) {

strip.setPixelColor(i, strip.Color(0,100,0));

}

else {

byte R = random(7);

byte G = random(7);

byte B = random(7);

strip.setPixelColor(i, strip.Color(fire[R],fire[G],fire[B]));

};

};

};

void setup() // Тут всё подготавливается

{

strip.begin(); // Инициализирует библиотеку работы с лентой

randomSeed(analogRead(0)); // Инициализация ГСЧ

}

void loop() // Тут всё крутится

{

switch (step) {

case 0: Show_0(); break;
case 1: Show_1(); break;
case 2: Show_2(); break;
case 3: Show_3(); break;
case 4: Show_4(); break;
//case 5: Show_5(); break;

default: Show_0();

};


StarShow(); // Мигаем звездой


strip.show(); // Засветить всю ленту.
delay(250); // И пусть весь мир подождёт

if (t>254) { // 256 циклов крутится одна программа. Потом переключается на следующую.
if (step < 5 ) { step++; } else { step = 0; };
};
t++;

}

-14

Источник