Джойстик является одним из устройств для удобной передачи информации от человека к компьютеру или микроконтроллеру. Джойстики используются для управления движением роботов, мобильных платформ и прочих механизмов. Модуль двухосевого джойстик
имеет две степени свободы, представляет собой ручку, закреплённую на шаровом шарнире с двумя взаимно перпендикулярными осями.

Джойстик Arduino

Джойстик.

При наклоне ручки вращаются подвижные контакты каждого из двух потенциометров номиналом 10 кОм, которые определяют положение осей X и Y. Средний контакт каждого потенциометра выведен на контакты VRX и VRY разъема, а крайние подключены к питанию и земле. Также джойстик оснащен тактовой кнопкой, которая срабатывает при вертикальном нажатии на ручку, показания снимаются с контакта SW. После отпускания джойстик возвращается в первоначальное центральное состояние.

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

  • Напряжение питания: номинальное 3.0…5,5 В
  • Выходной сигнал: цифровой (кнопка) и аналоговый (оси X и Y)
  • Размеры: 26 мм x 40 мм x 22 мм

Подключение к плате Arduino

Для подключения модуля джойстика к плате Arduino будем использовать два аналоговых и один цифровой вывод Arduino, а также с платы Arduino подаем питание на контакты джойстика GND и +5V. Схема подключения показана ниже.

Схема подключения модуля джойстика к плате Arduino.

Схема подключения модуля джойстика к плате Arduino.

Напишем скетч получения данных с джойстика. Данные с потенциометров по осям X и Y могут принимать значения от 0 до 1023. Неподвижному положению джойстика соответствуют значение 511 для каждого потенциометра. При нажатии на кнопку на входе 3 Arduino будет появляться 0. Чтобы не было наводок, вывод кнопки необходимо подтянуть к +5 В. Данные выводим в последовательный порт

// пин подключения контакта 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, открываем монитор последовательного порта и видим вывод данных при изменении положения джойстика.

Вывод данных с джойстика в монитор последовательного порта.

Вывод данных с джойстика в монитор последовательного порта.


Пример использования

Рассмотрим пример использования джойстика для управления подвесом для камеры на сервоприводах. Нам потребуются следующие детали:

  • плата Arduino Uno – 1 шт
  • плата прототипирования – 1 шт
  • модуль джойстика – 1 шт
  • сервопривод – 2 шт
  • подвес для камеры – 1 шт
  • блок питания 5В – 1 шт
  • провода

Схема подключения модуля джойстика и подвеса на сервоприводах к плате Arduino.

Схема подключения модуля джойстика и подвеса на сервоприводах к плате Arduino.

Считываем показания джойстика для каждой из осей X, Y и переводим их в значение угла поворота соответствующего сервопривода. Чтобы убрать дрожание сервопривода не реагируем на маленькие изменения положения джойстика.

// подключение библиотеки 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, и управляем подвесом с помощью джойстика.

Управление подвесом с помощью джойстика Управление подвесом с помощью джойстика

Схема в сборе.


Что делать если

Не изменяются данные на аналоговых выводах Arduino при изменении положения джойстика.

Проверьте правильность подключения джойстика к плате Arduino.

Значение кнопки джойстика принимает случайные значения или не изменяется тока отрицательное

Проверьте правильность подключения джойстика к плате Arduino.
Подтяните вывод кнопки к питанию через резистор 4.7 кОм.


 

Рекомендуемые товары

Комментарии 0