Двухосевой джойстик (KY-023, PS2) — это модуль-манипулятор, состоящий из двух потенциометров и одной тактовой кнопки, позволяющий пользователю управлять различными устройствами (шасси, роботами), например для дистанционного управления двухкоординатным поворотным устройством видеокамеры, которое можно вращать в двух плоскостях.
Технические характеристики KY-023
- Напряжение питания: 3,3 — 5 В
- Выходное напряжение (VRx/VRy): 0 — 5 В (аналоговое)
- Потребляемый ток: менее 5 мА
- Сопротивление потенциометров: ~10 кОм на каждую ось
- Рабочая температура: -10…+70 °C
- Размеры: 40 мм х 26 мм х 32 мм
Распиновка KY-023
| Вывод | Описание |
|---|---|
| GND | Земля/общий |
| +5V/VCC | Питание |
| VRX | Аналоговый выход потенциометра оси X |
| VRY | Аналоговый выход потенциометра оси Y |
| SW | Выход кнопки |
Принципиальная схема джойстика KY-023
Модуль двухосевого джойстика состоит из двух потенциометров на 10 кОм, определяющих положение осей X и Y. Изменение сопротивления осуществляется рычагом. Средняя нога каждого потенциометра выведена на контакты VRX и VRY, а вторая и третья ноги подключены к питанию и массе. Дополнительно установлена тактовая кнопка, показания снимаются с контакта SW, также предусмотрено посадочное место для подтягивающего резистора (R1).

Для считывания данных с выводов VRX (ось X) и VRY (ось Y) необходимо использовать аналоговые порты Arduino. (значение от 0 до 5 В или от 0 до 1023), а для считывания данных с вывода SW используем цифровой порт (значение 0 В и 5 В или 0 и 1). Так как один вывод тактовой кнопки подключен к земле и при нажатии на джойстик вниз происходит замыкание цепи, но возможны ложные срабатывания (наводки). Для получения стабильных показаний, вывод SW необходимо подтянуть к питанию +5 В, через подтягивающий резистор R1 или использовать встроенный подтягивающий резистор.
Схема подключения джойстика KY-023 к Arduino
Для считывания значений с потенциометров джойстика будет использоваться пара аналоговых контактов на Arduino (A0 и A1) и цифровой вывод для считывания значений с кнопки.
| KY-023 | Arduino |
|---|---|
| GND | GND |
| +5V | 5V |
| VRx | A0 |
| VRy | A1 |
| SW | 3 |

В примере используется встроенный подтягивающий резистор (можно использовать и внешний, для этого необходимо добавить на модуль резистор R1, типа размера 0805). Подключаем провода, VRX к аналоговому порту A0, VRY к аналоговому порту A1, SW к цифровому порту 3, осталось подключить питание +5 В к выводу 5V и GND к GND на Arduino Pro Mini или Arduino Uno.
Пример скетча
Следующий скетч Arduino будет постоянно считывать значения с потенциометров и кнопки на KY-023 и преобразует их в значение напряжения (0-1023 -> 0V-5V). Перемещение джойстика вверх/вниз увеличит/уменьшит значение X, а перемещение джойстика влево/вправо увеличит/уменьшит значение Y. Нажмите на джойстик, чтобы активировать кнопку. Запускаем среду разработки и загружаем данный скетч, затем открываем мониторинг порта.
/*
Пин к которому подключен VRX
*/
#define VRX A0
/*
Пин к которому подключен VRY
*/
#define VRY A1
/*
Пин к которому подключен SW
*/
#define SW 3
void setup() {
/*
Установим вывод SW как вход
*/
pinMode(SW, INPUT);
/*
Включаем подтягивающий резистор
*/
digitalWrite(SW, HIGH);
/*
Задаем скорость передачи данных
*/
Serial.begin(9600);
}
void loop() {
/*
Создаем переменные
*/
int xVal, yVal, swVal;
/*
Считываем значение с порта VRX
*/
xVal = analogRead(VRX);
/*
Считываем значение с порта VRY
*/
yVal = analogRead(VRY);
/*
считываем значение с порта SW
*/
swVal = digitalRead(SW);
/*
Выводим текст
*/
Serial.print("X = ");
/*
Выводим значение переменной xVal
*/
Serial.println(xVal, DEC);
/*
Выводим текст
*/
Serial.print("Y = ");
/*
Выводим значение переменной yVal
*/
Serial.println(yVal, DEC);
/*
Выводим текст
*/
Serial.print("Кнопка: ");
/*
Если swVal равно "1", кнопка не нажата
*/
if (swVal == HIGH) {
/*
Выводим текст
*/
Serial.println("не нажата");
} else {
/*
Если swVal равно "0" кнопка нажата
*/
Serial.println("нажата");
}
/*
Ждем 500 мс.
*/
delay(500);
}
Результат
В мониторинг порта, можно увидеть все изменения джойстика и нажатия кнопки.







Спасибо за информацию. Но остался вопрос — что подпружинивает джойстик , и возможно ли самостоятельно убрать «пружину»?