В этом уроке мы познакомимся с одним из самых популярных модулей для создания интерактивных проектов — модулем джойстика KY-023. Этот модуль, основанный на джойстике от игрового контроллера PS2, позволяет легко считывать перемещения по двум осям (X и Y) и регистрировать нажатие на сам стик.
Модуль KY-023 представляет собой два перпендикулярно расположенных потенциометра и тактовую кнопку. При смещении стика меняется сопротивление потенциометров, что позволяет нам определять его положение. Нажатие на стик сверху вниз замыкает контакты кнопки. Это простое и универсальное устройство для ввода данных в ваши проекты.
Области применения:
Совместимость:
Модуль KY-023 полностью совместим с самыми популярными платформами, включая Arduino (UNO, Nano, Mega), ESP32, ESP8266 и Raspberry Pi, так как для работы с ним достаточно стандартных аналоговых и цифровых портов.
Модуль состоит из нескольких ключевых элементов:
Модуль имеет 5 выводов со следующими обозначениями:
Принцип работы модуля очень прост. Когда вы двигаете стик, вы изменяете положение двух потенциометров. Это приводит к изменению напряжения на выводах VRx и VRy. Микроконтроллер считывает это аналоговое напряжение с помощью АЦП (Аналого-цифрового преобразователя) и преобразует его в числовое значение. На Arduino UNO это значение будет в диапазоне от 0 до 1023.
Кнопка SW при нажатии замыкает контакт на землю. Чтобы получить стабильный сигнал, мы будем использовать внутренний подтягивающий резистор Arduino (INPUT_PULLUP), который будет удерживать пин в состоянии HIGH, пока кнопка не нажата. При нажатии пин будет считываться как LOW.
Модуль KY-023 является низковольтным и абсолютно безопасен в использовании. Единственное, на что стоит обратить внимание, — правильность подключения питания: не перепутайте пины GND и +5V, чтобы не повредить модуль или микроконтроллер.
Подключить модуль к Arduino очень просто. Нам понадобится два аналоговых пина для осей и один цифровой для кнопки.
Подключение к Arduino UNO:
| Пин модуля KY-023 | Пин Arduino UNO |
|---|---|
| GND | GND |
| +5V | 5V |
| VRx | A0 |
| VRy | A1 |
| SW | D7 |
Схема для Arduino UNO.
Подключение к Arduino NANO.
Схема подключения к Arduino NANO аналогична, просто используйте соответствующие пины на плате Nano.
| Пин модуля KY-023 | Пин Arduino NANO |
|---|---|
| GND | GND |
| +5V | 5V |
| VRx | A0 |
| VRy | A1 |
| SW | D7 |
Для базовой работы с модулем KY-023 не требуются никакие сторонние библиотеки. Все необходимые функции (analogRead, digitalRead, pinMode) уже встроены в стандартную среду Arduino IDE.
Базовый пример: Считывание данных с джойстика и вывод в Монитор порта.
Этот простой скетч позволяет проверить работоспособность модуля, непрерывно считывая значения с осей X, Y и кнопки, а затем выводя их в Монитор порта.
/* -------------------
Урок: Модуль джойстика KY-023 Dual Axis Joystick
https://arduino-tex.ru/news/229/modul-dzhoistika-ky-023-dual-axis-joystick-podklyuchenie-k-arduino.html
======================================
Автор: Константин Казанцев.
https://arduino-tex.ru/
--------------------*/
// Определяем пины, к которым подключен модуль
const int pin_VRx = A0; // Пин для оси X
const int pin_VRy = A1; // Пин для оси Y
const int pin_SW = 7; // Пин для кнопки
void setup() {
// Инициализируем Serial-порт для вывода данных
Serial.begin(9600);
// Настраиваем пин кнопки как вход с внутренним подтягивающим резистором
// Это значит, что когда кнопка не нажата, на пине будет HIGH (1)
// А когда нажата - LOW (0)
pinMode(pin_SW, INPUT_PULLUP);
// Примечание: для аналоговых пинов pinMode(pin, INPUT) необязателен,
// так как analogRead() настраивает пин автоматически.
}
void loop() {
// Считываем аналоговые значения с осей X и Y
int xValue = analogRead(pin_VRx); // Значение от 0 до 1023
int yValue = analogRead(pin_VRy); // Значение от 0 до 1023
// Считываем цифровое состояние кнопки
int btnState = digitalRead(pin_SW); // Значение 0 (нажата) или 1 (не нажата)
// Выводим полученные значения в Монитор порта
Serial.print("X: ");
Serial.print(xValue);
Serial.print(" | Y: ");
Serial.print(yValue);
Serial.print(" | Button: ");
Serial.println(btnState);
// Небольшая задержка, чтобы не засорять порт данными
delay(200);
}
Пояснения к коду:
const int pin_VRx = A0; — создаем константу для пина оси X, чтобы код был более читаемым.pinMode(pin_SW, INPUT_PULLUP); — ключевая строка для работы с кнопкой. INPUT_PULLUP активирует внутренний резистор Arduino, который "подтягивает" напряжение на пине к 5V. Благодаря этому нам не нужен внешний резистор для кнопки.analogRead(pin_VRx); — считывает напряжение на аналоговом пине и преобразует его в число от 0 до 1023.digitalRead(pin_SW); — считывает цифровое состояние пина кнопки (HIGH или LOW).Serial.print(...); — выводит текст или значение переменной в Монитор порта.delay(200); — приостанавливает выполнение программы на 200 миллисекунд.
Пример можно скачать внизу страницы в разделе «Файлы для скачивания».
Давайте создадим простой, но наглядный проект: "Палитра цветов: управление RGB-модулем с помощью джойстика". Движение джойстика по осям X и Y будет плавно изменять цвет, а нажатие на кнопку — включать и выключать свечение.
Используя два модуля, мы соберем интерактивное устройство для выбора цвета:
Краткая справка по модулю KY-009: Это небольшой модуль, на котором уже распаян SMD RGB-светодиод. Он имеет 4 вывода: один общий (в данном случае, общий катод, обозначается как "GND" или "-") и по одному выводу на каждый цвет (R, G, B). В отличие от сборки с отдельным светодиодом. Подробнее о модуле можно прочитать в уроке по KY-009.
Подключение к Arduino UNO:
| Компонент | Вывод модуля | Подключение к Arduino UNO |
|---|---|---|
| KY-023 Joystick | GND | GND |
| +5V | 5V | |
| VRx | A0 | |
| VRy | A1 | |
| SW | D7 | |
| KY-009 RGB LED | - (или GND) | GND |
| R | D9 (PWM) | |
| G | D10 (PWM) | |
| B | D11 (PWM) |
Важно: Для плавного управления цветом модуля KY-009 необходимо подключать его выводы R, G, B к пинам Arduino с поддержкой ШИМ (PWM). На Arduino UNO они отмечены тильдой ~ (например, 3, 5, 6, 9, 10, 11).
Схема подключения KY-023, KY-009 к Arduino NANO.
Код для этого проекта будет практически идентичен предыдущему варианту, так как принцип управления ШИМ-сигналом не меняется. Это лишь подтверждает, насколько гибка платформа Arduino.
/* -------------------
Урок: Модуль джойстика KY-023 Dual Axis Joystick
https://arduino-tex.ru/news/229/modul-dzhoistika-ky-023-dual-axis-joystick-podklyuchenie-k-arduino.html
======================================
Автор: Константин Казанцев.
https://arduino-tex.ru/
--------------------*/
// --- Пины для джойстика ---
const int pin_VRx = A0; // Ось X
const int pin_VRy = A1; // Ось Y
const int pin_SW = 7; // Кнопка
// --- Пины для модуля RGB KY-009 (обязательно PWM-пины) ---
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
// --- Переменные для хранения состояний ---
int xValue = 0;
int yValue = 0;
bool ledState = true; // Состояние светодиода (включен/выключен)
unsigned long lastButtonPress = 0; // Для защиты от дребезга контактов
void setup() {
Serial.begin(9600);
// Настройка пина кнопки джойстика
pinMode(pin_SW, INPUT_PULLUP);
// Настройка пинов модуля KY-009 как выходов
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
// --- Обработка нажатия кнопки джойстика ---
// Проверяем, нажата ли кнопка и прошло ли достаточно времени с последнего нажатия
if (digitalRead(pin_SW) == LOW && millis() - lastButtonPress > 250) {
ledState = !ledState; // Инвертируем состояние (вкл -> выкл, выкл -> вкл)
lastButtonPress = millis(); // Запоминаем время нажатия
Serial.print("RGB Module state changed to: ");
Serial.println(ledState ? "ON" : "OFF");
}
// --- Управление модулем KY-009 ---
if (ledState) {
// Если модуль включен...
// Считываем аналоговые значения с джойстика
xValue = analogRead(pin_VRx);
yValue = analogRead(pin_VRy);
// Преобразуем диапазон джойстика [0..1023] в диапазон для ШИМ [0..255]
int redValue = map(xValue, 0, 1023, 0, 255);
int blueValue = map(yValue, 0, 1023, 0, 255);
// Зеленый будет меняться в противофазе красному для большего разнообразия цветов
int greenValue = map(xValue, 0, 1023, 255, 0);
// Устанавливаем цвет на модуле KY-009
setColor(redValue, greenValue, blueValue);
} else {
// Если модуль выключен, гасим его
setColor(0, 0, 0);
}
delay(10); // Небольшая задержка для стабильности работы
}
// Вспомогательная функция для установки цвета на модуле KY-009
void setColor(int r, int g, int b) {
analogWrite(redPin, r);
analogWrite(greenPin, g);
analogWrite(bluePin, b);
}
Пояснения к коду проекта:
setColor(r, g, b). Это хорошая практика в программировании.Serial добавили тернарный оператор ledState ? "ON" : "OFF", который выводит "ON", если ledState истинно, и "OFF" в противном случае. Это делает лог более понятным.Модуль джойстика KY-023 — это фантастический инструмент для добавления интуитивно понятного управления в проекты на Arduino. Он прост в подключении, не требует библиотек и очень надежен.
Сильные стороны:
Слабые стороны:
Надеемся, этот урок был вам полезен! Совместное использование модулей, таких как KY-023 и KY-009, позволяет быстро и без лишних усилий создавать интересные интерактивные устройства.
А какие идеи по использованию этого модуля появились у вас? Поделитесь ими в комментариях!
Понравился Урок KY-023 – модуль джойстика (Dual Axis Joystick). Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на VK Видео, вступить в группу Вконтакте.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
| KY-023_Arduino.ino | 2 Kb | 38 | Скачать | |
| KY-023_KY-009_Arduino.ino | 3 Kb | 41 | Скачать |
37 модулей для Arduino
22 сентября , 2025
Комментариев:0
Файлов для скачивания:2
Фото:8
Понравилась статья? Нажми
Читайте также
Мы в соц сетях
Комментарии