Все статьиHardware

Минималистичная LED-лампа на Arduino Nano с адресными светодиодами

БА
Бексултан Айтен
CTO, Alashed
28 мая 2025 г.
8 мин чтения
Минималистичная LED-лампа на Arduino Nano с адресными светодиодами

Собираем настольную LED-лампу на Arduino Nano с лентой WS2812B: радужные эффекты, мерцание и плавные переходы. Простой проект с красивым результатом. Полный код и инструкция.

Лампа, которую можно подарить

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

В основе лампы -- отрезок ленты WS2812B (36 светодиодов) и Arduino Nano. Библиотека FastLED позволяет создавать десятки световых эффектов: вращающуюся радугу, мерцание с блёстками, плавные переходы между цветами. Всё управляется одним проводом данных.

Проект подходит для учеников 5--8 классов. Его можно собрать за один урок, а корпус изготовить из подручных материалов или напечатать на 3D-принтере.

Готовая минималистичная LED-лампа на Arduino с адресными светодиодами
Готовая минималистичная LED-лампа на Arduino с адресными светодиодами

Необходимые компоненты

  • Arduino Nano (или Uno) -- 1 шт.
  • Лента WS2812B (60 светодиодов/метр) -- отрезок на 36 светодиодов (около 60 см)
  • Блок питания 5V 2A -- 1 шт.
  • Конденсатор 1000 мкФ 6.3V (защита от скачков при включении) -- 1 шт.
  • Резистор 330 Ом (для линии данных) -- 1 шт.
  • Провода-перемычки -- 5 шт.
  • USB-кабель (Mini-USB для Nano)
  • Материал для корпуса -- матовый пластик, прозрачный PETG или бумага

Стоимость электронных компонентов -- около 4 000--6 000 тенге. Лента WS2812B продаётся метрами; для этого проекта достаточно 60 см.

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

Адресные светодиоды WS2812B управляются по одному проводу -- каждый светодиод принимает свои данные и передаёт остальные следующему.

Подключение ленты WS2812B к Arduino Nano:

Лента WS2812BПодключение
5V (красный)5V от блока питания
GND (белый/чёрный)GND Arduino + GND блока питания
DIN (зелёный)Пин D6 через резистор 330 Ом

Конденсатор 1000 мкФ устанавливается между 5V и GND максимально близко к ленте. Он защищает светодиоды от скачков напряжения при включении. Соблюдайте полярность: длинная ножка конденсатора -- плюс.

Важно: GND Arduino и GND блока питания должны быть соединены. Без общей земли сигнал управления не будет работать корректно.

При 36 светодиодах на максимальной яркости потребление может достигать 2А, поэтому питание ленты берётся напрямую от блока питания, а не от пина 5V Arduino.

Схема подключения ленты WS2812B к Arduino Nano
Схема подключения ленты WS2812B к Arduino Nano

Установка библиотеки

Установите библиотеку FastLED через менеджер библиотек Arduino IDE: меню Скетч -- Подключить библиотеку -- Управление библиотеками -- найдите "FastLED" и нажмите "Установить".

FastLED -- мощная библиотека для работы с адресными светодиодами. Она поддерживает множество типов лент (WS2812B, WS2811, APA102 и другие) и содержит встроенные функции для работы с цветом в форматах RGB и HSV.

Полный код проекта

```cpp

#include <FastLED.h>

// Настройки

#define LED_PIN 6 // Пин данных ленты

#define NUM_LEDS 36 // Количество светодиодов

#define BRIGHTNESS 150 // Яркость (0-255)

#define LED_TYPE WS2812B // Тип ленты

#define COLOR_ORDER GRB // Порядок цветов

// Массив для хранения цвета каждого светодиода

CRGB leds[NUM_LEDS];

// Переменная для текущего эффекта

int currentEffect = 0;

const int totalEffects = 4;

// Счётчик кадров для анимаций

uint8_t hueOffset = 0;

void setup() {

// Небольшая задержка для стабилизации питания

delay(500);

// Инициализация ленты

FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);

FastLED.setBrightness(BRIGHTNESS);

// Гасим все светодиоды при старте

FastLED.clear();

FastLED.show();

Serial.begin(9600);

Serial.println("LED-лампа запущена");

}

// Эффект 1: Вращающаяся радуга

// Каждый светодиод получает свой оттенок, смещённый относительно соседа

void rainbow() {

for (int i = 0; i < NUM_LEDS; i++) {

// Вычисляем оттенок: базовое смещение + позиция светодиода

leds[i] = CHSV(hueOffset + (i * 256 / NUM_LEDS), 255, 255);

}

FastLED.show();

hueOffset++; // Сдвигаем радугу на каждом кадре

}

// Эффект 2: Радуга с блёстками

// Случайные светодиоды вспыхивают белым поверх радуги

void rainbowWithGlitter() {

rainbow(); // Сначала рисуем обычную радугу

// С вероятностью 1/5 добавляем белую вспышку

if (random8() < 50) {

leds[random16(NUM_LEDS)] += CRGB::White;

}

FastLED.show();

}

// Эффект 3: Плавное дыхание одним цветом

// Яркость плавно нарастает и убывает

void breathe() {

// Используем синусоиду для плавного изменения яркости

uint8_t breath = beatsin8(12, 30, 255); // 12 ударов/мин, от 30 до 255

CRGB color = CHSV(hueOffset / 4, 200, breath);

fill_solid(leds, NUM_LEDS, color);

FastLED.show();

hueOffset++; // Медленно меняем цвет

}

// Эффект 4: Мерцание свечи

// Тёплый оранжевый свет с случайными колебаниями яркости

void candleFlicker() {

for (int i = 0; i < NUM_LEDS; i++) {

// Случайная яркость для каждого светодиода

uint8_t flicker = random8(140, 255);

// Тёплый оранжевый: высокий красный, средний зелёный, нулевой синий

leds[i] = CRGB(flicker, flicker / 3, 0);

}

FastLED.show();

delay(60); // Частота мерцания

}

void loop() {

// Каждые 15 секунд переключаем эффект

EVERY_N_SECONDS(15) {

currentEffect = (currentEffect + 1) % totalEffects;

Serial.print("Эффект: ");

Serial.println(currentEffect);

}

// Запускаем текущий эффект

switch (currentEffect) {

case 0:

rainbow();

break;

case 1:

rainbowWithGlitter();

break;

case 2:

breathe();

break;

case 3:

candleFlicker();

break;

}

// Ограничиваем частоту обновления (примерно 60 кадров/сек)

FastLED.delay(1000 / 60);

}

`

Разбор кода

Цветовая модель HSV. Библиотека FastLED позволяет задавать цвет в формате HSV (оттенок, насыщенность, яркость). Оттенок -- число от 0 до 255, где 0 -- красный, 96 -- зелёный, 160 -- синий. Меняя только оттенок, мы получаем все цвета радуги. Это намного удобнее, чем подбирать три значения RGB вручную.

Радужный эффект. Каждый светодиод получает оттенок, равномерно распределённый по цветовому кругу. Переменная hueOffset сдвигается на каждом кадре, заставляя радугу вращаться. Формула hueOffset + (i * 256 / NUM_LEDS) гарантирует, что вся радуга умещается ровно на длину ленты.

Функции FastLED. beatsin8 генерирует синусоидальное значение с заданной частотой -- идеально для эффекта дыхания. random8 -- быстрый генератор случайных чисел. fill_solid заливает всю ленту одним цветом. EVERY_N_SECONDS -- макрос для выполнения кода с заданным интервалом без использования delay.

Мерцание свечи. Каждый светодиод получает случайную яркость в диапазоне 140--255. Зелёный канал составляет треть от красного, синий -- ноль. Это создаёт тёплый оранжевый тон. Случайные колебания яркости имитируют живое пламя.

Оформление в корпус

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

  • Прозрачный PETG -- если есть 3D-принтер, напечатайте цилиндрический рассеиватель. PETG даёт мягкое равномерное свечение.
  • Матовый пластиковый стакан -- бюджетный вариант для быстрой сборки.
  • Бумажный абажур -- обычная белая бумага, свёрнутая в цилиндр, тоже хорошо рассеивает свет.
  • Стеклянная банка -- оберните ленту внутри, добавьте матовую плёнку снаружи.

Arduino Nano и провода прячутся в основание лампы. Для автономной работы подключите блок питания 5V через разъём, выведенный на корпус.

Советы для занятий

  • Предложите ученикам создать свой эффект. Например, бегущий огонёк, плавную смену двух цветов или полицейскую мигалку.
  • Добавьте кнопку для ручного переключения между эффектами.
  • Подключите потенциометр к аналоговому входу для плавной регулировки яркости.
  • Измените количество светодиодов в константе NUM_LEDS -- код автоматически подстроится под любую длину ленты.

Как Alashed помогает

Arduino Nano, ленты WS2812B и все необходимые компоненты входят в наборы Alashed Hardware, подготовленные для школьных проектов. Писать и загружать код удобно через Alashed CodeStudio -- онлайн-среду, которая работает прямо в браузере и не требует установки Arduino IDE на каждый компьютер в классе.

Попробуйте Alashed бесплатно

Подключите школу к пилоту. Генерируйте КМЖ за 2 минуты, ведите CodeStudio уроки, заказывайте оборудование — всё в одном месте.

Попробовать бесплатноДемо