Проект 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.

подключение к Arduino джойстика
Рис. 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); // пауза перед следующим считыванием данных
}

Порядок подключения:

1. Подключаем джойстик к плате Arduino по схеме на рис. 18.2.
2. Загружаем в плату Arduino скетч из листинга 18.1.
3. Смотрим в мониторе последовательного порта Arduino IDE вывод значений смещения по осям X и Y и состояние кнопки (ось Z).

подключение к Arduino двухосевого аналогового джойстика
Рис. 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); // пауза для ожидания поворота сервоприводов
}

Порядок подключения:

1. Собираем Pan/Title Bracket и сервоприводы.
2. Подключаем джойстик и Pan/Title Bracket к плате Arduino по схеме на рис. 18.2.
3. Загружаем в плату Arduino скетч из листинга 18.2.
4. Управляем положением Pan/Title Bracket перемещением джойстика по осям X и Y.

Листинги программ скачать




 

Вверх