
Интернет-магазин «Неглупый Дом»
RGB-светодиод KY-016, уже встречавшийся в других проектах на сайте как вспомогательный индикатор, здесь становится главным героем: потенциометр плавно двигает цвет от зелёного через жёлтый к красному, как цветовая шкала уровня — похожая на индикаторы заряда или громкости во многих бытовых приборах.
Потенциометр подключён как обычный делитель напряжения, и его положение считывается через `analogRead()` как число от 0 до 1023. Вместо того чтобы напрямую управлять яркостью одного канала, как в большинстве других проектов с RGB-светодиодами на сайте, здесь это число используется для плавного смешивания ДВУХ каналов одновременно: в начале диапазона горит только зелёный канал, затем к нему постепенно добавляется красный (давая жёлтый как их смесь), и к концу диапазона зелёный канал гаснет, оставляя чистый красный.
Это классический приём отображения "уровня" цветом (зелёный = хорошо, жёлтый = внимание, красный = критично), который используется гораздо шире, чем просто для потенциометров — тот же принцип подойдёт для отображения любого измеренного уровня (заряда батареи, температуры, расстояния) из других проектов на сайте, если заменить `analogRead()` потенциометра на реальные показания соответствующего датчика.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему. Логика ниже рассчитана
// на светодиод с общим катодом — для общего анода инвертируйте значения ШИМ.
const int POT_PIN = A0;
const int RED_PIN = 9;
const int GREEN_PIN = 10;
void setup() {
Serial.begin(9600);
}
void loop() {
int level = analogRead(POT_PIN); // 0-1023
int redValue;
int greenValue;
if (level < 512) {
// первая половина диапазона: зелёный горит на максимум, красный плавно растёт от 0
greenValue = 255;
redValue = map(level, 0, 511, 0, 255);
} else {
// вторая половина: красный на максимуме, зелёный плавно гаснет до 0
redValue = 255;
greenValue = map(level, 512, 1023, 255, 0);
}
analogWrite(RED_PIN, redValue);
analogWrite(GREEN_PIN, greenValue);
delay(50);
}
Дополнительных библиотек не требуется — только встроенные `analogRead()`, `map()` и `analogWrite()`. Если цвета выглядят "вывернутыми" (красный горит, где должен быть зелёный, и наоборот) — у вас, скорее всего, светодиод с общим анодом; замените каждое значение ШИМ на `255 - значение`.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 120 ₽ 108 ₽ (экономия 12 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.