Подключение джойстика к Arduino позволяет реализовать проект дистанционного управления автомобилем или роботом (манипулятором) на Ардуино. Рассмотрим, как подключить аналоговый джойстик (модуль KY-023) к микроконтроллеру и управлять светодиодами с помощью 2-осевого джойстика. Мы представим несколько программ и схем для подключения 2-осевого джойстика к плате Arduino Nano или Uno.
СОДЕРЖАНИЕ
- Модуль джойстика распиновка, принцип работы
- Подключение модуля джойстика ky-023 к Ардуино
- Код для подключения модуля джойстика к Ардуино
- Подключение джойстика и светодиодов к Ардуино
- Код для управления светодиодами от джойстика
- Подключение джойстика и сервопривода к Ардуино
- Код для управления сервомотором от джойстика
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- модуль джойстика KY-023
- светодиоды и резисторы
- микро сервомотор
- макетная плата
- коннекторы
Дополнительные материалы на эту тему:
Аналоговый джойстик представляет собой шарнирную ручку с двумя потенциометрами, определяющими положение джойстика по осям X и Y и тактовой кнопкой. Наклон ручки вращает потенциометр и изменяет выходное напряжение модуля ky-023, контролируя степень отклонения ручки от центральной точки. Когда ручка аналогового джойстика отпускается, он плавно возвращается в центральное (нулевое) положение.
Джойстик Arduino принцип работы, распиновка

Характеристики модуля джойстика KY-023 (datasheet)
- Напряжение питания: 5 В
- Поворот ручки: 360°
- Габариты: 34 х 26 х 34 мм
- Распиновка у разных производителей может отличаться
Модуль джойстика KY-023 имеет свои недостатки. Ручка джойстика не всегда точно возвращается в центральное положение, поэтому центральное положение кнопки в программе нужно рассматривать не как точное значение, а как некоторый диапазон значений. Другими словами, когда у модуля ручка 2-осевого джойстика находится по центру, значения координат X и Y могут быть между 490 и 530 вместо 512.
Как подключить джойстик KY-023 к Ардуино

После подключения джойстика к Ардуино загрузите следующий код. В этом примере данные джойстика будут отображаться на мониторе порта, а светодиод на плате, подключенный параллельно выводу 13, будет гаснуть при нажатии кнопки. Соберите схему джойстика с микроконтроллером Arduino Uno, как показано на картинке выше, загрузите программу и откройте последовательный порт приложения Arduino IDE на компьютере.
Скетч для модуля джойстика KY-023 и Ардуино
#define pinX A2
#define pinY A1
#define swPin 2
#define ledPin 13
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(pinX, INPUT);
pinMode(pinY, INPUT);
pinMode(swPin, INPUT);
digitalWrite(swPin, HIGH);
}
void loop() {
boolean ledState = digitalRead(swPin);
digitalWrite(ledPin, ledState);
int X = analogRead(pinX);
int Y = analogRead(pinY);
Serial.print(X);
Serial.print("\t");
Serial.println(Y);
}
Как подключить джойстик и светодиоды к Ардуино

Теперь можно усложнить схему, выполнив плавное включение светодиодов и выключение, управляемых джойстиком. Для этого подключите два светодиода через резистор к аналоговым портам 5 и 6. В следующем скетче используйте функцию map() для преобразования переменных X и Y из диапазона чисел от 0 до 1023 в диапазон чисел от 0 до 255. Подключите светодиоды к плате и загрузите следующий скетч в плату.
Скетч для управления светодиодом от джойстика
#define pinX A2
#define pinY A1
#define swPin 2
#define ledPin 13
#define ledX 11
#define ledY 10
void setup() {
pinMode(ledX, OUTPUT);
pinMode(ledY, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(pinX, INPUT);
pinMode(pinY, INPUT);
pinMode(swPin, INPUT);
digitalWrite(swPin, HIGH);
}
void loop() {
boolean ledState = digitalRead(swPin);
digitalWrite(ledPin, ledState);
int X = analogRead(pinX);
int Y = analogRead(pinY);
X = map(X, 0, 1023, 0, 255);
Y = map(Y, 0, 1023, 0, 255);
analogWrite(ledX, X);
analogWrite(ledY, Y);
}
Как подключить сервомотор и джойстик к Ардуино

Подключите микро сервопривод и джойстик к плате Arduino, как показано на рисунке выше. Загрузите в микроконтроллер следующий скетч для осуществления плавного управления сервоприводом от модуля джойстика KY-023. В программе используется функция map(), которая преобразует числовой диапазон значений от 0 до 1023 на аналоговом входе A1 плата Ардуино в новый числовой диапазон от 0 до 180 (угол поворота сервопривода).
Скетч для управления сервоприводом от джойстика
#define pinX A1
#include "Servo.h"
Servo servo;
void setup() {
Serial.begin(9600);
pinMode(pinX, INPUT);
servo.attach(9);
}
void loop() {
int X = analogRead(pinX);
Serial.println(X);
X = map(X, 0, 1023, 0, 180);
servo.write(X);
}
Заключение. Мы рассмотрели схему подключения джойстика к Arduino и несколько вариантов управления светодиодами от микроконтроллера. Как вы сами убедились, работа с джойстиком и микроконтроллером Ардуино доступна любому начинающему мейкеру, поскольку принцип работы модуля ky-023 схож с простым потенциометром. Этот модуль можно использовать во многих интересных проектах DIY с платой Arduino.
