Cheetos & Gridkid
Cheetos Cheetos
Эй, Грит, когда-нибудь думал о том, чтобы взломать граффити и добавить туда подсветку и дополненную реальность? Давай нарисуем хаос, который работает на коде.
Gridkid Gridkid
Звучит безумно, но вполне реально – надо просто сопоставить пиксели с программируемой LED-матрицей, а сверху наложить дополненную реальность, которая реагирует на движение или звук. Сложность в том, чтобы код синхронизировался со слоями краски, чтобы этот хаос казался живым, а не глючным. Помогу с микроконтроллером и шейдером?
Cheetos Cheetos
Конечно, давай характеристики. Я запилю микроконтроллер, подправлю шейдер и заставлю краску светиться как неоновое сердце. Превратим стену в живой рейв.
Gridkid Gridkid
Окей, бери ESP32‑CAM на мозг — быстрый Wi-Fi, хватит GPIO и приличная камера для AR-триггеров. Сочетай это с лентой WS2812B, 300 светодиодов на метр, 24-битный цвет, частота обновления 60 Гц. Питание: блок питания 12V, 5A, затем понижай до 5V для ленты. В скетче держи буфер пикселей в циклический очередь, используй FastLED для растеризации и загрузи GLSL-фрагментный шейдер, который считывает градации серого из карты глубины с камеры, чтобы модулировать оттенок. Старайся держать частоту кадров ниже 30 fps, чтобы избежать рывков. Это основной стек — дай знать, если нужны схемы подключения или фрагменты шейдеров.
Cheetos Cheetos
Вот это мощная штука, братан. Выложи схему подключения, чтобы я глянул на помехи, и кинь кусочек шейдера, который гармонирует с картой глубины. Я превращу это в вибрацию, которую публика почувствует. Давай заставим эту краску оживать.
Gridkid Gridkid
Короче, ESP32‑CAM V2, блок питания 12 В, БП 5 В 5 А, понижающий преобразователь 12 В в 5 В, 5 В на полоску WS2812B, шина питания 3 А, опорная точка 5 В, земля 5 В, логика 5 В, логика 3.3 В, земля 3.3 В, опорная точка 3.3 В. Выводы ESP32: GPIO5 (DATA OUT на полоску как DIN), GPIO4 (TX на модуль камеры), GPIO12 (VSYNC на камеру), GPIO13 (HSYNC на камеру), GPIO14 (MCLK на камеру). Питание камеры VCC к 3.3 В, земля камеры к земле, Y на GPIO12, U на GPIO13, V на GPIO14 и так далее. Поставь сдвигатель уровней (например, 74LV125) на линии передачи данных, чтобы преобразовать 3.3 В в 5 В. Добавь конденсатор 100 µF на линии 5 В рядом с полоской, 0.1 µF на линии 3.3 В, и резистор 220 Ω на линии данных к земле. Вот кусочек шейдера (GLSL fragment, предполагает текстуру глубины 'depthTex' и униформу времени 'u_time'): ```glsl precision mediump float; uniform sampler2D depthTex; uniform float u_time; varying vec2 v_texCoord; void main() { float depth = texture2D(depthTex, v_texCoord).r; float hue = mod(u_time + depth * 5.0, 1.0); vec3 rgb = hsv2rgb(vec3(hue, 0.8, 0.9)); float pulse = sin(u_time * 10.0 + depth * 20.0) * 0.3 + 0.7; gl_FragColor = vec4(rgb * pulse, 1.0); } ``` Включи простую функцию hsv2rgb в шейдер, если нужно. Это заставит цвета LED меняться в зависимости от глубины и времени, создавая эффект дыхания и вибрации на стене.
Cheetos Cheetos
Отличная схема, просто бомба. Только перепроверь синхронизацию сдвига уровня на линии светодиодов, и следи за питанием в 12 вольт – даже небольшой шум может испортить всю атмосферу RGB. Если цвет начнёт глючить, попробуй заменить резистор 220 Ом на 330 Ом, дай полосе нормально работать. Готов запускать стену?
Gridkid Gridkid
Отлично – я подключил преобразователь уровня с резистором подтяжки 220 Ом, но если цвета начнут подергиваться, переведу на 330 Ом. 12 вольт стабилизируются конденсатором на 100 мкФ и небольшим ферритовым бусиной, так что полоса должна быть устойчивой. Давай запустим и посмотрим, как будет работать. Готов, когда ты.
Cheetos Cheetos
Давай запустим, посмотрим, как стена оживет. Нажми на кнопку, посмотри, как цвета совпадут. Если что-то пойдет не так – быстро подкорректируем сигнал. Ну что, сейчас зажжется.
Gridkid Gridkid
Alright, hit that power button. Watch the LEDs flicker on—if the colors lock in smooth, you’re good. If anything looks jittery or the hue glitches out, just swap the 220 Ω to 330 Ω and let the strip settle again. Keep an eye on the voltage drop at the strip’s end; a tiny ripple can throw off the RGB sync. Let’s see that paint breathe!