🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


🕹️ Проект: управление цветом RGB-светодиода джойстиком KY-023

Джойстик KY-023 и RGB-светодиод

Джойстик KY-023 превращается в простой цветовой микшер: положение по оси X управляет красным каналом, по оси Y — зелёным, а нажатие джойстика включает и выключает подсветку целиком.

Как это работает

KY-023 — это фактически два независимых потенциометра (переменных резистора) в одном корпусе, механически связанных с общей рукояткой: ось X меняет сопротивление одного, ось Y — другого, а центральное положение рукоятки соответствует примерно середине диапазона обоих. Плюс отдельная кнопка (SW), срабатывающая при нажатии на саму рукоятку сверху.

Код просто читает оба аналоговых канала (`analogRead()` даёт значения от 0 до 1023) и через `map()` переводит их в диапазон ШИМ 0-255, который `analogWrite()` подаёт на соответствующий цветовой канал светодиода. Получается прямое и интуитивное управление цветом — наклон рукоятки вправо/влево меняет красный, вперёд/назад — зелёный.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. Подключите KY-023: VRx → A0, VRy → A1, SW → D2, VCC → 5V, GND → GND.
  2. Подключите RGB-светодиод: R → D9, G → D10, каждый через свой токоограничивающий резистор (обычно 220-330 Ом).
  3. Общий катод/анод светодиода подключите к GND или 5V в зависимости от типа вашего светодиода (общий катод или общий анод).

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.

const int xPin = A0;
const int yPin = A1;
const int swPin = 2;
const int redPin = 9;
const int greenPin = 10;
bool ledOn = true;

void setup() {
  Serial.begin(9600);
  pinMode(swPin, INPUT);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
}

void loop() {
  if (digitalRead(swPin) == HIGH) {
    ledOn = !ledOn;
    Serial.println(ledOn ? "Включено" : "Выключено");
    delay(300); // защита от дребезга при нажатии
  }

  if (ledOn) {
    int x = analogRead(xPin);
    int y = analogRead(yPin);
    analogWrite(redPin, map(x, 0, 1023, 0, 255));
    analogWrite(greenPin, map(y, 0, 1023, 0, 255));
  } else {
    analogWrite(redPin, 0);
    analogWrite(greenPin, 0);
  }
}

Ту же схему легко расширить третьим каналом (синим), взяв за основу нажатие джойстика или добавив второй потенциометр для регулировки яркости.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 📜 навигация по меню на LCD1602 энкодером KY-…🌀 POV-дисплей на вращающемся шаговом двигате… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу в корзину: 140 ₽ 126 ₽ (экономия 14 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA