Инструменты пользователя

Инструменты сайта


Новогодняя 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

Обратите внимание

Для успешной загрузки скетчей понадобится драйвер чипа CH340. Прочитайте наши статьи по установке драйвера для Windows или для Linux.

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

  • В среде Arduino IDE в меню «Инструменты → Плата» выберите в списке плату «Iskra Nano Pro».
  • В меню «Инструменты → Порт» выберите номер COM-порта, присвоенного плате Iskra Nano Pro.
  • Прошейте плату Iskra Nano Pro следующим демо-скетчем.
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);
}

В итоге

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