Содержание

Новогодняя DIY-ёлка с LED-гирляндой: инструкция по сборке

Поздравляем! Вы купили наш набор с декоративной ёлочкой и светодиодной гирляндой WS2812. Прежде чем ёлочка начнёт радовать ваш глаз, нужно собрать фанерные детали и настроить электронную часть. В этом и поможет инструкция.

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

Сборка ёлочки

Для сборки ёлочки вам понадобятся паяльник, припой и флюс.

Шаг 1

Для начала припаяйте штырьковые соединители ко всем светодиодным модулям WS2812. Их семь штук.

На каждый модуль необходимо припаять две линейки штырьковых соединителей длиной в три контакта. В комплекте с ёлочкой идут две полоски штырьковых соединителей 1×40 красного и жёлтого цвета. Полоску соединителей можно аккуратно разломить на несколько частей руками, но для удобства лучше воспользоваться бокорезами.

Шаг 2

Соедините светодиодные модули WS2812 между собой в единую гирлянду, используя трёхпроводные шлейфы «мама-мама». В цепочке модулей пин `OUT` каждого предыдущего модуля соединяется с пином `IN` последующего. Всего на семь модулей понадобится шесть шлейфов.

Подключите первый модуль гирлянды к управляющей плате Iskra Nano Pro, используя трёхпроводной шлейф «мама-мама» с разделёнными контактами. Пин `IN` первого модуля WS2812 подключите к любому цифровому пину контроллера, например А7; пин VCC модуля к пину VIN контроллера, а пин GND — к земле контроллера.

Шаг 3

Перед установкой светодиодных модулей на ёлочку вы можете разукрасить её фанерные детали по вкусу.

Закрепите светодиодные модули на ёлочке, используя саморезы 2×4 из комплекта. Саморезы вкручиваются через светодиодные модули в любые маленькие отверстия на ёлочке, имитирующие снег. Для этого понадобится небольшая отвёртка с крестообразным шлицем. Через большие отверстия на ёлке можно продеть трёхпроводные шлейфы, чтобы аккуратно проложить гирлянду.

Шаг 4

Установите ёлочку в подставку, как показано на рисунке.

Шаг 5

Закрепите управляющую плату Iskra Nano Pro в подставку ёлки. Контроллер устанавливается контактами вверх и USB-портом наружу. Крепление имеет плотную посадку, и вам, возможно, придётся приложить усилие, чтобы вставить контроллер до конца.

Программа

Шаг 1

Подключите плату Iskra Nano Pro к компьютеру кабелем micro-USB.

Шаг 2

Установите среду программирования Arduino IDE для прошивки контроллера. Если возникают сложности, следуйте нашей инструкции по установке и настройке Arduino IDE.

Шаг 3

Добавьте поддержку платы Iskra Nano Pro в Arduino IDE. Как это сделать, читайте в инструкции.

Шаг 4

Для управления светодиодными модулями WS2812 в среде Arduino используется популярная библиотека Adafruit_NeoPixel. В качестве примера ёлочной программы подойдёт любой из стандартных демонстрационных примеров библиотеки.

Шаг 5

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

christmas-tree.ino
#include <Adafruit_NeoPixel.h>
#include <avr/power.h>
 
#define PIN A7
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(49, PIN, NEO_GRB + NEO_KHZ800);
 
void setup() {
  strip.begin();
  strip.setBrightness(50);
  strip.show(); // Initialize all pixels to 'off'
}
 
void loop() {
  // Some example procedures showing how to display to the pixels:
  colorWipe(strip.Color(255, 0, 0), 50); // Red
  colorWipe(strip.Color(0, 255, 0), 50); // Green
  colorWipe(strip.Color(0, 0, 255), 50); // Blue
  //colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW
  // Send a theater pixel chase in...
  theaterChase(strip.Color(127, 127, 127), 50); // White
  theaterChase(strip.Color(127, 0, 0), 50); // Red
  theaterChase(strip.Color(0, 0, 127), 50); // Blue
 
  rainbow(20);
  rainbowCycle(20);
  theaterChaseRainbow(50);
}
 
// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}
 
void rainbow(uint8_t wait) {
  uint16_t i, j;
 
  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
 
// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;
 
  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
 
//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();
 
      delay(wait);
 
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}
 
//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
      }
      strip.show();
 
      delay(wait);
 
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}
 
// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

В итоге

Ура! Ёлочка зажглась, а теперь вы можете поэкспериментировать с программой и придумать свои цветные анимации. Счастливого светодиодного нового года!