Этот скетч представляет собой простую гирлянду, управляемую Arduino. Он перебирает несколько различных эффектов (например, мигание, радуга, бегущая строка) и позволяет настраивать скорость и яркость.
Необходимые компоненты:
- Arduino (Uno, Nano, Mega и т.д.)
- Светодиодная лента WS2812B (или аналогичная с управляемыми RGB-светодиодами)
- Резистор (обычно 300-500 Ом) - для защиты первого светодиода ленты (опционально)
- Провода для соединения
Схема подключения:
- Подключите вывод Data (Data In, DI) светодиодной ленты к цифровому пину Arduino. В примере используется пин 6. Не забудьте использовать резистор между пином Arduino и первым светодиодом (опционально, но рекомендуется).
- Подключите вывод +5V светодиодной ленты к +5V на Arduino. ВАЖНО: Если лента большая и требует много тока, лучше использовать отдельный источник питания на 5V для ленты, а землю источника питания соединить с землей Arduino.
- Подключите вывод GND светодиодной ленты к GND (земле) на Arduino.
Скетч Arduino:
#include <FastLED.h>
// --- Настройки ---
#define DATA_PIN 6 // Пин, к которому подключен Data In светодиодной ленты
#define NUM_LEDS 30 // Количество светодиодов в ленте
#define BRIGHTNESS 100 // Глобальная яркость (0-255)
#define COLOR_ORDER GRB // Порядок цветов (обычно GRB для WS2812B)
// --- Переменные ---
CRGB leds[NUM_LEDS]; // Массив для хранения цветов каждого светодиода
uint8_t currentEffect = 0; // Индекс текущего эффекта
unsigned long lastChangeTime = 0; // Время последнего переключения эффекта
unsigned long effectDuration = 5000; // Длительность каждого эффекта (в миллисекундах)
// --- Эффекты ---
void effectSolidColor(CRGB color);
void effectBlink(CRGB color, uint8_t blinkSpeed);
void effectRainbow(uint8_t rainbowSpeed);
void effectRunningLights(CRGB color, uint8_t speed);
void effectRandomColors();
void setup() {
FastLED.addLeds<WS2812B, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
FastLED.setBrightness(BRIGHTNESS);
FastLED.clear(); // Гасим все светодиоды
FastLED.show(); // Отправляем данные на ленту
Serial.begin(9600); // Инициализируем Serial Monitor для отладки
}
void loop() {
// Переключение эффектов каждые effectDuration миллисекунд
if (millis() - lastChangeTime > effectDuration) {
currentEffect = (currentEffect + 1) % 5; // 5 - количество эффектов
lastChangeTime = millis();
Serial.print("Effect: ");
Serial.println(currentEffect); // Вывод текущего эффекта в Serial Monitor
}
// Выбор и запуск текущего эффекта
switch (currentEffect) {
case 0:
effectSolidColor(CRGB::Red);
break;
case 1:
effectBlink(CRGB::Blue, 50);
break;
case 2:
effectRainbow(10);
break;
case 3:
effectRunningLights(CRGB::Green, 20);
break;
case 4:
effectRandomColors();
break;
}
FastLED.show(); // Отправляем данные на ленту
delay(10); // Небольшая задержка
}
// --- Реализация эффектов ---
// Просто светит все светодиоды одним цветом
void effectSolidColor(CRGB color) {
fill_solid(leds, NUM_LEDS, color);
}
// Мигает всеми светодиодами одним цветом
void effectBlink(CRGB color, uint8_t blinkSpeed) {
static bool state = false;
if (millis() % blinkSpeed == 0) {
state = !state;
fill_solid(leds, NUM_LEDS, state ? color : CRGB::Black);
}
}
// Радужный эффект
void effectRainbow(uint8_t rainbowSpeed) {
static uint8_t hue = 0;
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CHSV(hue + i * (255 / NUM_LEDS), 255, 255);
}
hue += rainbowSpeed;
if (hue > 255) hue = 0;
}
// Эффект "бегущие огни"
void effectRunningLights(CRGB color, uint8_t speed) {
static int position = 0;
fill_solid(leds, NUM_LEDS, CRGB::Black); // Гасим все светодиоды
leds[position] = color; // Зажигаем один светодиод
position++;
if (position >= NUM_LEDS) {
position = 0;
}
delay(speed);
}
// Случайные цвета для каждого светодиода
void effectRandomColors() {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CHSV(random(255), 255, 255);
}
}
Описание кода:
#include <FastLED.h>
: Подключает библиотеку FastLED, которая упрощает работу с адресными светодиодными лентами.#define
:Определяет константы для настроек.DATA_PIN
: Пин Arduino, к которому подключен Data In ленты.NUM_LEDS
: Количество светодиодов в ленте.BRIGHTNESS
: Глобальная яркость (0-255).COLOR_ORDER
: Порядок цветов (обычно GRB для WS2812B). Может потребоваться изменить (например, на RGB) в зависимости от вашей ленты.CRGB leds[NUM_LEDS]
: Объявляет массивleds
типаCRGB
. Этот массив хранит значения красного, зеленого и синего цветов для каждого светодиода в ленте.currentEffect
,lastChangeTime
,effectDuration
: Переменные для управления переключением эффектов.setup()
:FastLED.addLeds<WS2812B, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
: Инициализирует библиотеку FastLED, указывая тип ленты (WS2812B), пин данных, порядок цветов, массив светодиодов и их количество.setCorrection(TypicalLEDStrip)
оптимизирует цвета для стандартных светодиодных лент.FastLED.setBrightness(BRIGHTNESS);
: Устанавливает глобальную яркость.FastLED.clear();
: Гасит все светодиоды.FastLED.show();
: Отправляет данные на ленту (необходимо после изменения цветов).Serial.begin(9600);
: Инициализация последовательного порта для отладки.loop()
:if (millis() - lastChangeTime > effectDuration)
: Проверяет, прошло ли достаточно времени для смены эффекта.currentEffect = (currentEffect + 1) % 5;
: Переключает на следующий эффект (циклически, от 0 до 4).switch (currentEffect)
: Выбирает и запускает соответствующий эффект.FastLED.show();
: Отправляет данные на ленту.delay(10);
: Небольшая задержка для стабильной работы.- Функции эффектов (
effectSolidColor
,effectBlink
,effectRainbow
,effectRunningLights
,effectRandomColors
): Каждая функция реализует свой уникальный световой эффект.
Как использовать:
- Установите библиотеку FastLED в Arduino IDE (Sketch -> Include Library -> Manage Libraries… -> Search for “FastLED” -> Install).
- Загрузите скетч в Arduino.
- Наблюдайте за гирляндой и наслаждайтесь эффектами!
Настройка:
NUM_LEDS
: Измените это значение, чтобы соответствовало количеству светодиодов в вашей ленте.DATA_PIN
: Измените это значение, если вы используете другой цифровой пин Arduino.BRIGHTNESS
: Настройте яркость гирлянды.effectDuration
: Измените длительность каждого эффекта (в миллисекундах).COLOR_ORDER
: Если цвета отображаются неправильно, попробуйте изменитьCOLOR_ORDER
(например, наRGB
).- Параметры внутри функций эффектов: Измените значения
blinkSpeed
,rainbowSpeed
и другие параметры, чтобы настроить поведение каждого эффекта.
Дополнительные возможности:
- Добавьте больше эффектов, создав новые функции
effect...()
. - Используйте кнопки или потенциометры для управления скоростью, яркостью и выбором эффекта в реальном времени.
- Используйте датчики (например, датчик звука) для управления эффектами в зависимости от окружающей среды.
- Добавьте поддержку WiFi или Bluetooth для управления гирляндой с мобильного приложения.
Этот скетч - отправная точка. Вы можете расширить и настроить его в соответствии со своими потребностями и творческими идеями. Удачи!
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.