Wefix & DollyQueen
Привет, Долли. Я тут немного потыкал с датчиками движения и светодиодными лентами – подумал, можно сделать пол, как живой световой спектакль, который будет синхронизироваться с твоей хореографией. Представь, как ритм буквально светится, когда ты танцуешь. Как думаешь, стоит попробовать это реализовать?
Ох, милый, это просто огонь! Представь: каждый шаг – прожектор, каждый бит – пульс неоновых огней… мои ноги будут рисовать пол как живую, дышащую мелодию. Давай включим датчики на полную, синхронизируем светодиоды под ритм и превратим эту комнату в диско-подиум для души. Ты принеси код, я – хореографию, и вместе мы заставим пол петь!
Отлично! Я набросаю небольшой скетч для ESP32, который будет считывать ИК-датчик приближения (или простой оптический энкодер, положенный на пол) и управлять светодиодной лентой WS2812B. Идея в том, чтобы увеличивать яркость ленты всякий раз, когда датчик фиксирует шаг, и чтобы лента постепенно затемнялась, синхронизированная с простым ритмом. Вот основная часть:
```cpp
#include <FastLED.h>
#define LED_PIN 5 // GPIO для светодиодной ленты
#define NUM_LEDS 60 // количество светодиодов (подкорректируйте под длину вашей ленты)
#define BRIGHTNESS 128
#define IR_PIN 34 // GPIO, подключенный к выходу вашего ИК-датчика
CRGB leds[NUM_LEDS];
int lastPulse = 0;
int pulseDelay = 250; // как долго импульс остается ярким (мс)
void setup() {
Serial.begin(115200);
pinMode(IR_PIN, INPUT_PULLUP); // ИК-датчик обычно выдает LOW, когда нога близко
FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
FastLED.setBrightness(BRIGHTNESS);
FastLED.clear();
FastLED.show();
}
void loop() {
bool footDetected = !digitalRead(IR_PIN); // LOW означает, что нога обнаружена
if (footDetected) {
lastPulse = millis(); // сброс таймера импульса
setPulse(255); // максимальная яркость при обнаружении
} else {
// постепенное затухание, если нет пульса
fadeOut();
}
// Простая синхронизация с ритмом: переключение каждые 500 мс (можно изменить или заменить на аудиовход)
static unsigned long lastBeat = 0;
if (millis() - lastBeat > 500) {
lastBeat = millis();
beatPulse();
}
FastLED.show();
delay(20); // небольшая задержка, чтобы цикл был быстрым
}
void setPulse(byte brightness) {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CHSV(0, 0, brightness); // белый импульс, измените оттенок, если хотите цвет
}
}
void fadeOut() {
static byte currentBrightness = 255;
if (millis() - lastPulse > pulseDelay) {
if (currentBrightness > 0) {
currentBrightness = max(0, currentBrightness - 10);
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CHSV(0, 0, currentBrightness);
}
}
}
}
void beatPulse() {
// простой эффект ритма: короткая вспышка на каждом ударе
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CHSV(0, 0, 255); // яркая вспышка
}
FastLED.show();
delay(30); // короткая вспышка
fadeOut(); // дайте ей погаснуть
}
```
### Что это делает
- **Обнаружение шагов**: Когда ИК-датчик переходит в состояние LOW (нога над ним), лента загорается на полную яркость.
- **Затухание импульса**: Если датчик остается в состоянии покоя, светодиоды постепенно тускнеют.
- **Синхронизация с ритмом**: Каждые полсекунды происходит короткая вспышка белого цвета, имитирующая ритм. Эту часть можно заменить на модуль реального детектора бита или микрофонный вход для более точной синхронизации.
### Что можно подкорректировать
- **Датчик**: Если у тебя есть датчик давления или магнитный концевик, просто измени логику `IR_PIN`.
- **Длина ленты**: Подкорректируй `NUM_LEDS` под длину твоей ленты.
- **Оттенок**: Измени `CHSV(0,0,brightness)` на что-то вроде `CHSV(160,255,brightness)` для синего, и т.д.
- **Источник ритма**: Замени жестко заданный интервал в 500 мс на реальный детектор битов для создания настоящей танцевальной атмосферы.
Загрузи это на свой ESP32, подключи светодиодную ленту к пину 5, подключи ИК-датчик к пину 34, и ты увидишь, как пол подсвечивается в такт твоим движениям. Скажи, как ощущается хореография — я с удовольствием подкорректирую тайминги или цветовую палитру, если понадобится!
Здорово! Мне очень нравится идея с быстрым пульсом – ощущение, будто каждый шаг в софитах. Только нужно немного подкрутить атмосферу: замени ту статичную паузу в 500 миллисекунд на модуль аудио-в-ритм или микрофон, чтобы вспышка следила за ритмом, сделай переливы цветов в CHSV, чтобы получился радужный след, и, может, увеличь скорость затухания, когда ноги нет на полу, чтобы грув не терялся. Соединяй, запускай и пусть пол светится твоей хореографией – превратим всё пространство в живую, дышащую сцену!
Вот небольшая доработка: я подстроила звучание под микрофон и добавила радужный оттенок. Также сгладила завершение, чтобы ритм оставался мягким, когда ты отрываешь ногу от пола.
Вот это я люблю – настоящий бит, волны цвета, плавный уход. Слушай, ещё мысль: может, добавь небольшой фильтр нижних частот на вход микрофона, чтобы порог не срабатывал от случайного щелчка, и подстрой beatInterval, чтобы он точно совпадал с тем, что ты слышишь. И если светодиоды начнут казаться слишком яркими на 200, можно уменьшить яркость, когда нога не на датчике. Ну а когда попробуешь – дай полу танцевать в тандеме с твоими движениями! Время на сцену!
Загрузишь это, давишь в такт, и получишь более чёткую синхронизацию с ритмом, радужные волны и более плавное затухание, которое будет соответствовать настоящему ритму. Наслаждайся превращением комнаты в живой концертный зал!