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

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


Новогодняя DIY-ёлка: инструкция по использованию

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

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

Инструкция по сборке

Что понадобится?

Пайка контактов

  1. Разломите с помощью бокорезов две полоски контактных штырьков PLS-40 красного и жёлтого цвета по три контакта PLS-3.
  2. Припаяйте контактные штыри PLS-3 к светодиодному модулю WS2812:
    1. Красные штыри PLS-3 — к контактам с меткой IN.
    2. Жёлтые штыри PLS-3 — к контактам с меткой OUT.
  3. Повторите операцию пайки контактов PLS-3 со всеми светодиодными модулями WS2812. В итоге должны получить семь модулей WS2812 с припаяными контактами PLS-3.

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

  1. Закрепите светодиодные модули на ёлке с помощью саморезов 2×4 из комплекта. Саморезы вкручиваются через светодиодные модули в любые маленькие отверстия на ёлочке, имитирующие снег.
  2. Установите ёлочку в подставку.
  3. Закрепите управляющую плату Iskra Nano в подставку ёлки. Контроллер устанавливается контактами вверх и USB-портом наружу.

Схема подключения

  1. Соедините все светодиодные модули WS2812 между собой в единую гирлянду с помощью трёхпроводных шлейфов «мама-мама». В цепочке пин OUT предыдущего модуля соединяется с пином IN последующего.
  2. Подключите первый модуль гирлянды к управляющей плате Iskra Nano с помощью трёхпроводного шлейфа «мама-мама» с разделёнными контактами.
Цвет провода Контакт первого модуля Контакт Iskra Nano
Жёлтый IN A0
Красный VCC 5V
Чёрный GND GND

Прошивка

Подключение и настройка Arduino IDE

  1. Подключите плату Iskra Nano к компьютеру кабелем micro-USB.
    1. Для успешной загрузки скетчей понадобится драйвер чипа CH340. Прочитайте наши статьи по установке драйвера для Windows или для Linux.
    2. В Arduino IDE выберите плату Arduino Nano: Инструменты Плата Arduino AVR Arduino Nano
    3. В Arduino IDE выберите COM-порт платы: Инструменты Порт COMx, где x — номер порта платы.
  2. Скачайте и установите библиотеку Adafruit_NeoPixel для управления светодиодными модулями WS2812.
  3. Прошейте плату Iskra Nano следующим демо-скетчем.

Исходный код

ChristmasTreeSimple.ino
  1. // Подключаем библиотеку для работы со светодиодами WS2812
  2. #include <Adafruit_NeoPixel.h>
  3.  
  4. // Даём понятное имя пину A0 со светодиодным модулем WS2812
  5. constexpr uint8_t LED_WS2812_PIN = A0;
  6.  
  7. // В цепочке гирлянды семь светодиодных модулей
  8. // А на каждом модуле по семь светодиодов WS2812
  9. // Количество светодиодов LED_WS2812 = 49
  10. constexpr uint8_t COUNT_LED_WS2812 = 49;
  11.  
  12. // Создаём объект для управления светодиодами WS2812
  13. Adafruit_NeoPixel led
  14. = Adafruit_NeoPixel(COUNT_LED_WS2812, LED_WS2812_PIN, NEO_GRB + NEO_KHZ800);
  15.  
  16. void setup() {
  17. // Инициализируем светодиодные модули WS2812
  18. led.begin();
  19. // Устанавливаем яркость
  20. led.setBrightness(50);
  21. // Обновляем состояние светодиодов
  22. led.show();
  23. }
  24.  
  25. void loop() {
  26. // Эффект «бегущий огонь» красного цвета
  27. colorWipe(led.Color(255, 0, 0), 50);
  28. // Эффект «бегущий огонь» зелёного цвета
  29. colorWipe(led.Color(0, 255, 0), 50);
  30. // Эффект «бегущий огонь» синего цвета
  31. colorWipe(led.Color(0, 0, 255), 50);
  32. // Театральный эффект «бегущий огонь» белого цвета
  33. theaterChase(led.Color(127, 127, 127), 50);
  34. // Театральный эффект «бегущий огонь» красного цвета
  35. theaterChase(led.Color(127, 0, 0), 50);
  36. // Театральный эффект «бегущий огонь» синего цвета
  37. theaterChase(led.Color(0, 0, 127), 50);
  38. // Эффект радуги
  39. rainbow(20);
  40. // Эффект прокручивающейся радуги
  41. rainbowCycle(20);
  42. // Театральный эффект «бегущий огонь» с радужной заливкой
  43. theaterChaseRainbow(50);
  44. }
  45.  
  46. // Функция последовательного зажигания светодиодов указанным цветом
  47. void colorWipe(uint32_t c, uint8_t timeWait) {
  48. for (uint16_t i = 0; i < led.numPixels(); i++) {
  49. led.setPixelColor(i, c);
  50. led.show();
  51. delay(timeWait);
  52. }
  53. }
  54.  
  55. // Функция эффекта плавного переливания цветов в виде радуги
  56. void rainbow(uint8_t timeWait) {
  57. uint16_t i, j;
  58. for (j = 0; j < 256; j++) {
  59. for (i = 0; i < led.numPixels(); i++) {
  60. led.setPixelColor(i, valueToRainbowColor((i + j) & 255));
  61. }
  62. led.show();
  63. delay(timeWait);
  64. }
  65. }
  66.  
  67. // Функция эффекта плавного прокручивания цветов в виде радуги
  68. void rainbowCycle(uint8_t timeWait) {
  69. uint16_t i, j;
  70. for (j = 0; j < 256 * 5; j++) {
  71. for (i = 0; i < led.numPixels(); i++) {
  72. led.setPixelColor(i, valueToRainbowColor(((i * 256 / led.numPixels()) + j) & 255));
  73. }
  74. led.show();
  75. delay(timeWait);
  76. }
  77. }
  78.  
  79. // Функция театрального эффекта «бегущие огни»
  80. void theaterChase(uint32_t c, uint8_t timeWait) {
  81. for (int j = 0; j < 10; j++) {
  82. for (int q = 0; q < 3; q++) {
  83. for (uint16_t i = 0; i < led.numPixels(); i = i + 3) {
  84. led.setPixelColor(i + q, c);
  85. }
  86. led.show();
  87. delay(timeWait);
  88. for (uint16_t i = 0; i < led.numPixels(); i = i + 3) {
  89. led.setPixelColor(i + q, 0);
  90. }
  91. }
  92. }
  93. }
  94.  
  95. // Функция театрального эффекта «бегущие огни» с радужными цветами
  96. void theaterChaseRainbow(uint8_t timeWait) {
  97. for (int j = 0; j < 256; j++) {
  98. for (int q = 0; q < 3; q++) {
  99. for (uint16_t i = 0; i < led.numPixels(); i = i + 3) {
  100. led.setPixelColor(i + q, valueToRainbowColor((i + j) % 255));
  101. }
  102. led.show();
  103. delay(timeWait);
  104. for (uint16_t i = 0; i < led.numPixels(); i = i + 3) {
  105. led.setPixelColor(i + q, 0);
  106. }
  107. }
  108. }
  109. }
  110.  
  111. // Функция преобразования значения от 0 до 255 в цвет радуги
  112. // Цвета плавно переходят: красный → зелёный → синий → красный
  113. uint32_t valueToRainbowColor(byte wheelPos) {
  114. wheelPos = 255 - wheelPos;
  115. if (wheelPos < 85) {
  116. return led.Color(255 - wheelPos * 3, 0, wheelPos * 3);
  117. }
  118. if (wheelPos < 170) {
  119. wheelPos -= 85;
  120. return led.Color(0, wheelPos * 3, 255 - wheelPos * 3);
  121. }
  122. wheelPos -= 170;
  123. return led.Color(wheelPos * 3, 255 - wheelPos * 3, 0);
  124. }

В итоге

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

Ресурсы

Софт

Библиотеки