Вечером работаешь с текстом, и белый фон редактора бьёт по глазам не сам по себе, а контрастом: зрачок настроен на тёмную комнату, а в поле зрения — светящаяся прямоугольная дыра. Лечится не яркостью монитора, а светом за ним: bias-подсветка выравнивает яркость фона, и глаза перестают зажиматься на каждом переключении окна. Самый дешёвый вариант такой стены — лента WS2812 за монитором: не амбилайт с зеркалированием кадра, где ПК шлёт цвета по Adalight и нужен софт, а автономная сцена на Arduino — включил, и она живёт сама, не требуя ни кабеля до системника, ни программ.
Разберём её по-взрослому: сколько пикселей реально нужно и как их разложить, какой ток в каком сценарии ждать от блока питания, как строить ночной режим с тёплым приглушённым светом и как подключать датчик освещённости так, чтобы лента не стрекотала на пороге сумерек. Питание — половина успеха этой конструкции, и мы посчитаем его по-честному, а не «повезёт».
Геометрия: сколько пикселей за монитором
База расчёта — плотность ленты: стандарт — 60 пикселей на метр, эконом — 30. Монитор 24-27 дюймов имеет периметр около 1,8-2,1 метра, но нижнюю грань не подсвечивают — она отражается в столе и режет глаза снизу. Три стороны без низа — это 1,2-1,5 метра, то есть 60-90 пикселей при плотности 60/м. Минимум, с которого есть смысл, — около 30 пикселей: меньше — и по углам остаются провалы, свет перестаёт быть «стеной» и превращается в кайму. Эконом-лента 30/м удешевляет конструкцию вдвое, но точки на ней видно вплотную — этот вопрос решается не плотностью, а расстоянием.
Расстояние до стены — главный диффузор. Пиксель WS2812 — точечный источник, и лента, приклеенная вплотную к монитору, рисует на стене бисер. Зазор 3-5 сантиметров — кронштейн, ножки-стойки, полочка — размывает точки до ровного поля; альтернатива — алюминиевый профиль с молочной заглушкой, заодно снимающий тепло. На стене с фактурой (штукатурка, кирпич) бисер прячется сам, на гладкой — только диффузор. Клеить стоит на тыльную раму монитора с запасом на углы: повороты 90 градусов на гибкой ленте делаются срезом и пайкой, резкий изгиб на уголке ломает контактную дорожку.
Питание по такой длине — уже не «просто воткнуть». 90 пикселей даже в приглушённых сценах удобно кормить с двух сторон: подача с одного края на длинной ленте даёт заметный спад яркости к дальнему углу, инжекция со второго конца закрывает вопрос — механика разобрана в уроке про блок 5 В и инжекцию. Обвязка стандартная и обязательная: резистор 330-470 Ом в линию сигнала и конденсатор 1000 мкФ поперёк питания у входа — как в уроке про обвязку ленты, на длине в полтора метра без них лента подмигивает при смене картинки.
Ток по сценариям и ночной режим
Считать ток нужно от худшего случая, но жить — по реальному. Пиксель WS2812B в белом на полной яркости берёт до 50-60 мА; 90 пикселей — теоретические 5,4 ампера, и именно эта цифра пугает новичков. Но bias-сцена никогда не бывает белой и полной: рабочий диапазон — 30-120 из 255 яркости, тёплый цвет с приглушённым синим. На 90 пикселях при 80/255 это порядка 0,6-0,9 ампера в пике, ночью при 40/255 — 0,3-0,4. Блок 5 В 2 А от телефонной зарядки закрывает весь быт такой подсветки с запасом, а автолимит FastLED ставит страховку на стороне скетча: setMaxPowerInVoltsAndMilliamps(5, 1800) сам прижмёт кадр, если эффект выйдет за потолок — механика ограничителя разобрана в уроке про setMaxPower.
А вот USB-порт монитора или системника — ловушка: у порта лимит 0,5-0,9 ампера, и 90 пикселей его съедают на первой же яркой сцене — лента начнёт гаснуть картинами, а порт рискуют уронить в защиту. Правило простое: либо отдельный блок питания, либо честный потолок в скетче с запасом вниз — FastLED.setBrightness в связке с расчётом бюджета из урока про яркость и ток. И «запас» не должен означать «максимальная яркость в настройках, а библиотека сама ужмёт»: автолимит красит честно, но ужатие цвета лучше видеть на входе.
Ночной режим — половина пользы bias-света. Лента, горящая днём нейтральным белым на 120, вечером обязана садиться к 40-60 и теплеть: оттенок 20-30 при насыщенности 100-140 даёт тёплый белый с малой долей синего, который в темноте не бьёт по глазам и не сбивает засыпание. Плавность перевода важна не меньше цвета: скачок яркости в темноте заметнее, чем днём, поэтому яркость ведут к цели по чуть-чуть — два-три пункта за кадр, механика та же, что в уроке про плавный диммер. А хранить любимые уровни после перезагрузки — дело EEPROM из урока про ночник с режимами.
Про цветную сторону bias-света — чуть цифр. Монитор откалиброван к белой точке около 6500 K, и дневной фон стоит держать рядом: контраст двух белых заставляет глаз перефокусироваться на каждом переводе взгляда. На WS2812 это оттенок около 30 при низкой насыщенности 20-60 — почти нейтральный свет. Ночью приоритет другой: доля синего режется, оттенок уезжает к 20-25, и пусть строгого соответствия с экраном нет — сон дороже колористической аккуратности. Сводить баланс я научился по фотографии: экран и стена в одном кадре показывают разницу белых честнее, чем глаз, который адаптируется за секунды.
#include <FastLED.h>#define LED_PIN 6#define NUM_LEDS 90 CRGB leds[NUM_LEDS];int mode = 0; // 0 - день, 1 - вечер, 2 - кино (кнопкой)int curV = 120; // текущая яркость, едет к цели по чуть-чутьint prevBtn = HIGH;unsigned long last = 0; void setup() { FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS); FastLED.setMaxPowerInVoltsAndMilliamps(5, 1800); // потолок блока 5 В 2 А pinMode(2, INPUT_PULLUP); Serial.begin(115200);} void loop() { if (millis() - last < 30) return; last = millis(); // кнопка: кино-режим поверх датчика, повторное нажатие возвращает дневной int btn = digitalRead(2); if (prevBtn == HIGH && btn == LOW) { mode = (mode == 2) ? 0 : 2; Serial.print("mode="); Serial.println(mode); } prevBtn = btn; // датчик смотрит В КОМНАТУ, а не на подсветку: иначе сам себе поднимает свет int light = analogRead(A1); if (mode != 2) { if (light < 300) { mode = 1; } // стемнело if (light > 500 && mode == 1) { mode = 0; } // рассвет: мёртвая зона 300-500 } // цели режима: яркость, насыщенность, оттенок int tV = 120, tS = 20, tH = 30; // день: почти нейтральный белый if (mode == 1) { tV = 55; tS = 130; tH = 25; } // вечер: тёплый приглушённый if (mode == 2) { tV = 28; tS = 160; tH = 22; } // кино: глубокий тёплый if (curV < tV) curV += 2; // ведение яркости без скачков if (curV > tV) curV -= 2; if (abs(curV - tV) < 2) curV = tV; fill_solid(leds, NUM_LEDS, CHSV(tH, tS, curV)); FastLED.show();}Разбор — три решения, из которых складывается спокойная лента. Гистерезис: включение ночного режима по порогу 300, выключение по 500, и между ними — мёртвая зона, где ничего не меняется. Без неё на закате лента стрекочет: освещённость болтается у порога, режим дёргается туда-сюда каждые несколько секунд, и вся плавность ведения яркости умирает об это дребезжание. Ведение яркости шагом два: переход день-вечер занимает секунды, глаз его не ловит, а лента ни разу не мигнёт. Кнопка-переключатель кино-режима: она не меняет уровни, а лишь переключает цель, к которой яркость уже едет — поэтому нажатие тоже выглядит плавным.
Мелочь, на которой я обжёгся: датчик, приклеенный рядом с лентой, видит её же свет. Получалась петля — подсветка подняла освещённость, датчик решил, что рассвет, режим вернулся в дневной, лента подняла яркость ещё, — и всё это дрожало с периодом в пару секунд. Фотодатчик должен смотреть в комнату или в стену, подальше от луча, и лучше с небольшим экраном из подручного. Симулятор ниже повторяет ту же логику на ручке: покрутите её через пороги и проверьте мёртвую зону.
В симуляторе прогоните два сценария. Медленная крутка ручки через порог вниз: лента начинает теплеть и гаснуть сразу, как только датчик пересёк 300, но делает это несколько секунд — глаз видит закат, а не переключение. Обратная крутка: обратного перехода до 500 не будет — вот она, мёртвая зона, и именно поэтому на реальном закате лента не стрекочет. Кнопка кино-режима проверяется в темноте: она перекрывает датчик и уводит яркость в самый тусклый уровень, а после отпускания лента возвращается к тому, что видит датчик, — не к тому режиму, который был до нажатия.
Цифры для платы те же, что в скетче: день 120 из 255 нейтральным, вечер 55 тёплым, кино 28. На 90 пикселях это ток порядка 0,6-0,9 ампера днём и 0,15-0,2 ночью — блок 5 В 2 А живёт с запасом в любой из веток. И последнее: bias-подсветка может жить и в автоматике без датчика — по расписанию из часов реального времени, как это устроено в ночных режимах, — но датчик честнее: он реагирует на шторы, лампы и пасмурный день, о которых расписание не знает.
Из цифр таблицы вытащите главный вывод: у bias-сцены почти нет пиков. В отличие от эффектов с резкими кадрами ток здесь меняется на проценты за минуту, и блок 5 В 2 А живёт в комфортной трети мощности. Это освобождает от толстых кабелей и инжекции: полтора метра ленты с подачей с одного края при сотнях миллиампер даже не проседают заметно. Мой стенд с девяноста пикселями год висит на зарядке от роутера, и ни одного рестарта за зиму.
| Сценарий | Яркость (из 255) | Цвет | Ток при 90 пикселях |
|---|---|---|---|
| День, работа за столом | 100-120 | Нейтрально-тёплый, насыщенность 20-40 | 0,6-0,9 А |
| Вечер, кино и чтение | 40-60 | Тёплый белый, оттенок 25, насыщенность 130 | 0,25-0,4 А |
| Ночь / кино-режим | 20-35 | Глубокий тёплый, оттенок 22, насыщенность 160 | 0,1-0,2 А |
| Витрина / реклама | 150-255 | Любые сцены — это уже не bias | 1,2-5,4 А: отдельный БП |
- 1. Сколько пикселей WS2812B примерно потянет USB-порт с лимитом 500 мА?
- 2. Зачем датчику света гистерезис — два порога вместо одного?
- 3. Монитор 27 дюймов, лента 60 пикселей на метр, три стороны без нижней грани — сколько примерно пикселей?
- 4. Почему ночному режиму bias-подсветки дают тёплый низконасыщенный цвет?
- 5. 90 пикселей на яркости 55/255 тёплым цветом — какой ток ждать?
- Три стороны без нижней грани: монитор 24-27" — это 60-90 пикселей при плотности 60/м, минимум смысла — около 30
- Зазор 3-5 см до стены или профиль с молочной заглушкой убирают бисер точек — плотность ленты решает меньше, чем диффузор
- Ток считают по сценарию: пиксель — до 50-60 мА в белом, но bias-сцена живёт на 30-120 из 255 и тёплом цвете — сотни миллиампер на всю стену
- Ночной режим — тёплый оттенок 20-30 при насыщенности 100-160 и яркости 30-60, с ведением яркости по чуть-чуть
- Датчик света смотрит в комнату, а не на ленту; гистерезис 300/500 держит мёртвую зону, без которой порог стрекочет
Частые вопросы по теме урока
- Сколько пикселей WS2812B примерно потянет USB-порт с лимитом 500 мА?
- Пиксель в белом берёт до 50-60 мА: 500 мА хватает на восемь полных. Автолимит с приглушённой сценой поднимает счёт, но без лимита порт закрывается на первой яркой заливке. Около восьми на полной яркости; с автолимитом и приглушением — заметно больше
- Зачем датчику света гистерезис — два порога вместо одного?
- Освещённость у порога колеблется — тень, мигание лампы. Мёртвая зона между порогами включения и выключения не даёт режиму дребезжать на границе сумерек. Без него у порога режим стрекочет: освещённость болтается, и лента дёргается день-вечер
- Монитор 27 дюймов, лента 60 пикселей на метр, три стороны без нижней грани — сколько примерно пикселей?
- Периметр монитора 24-27 дюймов — 1,8-2,1 метра, минус нижняя грань — 1,2-1,5 метра. При плотности 60/м это 60-90 пикселей, а минимум осмысленного — около 30. 60-90 — периметр 1,2-1,5 метра без низа
- Почему ночному режиму bias-подсветки дают тёплый низконасыщенный цвет?
- В темноте важен контраст между зрачком и полем зрения. Тёплый приглушённый фон уравнивает яркость фона без синей компоненты, которая сильнее всего влияет на сон. Тёплый свет с малой долей синего меньше бьёт по глазам в темноте и меньше мешает засыпанию
- 90 пикселей на яркости 55/255 тёплым цветом — какой ток ждать?
- Худший случай 50-60 мА на пиксель — это белый на полной яркости. Приглушённая тёплая сцена берёт десятую-третью часть этого, и 2-амперный блок живёт с запасом. Несколько сотен миллиампер: яркость и приглушённый синий канал срезают ток в разы