Светильник из адресной ленты на Ардуино

Светильник на адресной ленте с Ардуино Нано

Светильник из WS2812B своими руками ► на странице мы разместили схему сборки светильника, а также программу Arduino со световыми эффектами для адресной ленты

Светильник из адресной светодиодной ленты своими руками сделать не намного сложнее, чем светильник на Ардуино с обычной светодиодной лентой. При этом светодиоды WS2812B позволяют сделать массу световых эффектов, которые невозможны с использованием обычной LED ленты. Далее мы разместили схему сборки светильника на WS2812B Arduino своими руками и готовую прошивку.

Светильник на WS2812B Arduino

Светильник имеет три режима работы, которые можно переключать тактовой кнопкой. Также в каждом режиме есть возможность настраивать световые эффекты — менять яркость адресной ленты, вплоть до отключения и менять скорость переключения или мерцания светодиодов. Для управления WS2812B используется Ардуино Нано, данная плата, из-за своих небольших размеров, идеально впишется в любой корпус.

Светильник на адресной ленте своими руками




Для этого проекта нам потребуется:

  • плата Arduino Nano;
  • корпус для светильника;
  • адресная лента WS2812B;
  • USB провод;
  • включатель, тактовые кнопки;
  • провода, припой, изолента, термоусадка.

Схема сборки светильника размещена ниже. Для подключения тактовых кнопок к микроконтроллеру используются цифровые пины 8, 10, 12. Для подключения обычного светодиода для индикации работы светильника и декоративной подсветки (можно подключить несколько) используется пин 6. Управление светодиодной адресной лентой производится от пина 4, который подключен к WS2812B через резистор 220 Ом.

Сборка схемы светильника с лентой ws2812b

Схема светильника из адресной ленты
Схема светильника из адресной ленты и Ардуино Нано

Первая кнопка, подключенная к 8 пину, отвечает за изменение яркости ночного светильника на Ардуино. Вторая кнопка (пин 10) меняет оттенок или скорость мигания светодиодов. Третья кнопка меняет режимы работы ночного светильника. После сборки схемы, можно загрузить программу в микроконтроллер. Для прошивки потребуется установить библиотеку Adafruit NeoPixel для адресной ленты.

Скетч. Светильник на адресной ленте Ардуино

#include <Adafruit_NeoPixel.h> // подключаем библиотеку

// указываем количество пикселей в матрице и пин подключения
Adafruit_NeoPixel strip(3, 4, NEO_GRB + NEO_KHZ800);

boolean button1WasUp = true;   // переменные для считывания нажатия на кнопки
boolean button2WasUp = true;
boolean button3WasUp = true;

byte w = 1;  // переменная для смены режима работы
byte d = 0;  // переменная для изменения задержки (delay)

byte r = 250; // переменные для изменения цвета и яркости ленты
byte g = 250;
byte b = 250;
byte brign = 30;
 
void setup() {
   pinMode(8, INPUT_PULLUP);   // подключаем тактовые кнопки
   pinMode(10, INPUT_PULLUP);
   pinMode(12, INPUT_PULLUP);

   pinMode(6, OUTPUT);     // включаем светодиод на pin6
   digitalWrite(6, HIGH);

   strip.begin();                         // инициализируем объект NeoPixel
   strip.show();                         // отключаем все пиксели на ленте
   strip.setBrightness(brign);  // указываем яркость (максимум 255)

   for (int i = 0; i <= r; i++) {  // плавно включаем ленту
      for (int pix = 0; pix <= strip.numPixels(); pix++) {
         strip.setPixelColor(pix, strip.Color(i, i, i));
         strip.show();
         delay(1);
      }
   }
}

void knopka() {
    boolean button1IsUp = digitalRead(8);   // узнаем текущее состояние кнопок
    boolean button2IsUp = digitalRead(10);
    boolean button3IsUp = digitalRead(12);

    // если кнопка 1 была нажата, добавляем яркость (не больше 150)
    if (button1WasUp && !button1IsUp) {
       delay(10);
       button1IsUp = digitalRead(8);
       if (!button1IsUp) { brign = brign + 30; if (brign > 150) { brign = 0; } }
    }
    button1WasUp = button1IsUp; // запоминаем состояние кнопки 1

    // если кнопка 2 была нажата, увеличиваем задержку (не больше 150)
    if (button2WasUp && !button2IsUp) {
       delay(10);
       button2IsUp = digitalRead(10);
       if (!button2IsUp) { d = d + 30; if (d > 150) { d = 0; }
       }
    }
    button2WasUp = button2IsUp; // запоминаем состояние кнопки 2

    // если кнопка 3 была нажата, устанавливаем стартовые значения и меняем режим
    if (button3WasUp && !button3IsUp) {
       delay(10);
       button3IsUp = digitalRead(12);
       if (!button3IsUp) { brign = 30; d = 30; w++; if (w > 3) {w = 1;} }
    }
    button3WasUp = button3IsUp; // запоминаем состояние кнопки 3
}

void loop() {

   // ***** первый режим *****
   while (w == 1) {
     knopka();
     // включаем светильник на ws2812b с заданными параметрами
     strip.setBrightness(brign);
     for (int pix = 0; pix <= strip.numPixels(); pix++) {
        strip.setPixelColor(pix, strip.Color(r, g, b));
        strip.show();
        delay(50);
     }
  }

  // ***** второй режим *****
  while (w == 2) {  
    for (uint32_t firstPixelHue = 0; firstPixelHue < 65536; firstPixelHue += 256) {
      knopka();
      // включаем светильник на ws2812b с заданными параметрами
      strip.setBrightness(brign);
      for (int p = 0; p < strip.numPixels(); p++) {
         uint32_t pixelHue = firstPixelHue + (p * 65536L / strip.numPixels());
         strip.setPixelColor(p, strip.gamma32(strip.ColorHSV(pixelHue, 255)));
      }
      strip.show();
      delay(d);
    }
  }

  // ***** третий режим *****
  while (w == 3) {
    for (int i = 50; i < 250; i++) {
      for (int p = 0; p <= strip.numPixels(); p++) {
        strip.setPixelColor(p, 0, 0, b * i / 250);
      }
      knopka();
      // включаем светильник на ws2812b с заданными параметрами
      strip.setBrightness(brign);
      strip.show();
      delay(d);
    }

    for (int i = 250; i > 50; i--) {
      for (int p = 0; p <= strip.numPixels(); p++) {
        strip.setPixelColor(p, 0, 0, b * i / 250);
      }
      knopka();
      // включаем светильник на ws2812b с заданными параметрами
      strip.setBrightness(brign);
      strip.show();
      delay(d);
    }
  }
}

Пояснения к коду:

  1. переключения режимов происходят с помощью цикла while и изменения переменной w. При желании вы можете добавить свои режимы работы;
  2. значения переменных brign (яркость) и d (задержка) ограничены, по достижении максимального значения (150), переменные обнуляются.
Детали для светильника на адресной ленте
Детали из фанеры для светильника на адресной ленте

После того, как вы проверили и настроили скетч, можно приступать к сборке светильника и размещения электроники в корпусе. Кроме того, данную прошивку можно использовать и при изготовлении гирлянды из адресной ленты WS2812B. При значительной длине ленты может наблюдаться низкий уровень свечения светодиодов на конце гирлянды — в этом случае требуется добавить питание на конце ленты.

Сборка светильника на адресной ленте WS2812B

Если у вас есть возможность вырезать ночной светильник Ардуино на лазерном станке из фанеры, то можете скачать макет для резки здесь. Кнопки располагаются в боковой части основания, для них специально предусмотрены отверстия. Крепятся кнопки на термоклей или суперклей, а сам корпус склеивается на клей ПВА. Светильник можно подключить через USB кабель к зарядке от смартфона или к компьютеру.

Сборка электрической схемы светильника
Сборка электрической схемы светильника на Ардуино

Все детали, вырезанные на лазерном станке (макет корпуса можно скачать в формате CDR здесь), следует прошкурить. Электрическая схема на Arduino Nano размещается в нижней части корпуса, как показано на фото. Перед окончательной сборкой желательно еще раз проверить работоспособность программы. Кроме адресной ленты в схеме использовались обычные светодиоды для дополнительной подсветки.

Сборка светильника на адресной ленте
Сборка декоративного светильника на адресной ленте

Не используйте в светильнике слишком много светодиодов, так как для этого потребуется отдельный источник питания. Каждый светодиод потребляет 60 мА при максимальной яркости, т.е для блока питания в 1 Ампер следует подключать не более 15 светодиодов ws2812b. 15 светодиодов будет потреблять 960 мА = 60 x 15, поэтому стандартной зарядки или USB порта компьютера будет вполне достаточно.

Заключение. Как видите, сделать своими руками светильник из адресной светодиодной ленты WS2812B довольно просто. Другие, не менее интересные, проекты с адресной лентой вы можете посмотреть в разделе проекты с LED лентой Ардуино на нашем сайте. Все вопросы, связанные с прошивкой Arduino Nano или сборкой схемы светильника на Arduino вы можете задать в комментариях к этой записи.

1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 5,00 out of 5)
Загрузка...

Подборка на тему: Светильник из адресной ленты на Ардуино

2 комментариев для “Светильник из адресной ленты на Ардуино

  1. Управление современными адресными лентами легко осуществляется через смартфон и Wi-fi. Последовательность здесь следующая. Зачастую на корпусе контроллера указывают QR код, отсканировав который, вы найдете нужную программу в интернете.

  2. Смарт светодиодные ленты в народе прозвали различными наименованиями. Программируемые, управляемые, адресные, пиксельные — всё это одна и та же лента. Феноменальность её в том, что светодиоды в ней можно программировать отдельно: от одного до нескольких светодиодов, вне зависимости друг от друга! Такая возможность поднимает SMART ленты на порядок выше обычных RGB лент.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *