Дискотека Thunderflash для DJ-контроллера Hercules........
Мои дети увидели микшерный пульт Hercules на сайте Printables и захотели немедленно его купить. Но вместо того, чтобы купить его сразу, мы решили сначала попробовать его выиграть. Чтобы придумать отличную идею, мы провели опрос в классе, чтобы выяснить, что будет лучше. Победившая идея? Конечно, мигающие огни дискотеки!
Мы решили использовать светодиодную ленту Neopixel WS2812B с возможностью управления ею с помощью Raspberry Pi Pico или ESP32 WROOM. Свет можно запрограммировать заранее или использовать проект WLED (https://kno.wled.ge/), что позволит другим управлять им.
Вокруг держателя будет размещено около 50 светодиодов, то есть нам понадобится примерно 1 метр светодиодной ленты WS2812B (60 светодиодов/м, ширина 10 мм, 5 В постоянного тока). Все можно запитать от павербанка.
Держатель собирается с помощью дюбел��й, которые можно либо приклеить, либо просто запрессовать. Вместо приклеивания переднего логотипа были добавлены два отверстия для дюбелей для удобства крепления.
Ниже приведен пример кода для управления освещением, аналогичный видео-демонстрации.
Надеюсь, кто-то найдет это полезным.
Пример кода с использованием Arduino IDE с модулем ESP32-WROOM-DA:
#include
#define LED_PIN 13 // Контакт, подключенный к светодиодной ленте
#define NUM_LEDS 51 // Количество светодиодов в ленте
#define BRIGHTNESS 127 // Установка яркости (0-255). Уменьшите его до половины, если питание USB плохое.
Полоса Adafruit_NeoPixel (NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
недействительная настройка() {
полоса.начать();
полоса.шоу(); // Инициализируем все пиксели как «выключенные»
Strip.setBrightness(ЯРКОСТЬ);
}
недействительный цикл() {
шедеврДискоШоу(30000); // Диско-шоу на 30 секунд
}
недействительный шедеврDiscoShow (интер��ал продолжительности) {
unsigned long startTime = millis();
while (millis() — startTime <продолжительность) {
int эффект = случайный (1, 7); // Выбираем случайный эффект
переключатель (эффект) {
случай 1:
стереоБласт(); // Синхронизированный стерео��онический звук
перерыв;
случай 2:
случайныеBeatBlasts(); // Мигает агрессивный случайный ритм
перерыв;
случай 3:
полицейский Строб(3000); // Хаотичный стробоскоп в полицейском стиле
перерыв;
случай 4:
волновой эффект(); // Модель плавной волны
перерыв;
случай 5:
басDropExplosion(); // Эпическое падение басов мигает
перерыв;
случай 6:
молнияШторм(); // Непредсказуемый эффект молнии
перерыв;
}
}
}
недействительный стереоБласт () {
for (int i = 0; i Strip.setPixelColor(i, Strip.Color(255, 0, 0)); // Левая половина Красная
Strip.setPixelColor(NUM_LEDS — 1 — i, Strip.Color(0, 0, 255)); // Правая половина Синяя
полоса.шоу();
задержка(10);
}
задержка(80);
полоса.очистить();
полоса.шоу();
задержка(120);
}
недействительными случайнымиBeatBlasts() {
для (int я = 0; я <6; я++) {
полоса.очистить();
for (int j = 0; j if (random(0, 5) > 2) { // Случайный спред
Strip.setPixelColor(j, Strip.Color(случайный(100, 255), случайный(100, 255), случайный(100, 255)));
}
}
полоса.шоу();
задержка(60);
полоса.очистить();
полоса.шоу();
задержка(200);
}
}
void PoliceStrobe (int продолжительность) {
unsigned long startTime = millis();
while (millis() — startTime <продолжительность) {
for (int я = 0; я Strip.setPixelColor(i, (random(0, 3) > 1)? Strip.Color(255, 0, 0): Strip.Color(0, 0, 255));
}
полоса.шоу();
задержка(50);
полоса.очистить();
поло��а.шоу();
задержка(50);
}
}
недействительный waveEffect () {
for (int j = 0; j < 256; j += 30) {
for (int я = 0; я int colorVal = (i * 256/NUM_LEDS + j) & 255;
Strip.setPixelColor(i, Strip.Color(colorVal, 255 — colorVal, colorVal / 2));
}
полоса.шоу();
задержка(50);
}
}





























