Тяп, ляп и в продакшен!
Настал момент такой, что надо бы доставать ёлки, ёлочные игрушки и прочие блестяшки. Ну а у меня руки зачесались, чтобы самому сделать ёлку, причём быстро и относительно недорого.
А для этого что нам нужно? Правильно! Ленты адресных светодиодов типа WS2812B и платка контроллера ESP-12. Благо и того, и другого у меня достаточно. Для создания такой ёлки нам понадобиться два метра ленты WS2812B, плата контроллера ESP-12 (но можно и тот, что вам больше по душе), кусок толстой проволоки (но можно и без неё), пара листов бумаги формата А3 и два метра дождика или серпантина (кто как его называет).
П.С. По современным ценам глянул у нас в городе: Лента светодиодная стоит 490р. за метр, контроллер – до 280р., дождик купил за 67 рублей. Бумага и проволока халявная.
19 фото
2. Проволока из которой сделал основу.
3. Отрезал два светика на звезду. Она у нас, по задумке, будет мигать красным.
4. Делаем из провода основу. Подпаиваем к звезде провода.
5. Крепим на вершину основы звезду.
6. Изначально задумывал свернуть спиральку из ленты, чтобы она сама держала форму, но тут меня ждал облом. Лента не захотела держать форму и ссыпалась вниз. Был вариант сделать спираль из проволоки и к ней приклеить ленту, но потом свернул из бумаги конус.
7. На конус и наклеил ленту. Получилось очень даже замечательно.
8. А это плата контроллера, который будет командовать светиками.
9. Вид изнутри ёлки.
10. Припаиваем звезду к остальной ленте, а начало ленты к контроллеру: GND к GND, 5V к VIN, DIN к D7. Впрочем, можно и не к D7, а к какому-то другому дискретному выходу. Только надо будет изменить это и в программе.
11. Скоренько набросал простейшую прогу и запустил испытание. Раз, два три – ёлочка, гори! Испытания прошли успешно: ёлка – зелёная, звезда – красная.
12. Берём дождик и приклеиваем к конусу. Это вообще без проблем, так как лента имеет клеевую основу, что не совсем плотно приклеена к конусу. Так что на этой клеевой поверхности дождик и держится.
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++;
}