Эмулятор RGB-светодиода онлайн: подберите цвета без платы
RGB-светодиод — деталь, на которой застревают дважды: сначала при подборе оттенков (какие коды дают тёплый белый?), потом при подключении (общий анод против общего катода). Электрику и анодный тупик по ножкам разбирает урок про RGB-светодиод — а здесь методика подбора цветов до пайки: крутите коды трёх каналов 0-255, смотрите оттенок на стенде и складывайте свою таблицу любимых цветов.
Стенд открывается в симуляторе без регистрации и установки: RGB-светодиод добавляется на макетку вручную — компонент с тремя пинами каналов, — скетч шлёт analogWrite на каждый, и оттенок меняется в реальном времени. Ниже — скетч-проба с setColor, палитра, «дыхание» и честная таблица, где кончается экран и начинается железо.
Что видно в эмуляторе сразу
Стенд рисует честную картину смешения: у компонента RGB три пина каналов, скетч отдаёт analogWrite с числом 0-255 на каждый, и линза загорается ровно тем оттенком, который соберут три луча. Схему с резисторами собирать не нужно — провода от пинов к светодиоду ложатся сами, а в панели рядом с линзой печатаются коды R, G и B: сразу видно, что именно ушло в светодиод.
- Смешение каналов: красный плюс зелёный дают жёлтый, зелёный с синим — бирюзовый, красный с синим — пурпурный, все три на максимуме — белый. Аддитивная механика на экране та же, что в кристалле.
- Коды каналов: панель показывает три числа 0-255 рядом с оттенком — сверяйте с тем, что отправил скетч.
- Пороги для эффектов: половина канала (127) видна глазами — ступени яркости удобно ловить на середине шкалы.
- Плавные переходы: цикл в скетче гонит число вверх и вниз — оттенок едет вслед, как на живой сборке.
- Нулевой канал: гаснет ровно при 0 — удобно ловить опечатку в номере пина или перепутанные каналы.
Скетч-проба: три канала и setColor
const int PIN_R = 9;const int PIN_G = 10;const int PIN_B = 11; void setup() { pinMode(PIN_R, OUTPUT); pinMode(PIN_G, OUTPUT); pinMode(PIN_B, OUTPUT); Serial.begin(9600);} void setColor(int r, int g, int b) { // общий катод: числа прямые analogWrite(PIN_R, r); analogWrite(PIN_G, g); analogWrite(PIN_B, b); Serial.print("R="); Serial.print(r); Serial.print(" G="); Serial.print(g); Serial.print(" B="); Serial.println(b);} void loop() { setColor(255, 0, 0); // красный delay(1000); setColor(255, 100, 0); // оранжевый delay(1000); setColor(0, 150, 150); // бирюзовый delay(1000); setColor(255, 150, 50); // тёплый белый delay(1000);}Монитор печает тройку кодов раз в секунду, линза на стенде красит в тот же оттенок — связь «код → цвет» видна без единого провода. Цвета из пробы — рабочие заготовки из практики: оранжевый 255-100-0, бирюзовый 0-150-150, тёплый белый 255-150-50. Свою палитру удобнее собирать в лаборатории ниже: подвигали ползунки — переписали тройку в скетч.
Палитра до пайки: подбор оттенков
Подбор цвета глазами на макетке мучителен: перекинул провода, поправил число, перезалил скетч — и так по кругу. В браузере цикл сжимается до секунды: ползунок, оттенок, число в таблицу. Полезная привычка — вести список находок в комментариях над setColor: три числа и название. Через месяц, вернувшись к ночнику или подсветке, вы скажете себе спасибо: спотыкаетесь не о подбор, а о двухминутную сверку с готовой таблицей.
Три канала R/G/B смешиваются в цвет — как в скетче analogWrite().
Подгружаем интерактив…
Лаборатория выше крутит те же три канала 0-255, что и скетч: оттенок собирается из трёх лучей, числа справа — готовые аргументы для analogWrite. Подобрали оттенок — переносите тройку в код без пересчётов: шкала у лаборатории и у analogWrite одна. Заодно проверьте сомнительные цвета: «телесный» и «тёплый белый» на глаз в браузере отсеиваются за минуту, а на макетке каждый стоил бы перезаливки.
Дыхание и плавные переходы
const int PIN_R = 9; void setup() { pinMode(PIN_R, OUTPUT);} void loop() { for (int b = 0; b <= 255; b += 5) { // вдох analogWrite(PIN_R, b); delay(5); } for (int b = 255; b >= 0; b -= 5) { // выдох analogWrite(PIN_R, b); delay(5); }}Шаг 5 с паузой 5 мс — нейтральный старт: пульсация спокойная и не дёргает глаз. Захотите медитативный ночник — поднимите паузу до 20-30 мс или срежьте потолок до 180, чтобы линза никогда не выходила на полную. Для лент WS2812 то же дыхание делают по-другому — синусом и beatsin8 — приём разобран в уроке про дыхание LED; принцип «число едет — яркость следует» общий, поэтому пробовать его в браузере можно прямо здесь. А про то, почему шаг и пауза вообще управляют плавностью, — в уроке про ШИМ и яркость.
Честная граница: симулятор против железа
| Проверка | Симулятор | Только железо |
|---|---|---|
| Смешение каналов 0-255 | целиком: оттенок из трёх кодов | то же |
| Коды R/G/B при отладке | числами в панели рядом с линзой | то же через Serial.print |
| Плавные переходы и «дыхание» | да, вслед за скетчем | то же |
| Общий анод (инверсия 255 - x) | не моделируется: логика прямая | да — увидите цвета «наоборот» |
| Ток канала и яркость кристаллов | нет: любая цифра светит одинаково | да: ~14 мА красный, ~9 мА зелёный и синий при 220 Ом |
| Резисторы 220-330 Ом на канал | не нужны: стенд рисует связь | да, на каждый цветовой вывод |
Граница простая: всё, что живёт в коде — смешение, пороги, переходы, палитра, — проверяется в браузере целиком; ток, неравномерность кристаллов, резисторы и перепутанный общий вывод — только на сборке. Отсюда порядок: палитру и эффекты добиваете на экране, финальную сверку белого делаете на макетке. Отдельная тонкость — анод: стенд рисует прямую логику общего катода, поэтому скетч с инверсией 255 - x покажет в браузере цвета «наоборот», а на плате встанет на место. Это не сбой стенда, а честная граница: инверсию он не моделирует.
Грабли RGB-схемы
- Общий анод вместо катода: прошу зелёный — горит пурпурный, всё «наоборот». Лечение из урока: общий вывод на 5V и инверсия 255 - x в setColor — в браузере эту строку стенд покажет перевёрнутой, на плате она спасает.
- Розоватый белый: красный кристалл в дешёвых корпусах ярче остальных. Лечится притушением красного канала (220 вместо 255) или резистором 330 Ом именно на красную ветку — в симуляторе белый идеален, эта ловушка живёт на железе.
- Один резистор на все каналы: цвета начинают влиять друг на друга, яркость проседает при зажатых трёх. Резистор — на каждый цветовой вывод, общий провод — без резистора.
- Пин без ШИМ: analogWrite на пине без тильды даёт только 0 и 255 — «плавность» превращается в мигание. На Uno ШИМ-пины: 3, 5, 6, 9, 10, 11.
- Пин обычного светодиода перепутан с каналом RGB: одиночный диод подключается по своей схеме из лендинга про подключение светодиода — резистор один, канал общий, и путаница в скетче видна как не тот цвет.