Джойстик
Содержание
- Обзор тактильного Джойстика
- Технические характеристики
- Подключение к Arduino
- Пример использования
- Часто задаваемые вопросы
Обзор тактильного Джойстика
Джойстик является одним из устройств для удобной передачи информации от человека к компьютеру или микроконтроллеру. Джойстики используются для управления движением роботов, мобильных платформ и прочих механизмов.
Модуль двухосевого джойстик (рис. 1) имеет две степени свободы, представляет собой ручку, закреплённую на шаровом шарнире с двумя взаимно перпендикулярными осями.
Рисунок 1. Джойстик.
При наклоне ручки вращаются подвижные контакты каждого из двух потенциометров номиналом 10 кОм, которые определяют положение осей X и Y. Средний контакт каждого потенциометра выведен на контакты VRX и VRY разъема, а крайние подключены к питанию и земле. Также джойстик оснащен тактовой кнопкой, которая срабатывает при вертикальном нажатии на ручку, показания снимаются с контакта SW. После отпускания джойстик возвращается в первоначальное центральное состояние.
Технические характеристики
- Напряжение питания: номинальное 3.0…5,5 В;
- Выходной сигнал: цифровой (кнопка) и аналоговый (оси X и Y);
- Размеры: 26 мм x 40 мм x 22 мм.
Подключение к плате Arduino
Для подключения модуля джойстика к плате Arduino будем использовать два аналоговых и один цифровой вывод Arduino, а также с платы Arduino подаем питание на контакты джойстика GND и +5V. Схема подключения показана на рисунке 2.
Рисунок 2. Схема подключения модуля джойстика к плате Arduino.
Напишем скетч получения данных с джойстика. Данные с потенциометров по осям X и Y могут принимать значения от 0 до 1023. Неподвижному положению джойстика соответствуют значение 511 для каждого потенциометра. При нажатии на кнопку на входе 3 Arduino будет появляться 0. Чтобы не было наводок, вывод кнопки необходимо подтянуть к +5 В. Данные выводим в последовательный порт.
Содержимое скетча показано в листинге 1.
Листинг 1
// пин подключения контакта VRX
#define PIN_VRX A0
// пин подключения контакта VRY
#define PIN_VRY A1
// пин подключения кнопки
#define PIN_BUTTON 3
void setup () {
// запуск последовательного порта
Serial.begin (9600);
}
void loop () {
// Выводим значение по оси X
Serial.print("X = ");
Serial.println(analogRead(PIN_VRX));
// Выводим значение по оси Y
Serial.print("Y = ");
Serial.println(analogRead(PIN_VRY));
// Состояние кнопки
Serial.print("button = ");
if (digitalRead(PIN_BUTTON) == HIGH) {
Serial.println ("NOT CLICK");
}
else {
Serial.println ("CLICK!");
}
// Пауза 1 сек
delay (1000);
}
Загружаем скетч на плату Arduino, открываем монитор последовательного порта и видим вывод данных при изменении положения джойстика (рис. 3).
Рисунок 3. Вывод данных с джойстика в монитор последовательного порта.
Пример использования
Рассмотрим пример использования джойстика для управления подвесом для камеры на сервоприводах. Нам потребуются следующие детали:
- плата Arduino Uno – 1 шт;
- плата прототипирования – 1 шт;
- модуль джойстика – 1 шт;
- сервопривод – 2 шт;
- подвес для камеры – 1 шт;
- блок питания 5В – 1 шт;
- провода.
Схема подключения показана на рисунке 4.
Рисунок 4. Схема подключения модуля джойстика и подвеса на сервоприводах к плате Arduino.
Считываем показания джойстика для каждой из осей X, Y и переводим их в значение угла поворота соответствующего сервопривода. Чтобы убрать дрожание сервопривода не реагируем на маленькие изменения положения джойстика.
Содержимое скетча показано в листинге 2.
Листинг 2
// подключение библиотеки Servo
#include <Servo.h>
// пины подключения сервоприводов
#define PIN_SERVO_X 9
#define PIN_SERVO_Y 10
// пин подключения контакта VRX
#define PIN_VRX A0
// пин подключения контакта VRY
#define PIN_VRY A1
// пин подключения кнопки
#define PIN_BUTTON 3
// создание объектов Servo
Servo servoX;
Servo servoY;
// служебные переменные
int joyXpr=0;
int joyYpr=0;
int joyX, joyY;
int angleX, angleY;
void setup() {
// запуск последовательного порта
Serial.begin (9600);
// подключить управление сервоприводом к пинам
// PIN_SERVO_X и PIN_SERVO_Y
servoX.attach(PIN_SERVO_X);
servoY.attach(PIN_SERVO_Y);
}
void loop () {
// получение данных с джойстика
joyX=analogRead(PIN_VRX);
joyY=analogRead(PIN_VRY);
// Выводим значение по оси X
Serial.print("X = ");
Serial.print(joyX);
// Выводим значение по оси Y
Serial.print(" Y = ");
Serial.println(joyY);
// сравнение с предыдущими
if(abs(joyX-joyXpr)>10) { // повернуть по оси X
angleX=map(joyX,0,1023,0,180);
servoX.write(angleX);
// время на перемещение сервопривода
delay(15);
}
if(abs(joyY-joyYpr)>10) { // повернуть по оси Y
angleY=map(joyY,0,1023,0,180);
servoY.write(angleY);
// время на перемещение сервопривода
delay(15);
}
joyXpr=joyX;
joyYpr=joyY;
}
Загружаем скетч на плату Arduino, и управляем подвесом с помощью джойстика.
Рисунок 5-6. Схема в сборе.
Часто задаваемые вопросы
Проверьте правильность подключения джойстика к плате Arduino.
2. Значение кнопки джойстика принимает случайные значения или не изменяется тока отрицательное
- Проверьте правильность подключения джойстика к плате Arduino.
- Подтяните вывод кнопки к питанию через резистор 4.7 кОм.