KY-023: Двухосевой модуль джойстика

Полное руководство по модулю джойстика KY-023: технические характеристики, распиновка, схемы подключения к ESP32 и Arduino, официальный даташит и примеры кода.

Органы управления Аналоговый

Обзор

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

KY-023 — это устройство ввода, объединяющее два потенциометра и кнопочный переключатель. Каждая ось соответствует потенциометру, который выдает аналоговое напряжение, считываемое микроконтроллерами. Модуль широко используется в робототехнике, играх и интерактивных проектах.

Модуль джойстика KY-023
Быстрая навигация
Основные разделы статьи
Примеры кода
Популярные платформы

О двухосевом модуле джойстика KY-023

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

Где купить

Приобретите KY-023

Технические характеристики

Характеристики KY-023

Полные технические характеристики двухосевого модуля джойстика KY-023.

Рабочее напряжение
3.3В - 5В
Диапазон выхода
0В до VCC
Размеры
34 x 39 x 26 мм
Вес
12 г
Скачать полный даташит
Конфигурация пинов

Распиновка KY-023

KY-023 представляет собой 5-контактный модуль джойстика с интегрированной кнопкой:

Визуальная диаграмма распиновки
Основное
Распиновка KY-023
Всего выводов
5
Типы
Питание + Аналог + Кнопка
Быстрые советы
  • Интерфейс — Двойной аналоговый выход + цифровая кнопка.
  • Оси — Потенциометры осей X и Y (диапазон 0-3.3В или 0-5В).
  • Кнопка — Встроенная тактовая кнопка (активный низкий уровень при нажатии).
Описание выводов
Название Тип Описание Примечания
1 GND Питание Общий провод (земля)
2 +5V Питание Напряжение питания 3.3В или 5В
3 VRx Выход Аналоговый выход оси X Напряжение зависит от положения
4 VRy Выход Аналоговый выход оси Y Напряжение зависит от положения
5 SW Выход Сигнал кнопки Активный LOW при нажатии
Руководство по подключению

Подключение KY-023 к ESP32

Для сопряжения KY-023 с ESP32 для ввода данных с джойстика:

Схема подключения
Рекомендуемая
Подключение KY-023 к ESP32
Подключений
5
Статус
4 Обязательно / 1 Опционально
Протокол
Аналоговый
Таблица соединений
Вывод KY-023 Подключение Вывод ESP32 Описание
GND обязательно GND Земля
+5V обязательно 3.3V Питание (для ESP32 используйте 3.3В)
VRx обязательно GPIO36 Аналоговый вход оси X
VRy обязательно GPIO39 Аналоговый вход оси Y
SW опционально GPIO34 Вход кнопки (нужна подтяжка)
🎮 ADC пины: используйте GPIO32-39 ⚡ Питание: 3.3В для ESP32 🎯 Калибровка: считывайте центр при старте 🔘 Кнопка: включите внутреннюю подтяжку (PULL-UP) 📊 Маппинг: диапазон ADC 0-4095
Помощь и поддержка

Устранение неполадок KY-023

Распространённые проблемы и их решения для модуля джойстика.

Джойстик не отвечает
Нет изменений в аналоговых показаниях

Решения:

  • Проверьте надежность всех соединений.
  • Убедитесь, что на модуль подается правильное напряжение (3.3В или 5В).
  • Проверьте, правильно ли сконфигурированы выводы аналогового входа микроконтроллера.
  • Проверьте джойстик мультиметром, чтобы подтвердить работу потенциометров.
Кнопка не регистрирует нажатия
Цифровой вход не меняется

Решения:

  • Убедитесь, что вывод SW подключен к цифровому входу, настроенному с подтягивающим резистором.
  • Проверьте непрерывность цепи кнопки с помощью мультиметра.
  • Подтвердите правильность конфигурации пина в коде.

Советы по отладке

Serial монитор
Проверка значений
Используйте последовательный монитор для проверки текущих значений ADC. Добавьте вывод состояния кнопки, чтобы убедиться в правильной работе логики.

Дополнительные ресурсы

Примеры кода

Примеры программирования KY-023

Готовые к использованию примеры кода для различных платформ и фреймворков.

Пример для Arduino

Совместим с Arduino IDE и платами ESP32

C++
// Объявление и инициализация входных контактов
int JoyStick_X = A0; // Сигнал оси X
int JoyStick_Y = A1; // Сигнал оси Y
int Button = 3;      // Кнопка

void setup() {
    pinMode(JoyStick_X, INPUT);
    pinMode(JoyStick_Y, INPUT);
    pinMode(Button, INPUT_PULLUP); // Включить внутренний подтягивающий резистор
    Serial.begin(9600);            // Серийный вывод со скоростью 9600 бит/с
}

void loop() {
    float x, y;
    int buttonState;
    // Считать текущие значения и преобразовать в вольты
    x = analogRead(JoyStick_X) * (5.0 / 1023.0);
    y = analogRead(JoyStick_Y) * (5.0 / 1023.0);
    buttonState = digitalRead(Button);

    // Вывести значения
    Serial.print("Ось X:"); Serial.print(x, 4); Serial.print("В, ");
    Serial.print("Ось Y:"); Serial.print(y, 4); Serial.print("В, ");
    Serial.print("Кнопка:");
    if (buttonState == HIGH) {
        Serial.println("не нажата");
    } else {
        Serial.println("нажата");
    }
    delay(200);
}

Этот код Arduino считывает аналоговые значения осей X и Y джойстика KY-023 и цифровое состояние кнопки. Затем он выводит соответствующие уровни напряжения и состояние кнопки в монитор порта.

Пример для ESP-IDF

Официальный фреймворк для ESP32

C++
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/adc.h"
#include "driver/gpio.h"

#define JOYSTICK_X ADC1_CHANNEL_0 // GPIO36
#define JOYSTICK_Y ADC1_CHANNEL_3 // GPIO39
#define BUTTON GPIO_NUM_34

void app_main(void) {
    adc1_config_width(ADC_WIDTH_BIT_12);
    adc1_config_channel_atten(JOYSTICK_X, ADC_ATTEN_DB_11);
    adc1_config_channel_atten(JOYSTICK_Y, ADC_ATTEN_DB_11);
    gpio_set_direction(BUTTON, GPIO_MODE_INPUT);
    gpio_pulldown_en(BUTTON);

    printf("Тест джойстика KY-023\n");
    while (1) {
        int x_value = adc1_get_raw(JOYSTICK_X);
        int y_value = adc1_get_raw(JOYSTICK_Y);
        int button_state = gpio_get_level(BUTTON);
        printf("X: %d, Y: %d, Кнопка: %s\n", x_value, y_value, button_state ? "Не нажата" : "Нажата");
        vTaskDelay(pdMS_TO_TICKS(200));
    }
}

Этот код ESP-IDF считывает аналоговые значения с осей X и Y джойстика KY-023 с помощью ADC1 на GPIO36 и GPIO39. Он также отслеживает состояние кнопки на GPIO34 и выводит данные в консоль каждые 200 мс.

Пример для ESPHome

YAML конфигурация

YAML
sensor:
  - platform: adc
    pin: GPIO36
    name: "Ось X Джойстика KY-023"
    update_interval: 200ms
  - platform: adc
    pin: GPIO39
    name: "Ось Y Джойстика KY-023"
    update_interval: 200ms

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO34
      mode: INPUT_PULLUP
    name: "Кнопка Джойстика KY-023"

Эта конфигурация ESPHome настраивает модуль джойстика KY-023 на ESP32. Она считывает значения осей X и Y как аналоговые входные данные и фиксирует нажатия кнопок на GPIO34.

Пример для PlatformIO

Профессиональная среда разработки

C++

platformio.ini

[env:esp32]
platform = espressif32
board = esp32dev
framework = arduino

main.cpp

#include <Arduino.h>

#define JOYSTICK_X A0
#define JOYSTICK_Y A1
#define BUTTON 3

void setup() {
    pinMode(JOYSTICK_X, INPUT);
    pinMode(JOYSTICK_Y, INPUT);
    pinMode(BUTTON, INPUT_PULLUP);
    Serial.begin(115200);
    Serial.println("Тест модуля джойстика KY-023");
}

void loop() {
    int x_value = analogRead(JOYSTICK_X);
    int y_value = analogRead(JOYSTICK_Y);
    int button_state = digitalRead(BUTTON);
    Serial.printf("X: %d, Y: %d, Кнопка: %s\n", x_value, y_value, button_state ? "Не нажата" : "Нажата");
    delay(200);
}

Этот код PlatformIO считывает аналоговые значения осей X и Y джойстика KY-023 и фиксирует нажатия кнопки. Он выводит показания в последовательный монитор каждые 200 мс.

Пример для MicroPython

Python для микроконтроллеров

Python
import machine
import time

JOYSTICK_X = machine.ADC(machine.Pin(36))
JOYSTICK_Y = machine.ADC(machine.Pin(39))
BUTTON = machine.Pin(34, machine.Pin.IN, machine.Pin.PULL_UP)

JOYSTICK_X.atten(machine.ADC.ATTN_11DB)
JOYSTICK_Y.atten(machine.ADC.ATTN_11DB)

while True:
    x_value = JOYSTICK_X.read()
    y_value = JOYSTICK_Y.read()
    button_state = BUTTON.value()
    print("X:", x_value, "Y:", y_value, "Кнопка:", "Не нажата" if button_state else "Нажата")
    time.sleep(0.2)

Этот скрипт MicroPython считывает аналоговые значения осей X и Y джойстика KY-023 с помощью ADC на GPIO36 и GPIO39. Он также отслеживает нажатия кнопок на GPIO34 и выводит результаты каждые 200 мс.

Итоги KY-023

Двухосевой джойстик **KY-023** — это надежное и простое в использовании устройство ввода для ваших проектов на ESP32 и Arduino. Благодаря поддержке нескольких платформ разработки он является универсальным выбором для создания игровых контроллеров, систем управления роботами и других интерактивных интерфейсов.

Рекомендации

Всегда калибруйте джойстик при запуске программы, программно определяя среднюю точку. Это поможет избежать "дрейфа" и обеспечит точное управление.

Безопасность

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

Готовы к работе?

Теперь у вас есть все необходимое, чтобы интегрировать KY-023 в ваш проект на ESP32!