Содержание
- Обзор тактильного Джойстика
- Технические характеристики
- Подключение к 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 кОм.