Проект 18: Обробляємо дані від джойстика. Управління Pan / Tilt Bracket за допомогою джойстика
В цьому експерименті ми розглянемо підключення до Arduino двовісний аналогового джойстика.
Необхідні компоненти:
- контролер Arduino UNO R3;
- плата для прототипування;
- модуль джойстика;
- кронштейн Pan / Titl Bracket;
- сервопривід - 2 шт.;
- дроти тато-тато.
Для управління будь-яким пристроєм на основі Arduino, що переміщається в двомірної системі координат, відмінно підійде джойстик. Для плат Arduino існують модулі аналогового джойстика, що мають вісь X, Y (потенціометри 10 кОм) і додаткову кнопку - вісь Z. Джойстик дозволяє плавно і точно відстежувати ступінь відхилення від нульової точки. Сам джойстик підпружинений, тому він буде повертатися в центральне стан після його відпускання з певною позіціі.Контакти Vcc і GND між усіма трьома групами контактів з'єднані. Таким чином, для підключення потрібно 5 проводів: вісь X, вісь Y, кнопка Z, живлення Vcc і загальний GND. Джойстики - пасивні модулі і не споживають будь-яку енергію від плати Arduino. виводи VERT і HORZ підключаються до аналогових входів A0 і A1 Arduino, SEL - до цифрового входу D2. Схема підключення показана на рис. 18.1.

Рис. 18.1. Схема підключення плати джойстика до Arduino
Напишемо скетч зчитування даних джойстика і виведення значень в монітор послідовного порту Arduino IDE. Вміст скетчу показано в лістингу 18.1.
const int axisX = A0 // вісь Х підключена до A0
const int axisY = A1 // вісь Y підключена до A1
const int axisZ = 2 // вісь Z (кнопка джойстика) підключена до D2
int valX, valY, valZ = 0; // змінні для зберігання значень осей
void setup ()
{
pinMode (axis_Z, INPUT_PULLUP); // конфігуруємо D2 як INPUT з включенням
// підтягує резистора всередині процесора
Serial.begin (9600);
}
void loop () {
valX = analogRead (axisX); // значення осі Х
valY = analogRead (axisY); // значення осі Y
valZ = 1-digitalRead (axisZ); // значення осі Z (кнопка)
// виводимо значення в монітор
Serial.print ( "X:"); Serial.print (valX, DEC);
Serial.print ( "| Y:"); Serial.print (valY, DEC)
Serial.print ( "| Z:"); Serial.println (valZ, DEC);
delay (500); // пауза перед наступним зчитуванням даних
}
Порядок підключення:
- Підключаємо джойстик до плати Arduino за схемою на рис. 18.2.
- Завантажуємо в плату Arduino скетч з лістингу 18.1.
- Дивимося в моніторі послідовного порту Arduino IDE вивід значень зсуву по осях X і Y і стан кнопки (вісь Z).

Рис. 18.2. Схема підключення плати джойстика і Pan / Title Bracket до Arduino
Створимо більш зрозумілий приклад використання джойстика для управління становищем кронштейна Pan / Titl Bracket з двома сервоприводами, на якому можна розмістити, наприклад, камеру і міняти положення камери вліво / вправо і вниз / вгору за допомогою джойстика. Схема з'єднань для даного експерименту показана на рис. 18.2.Перемещеніем джойстика по осі X ми будемо управляти поворотом нижнього сервоприводу (вліво / вправо), переміщенням джойстика по осі Y будемо управляти поворотом верхнього сервоприводу (вгору / вниз). Середнє нейтральне положення джойтіка по кожній осі (при аналоговому значенні 512) відповідає куту повороту сервоприводу на кут 90 °. Вміст скетчу показано в лістингу 18.2.
#include <Servo.h> // підключення бібліотеки Servo
Servo servo1, servo2;
const int pinServo1 = 8; // Пін для підключення 1 сервоприводу
const int pinServo2 = 9; // Пін для підключення 2 сервоприводу
// змінні для зберігання кутів повороту сервоприводів
int angleServo1, angleServo2 = 0;
const int axisX = A0; // вісь Х підключена до A0
const int axisY = A1; // вісь Y підключена до A1
int valX, valY = 0; // змінні для зберігання значень осей
void setup ()
{
// підключити змінну servo1 до виводу pinServo1
servo1.attach (pinServo1);
// підключити змінну servo2 до виводу pinServo2
Servo2.attach (pinServo2);
}
void loop ()
{
valX = analogRead (axisX); // значення осі Х
valY = analogRead (axisY); // значення осі Y
// масштабується значення до інтервалу 0-180
angleServo1 = map (valX, 0,1023,0,180);
angleServo2 = map (valY, 0,1023,0,180);
// поворот сервоприводів на отриманий кут
servo1.write (angleServo1);
servo2.write (angleServo2);
delay (15); // пауза для очікування повороту сервоприводів
}
Порядок підключення:
- Збираємо Pan / Title Bracket і сервопріводи.
- Підключаємо джойстик і Pan / Title Bracket до плати Arduino за схемою на рис. 18.2.
- Завантажуємо в плату Arduino скетч з лістингу 18.2.
- Управляємо становищем Pan / Title Bracket переміщенням джойстика по осях X і Y.