22. Подключаем к Arduino джойстик. Управление servo сервоприводом. Подключение джойстика к ардуино.

Как подключить
Подключение джойстика к ардуино - Компоненты джойстика Сборка джойстик шилда Теги: Инструкция по подключению аналогового джойстика к Arduino Базовый скетч для использования джойстика с Arduino

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

Arduino UNO урок 12 — Джойстик

Для плат Arduino существуют модули аналоговых джойстиков. Как правило, имеющие ось X, Y и кнопку — ось Z. Джойстик позволяет более плавно и точно отслеживать степень отклонения от нулевой точки. А помимо удобства по сравнению с кнопками, это позволяет реализовывать более совершенные интерфейсы. К примеру, при изменении какого-либо значения в меню, можно написать программу таким образом, что чем сильнее отклонена ось джойстика, тем быстрее изменяется значение переменной. Например, нам необходимо изменить значение от 0 до 2000 с шагом в 1. Представьте, сколько раз вам потребовалось бы нажимать кнопку или писать специальный алгоритм, скажем при длительности нажатия больше 3 сек прибавлять изменять шаг на 10 или 100. А при использовании джойстика это можно реализовать намного проще. Средняя цена на подобные модули колеблется в районе 1-2$ за модуль (с бесплатной доставкой в Россию). Поиск модулей в магазине AliExpress Сами модули выглядят примерно так:ДжойстикиНе пугайтесь количеством выводов, это сделано для универсальности и удобства подключения. Контакты Vcc и GND между всеми тремя группами контактов соединены. Т.о. для подключения нужно 5 проводов: ось X, ось Y, кнопка Z, питание VccДжойстик очень прост. Джойстики являются пассивными модулями и не потребляют энергию от платы Arduino. Vccтребуется только для подтягивающих резисторов. Также возможно, что модули не имеют подтягивающих резисторов. В этом случае необходимо установить точку подключения кнопки с +Vccчерез резистор 1-10 кОм. Схема подключения к Arduino:Подключение джойстика к ArduinoВ программе, работать с джойстиком также очень просто:

#define axis_X 0 // Ось X подключена к аналогу 0 #define axis_Y 1 // Ось Y подключена к аналогу 1 #define axis_Z 2 // Ось Z (кнопка джойстика) подключена к цифре 2 int value_X, value_Y, value_Z = 0; // Переменные для хранения значений осей void setup()void loop()

Вывод данных джойстика в Serial Monitor

Как вы можете видеть выше, сначала мы определяем входные контакты для осей (define), а затем в основном цикле считываем значения с контактов и выводим их на последовательный дисплей. Вот такая картина. Как видите, все очень просто. И, наконец, нам нужно написать короткую программу, которая изменяет значение переменной в зависимости от отклонения джойстика от нуля по оси Y. А при нажатии кнопки джойстика переменная обнуляется.

#define axis_Y 1 // Ось Y подключена к аналогу 1 #define axis_Z 2 // Ось Z (кнопка джойстика) подключена к цифре 2 int value, value_Y, value_Z = 0; // Переменные для хранения значений осей void setup()void loop()= 0 && значение_Y<100) value = value - 10; if(value_Y>100 && значение_Y<300) value = value - 5; if(value_Y>300 && значение_Y<520) value = value - 1; if(value_Y>535 && значение_Y<700) value = value + 1; if(value_Y>700 && значение_Y<900) value = value + 5; if(value_Y>900) value = value + 10; value_Z = digitalRead(axis_Z); // Считываем цифровое значение оси Z (кнопка) if(value_Z == 0) value = 0; // Сброс значения Serial.println(value, DEC); // Выводим значение в Serial Monitor delay(500); // Задержка>

Вывод данных джойстика в Serial Monitor

Устройство аналогово джойстика и принцип работы.

Устройство аналогово джойстика и принцип работы.

Джойстик представляет собой блок с 2 потенциометрами и тактовой клавишей.

Устройство аналогово джойстика и принцип работы.

Все контролируется палкой. При изменении положения стика вдоль оси X вращается выход потенциометра outX, а при перемещении вдоль оси Y вращается значение выхода потенциометра outY. По сути, это 2 потенциометра, с которых мы считываем значения. Рычаг предназначен для самостоятельного возврата в среднее положение. Это обеспечивает центрирование потенциометров. В этом состоянии джойстика выходами являются outX, outY 511 .

Управляет всем стик. При изменении положения стика по оси X

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

На панели управления есть кнопка часов. Вы сами решаете, использовать его или нет. Когда я разрабатывал пульт дистанционного управления для автомобиля с дистанционным управлением, я использовал эту кнопку для переключения между функциями джойстика и акселерометра. Если вам интересно, вы можете прочитать об этом на странице проекта: Радиоуправляемый автомобиль. Arduino + nrf24l01 + пульт дистанционного управления.

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

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

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

подключим джойстик к Arduino UNO по схеме.

Затем необходимо загрузить код в Arduino UNO.

После чего нужно загрузить код в Arduino UNO.

На экране порта вы увидите следующие данные.

В мониторе порта будут вот такие данные.

Как видите, он отличается от 511. Показания на разных осях разные: X=507, Y=510. Эти данные пригодятся в следующем примере.

Когда мы перемещаем рычаг джойстика, мы видим, что значения для каждой оси изменяются от 0 до 1023.

Если мы подвигаем стик джойстика, то увидим изменение значений от 0 до 1023 по каждой оси.

На выходе получается значение до 1023. Такой диапазон значений трудно реализовать в проектах Arduino, поэтому мы преобразуем это значение в диапазон от 0 до 255 в функции map().

 Данный диапазон значений практически не применим в проектах на Ардуино

На экране коннектора мы получаем такие значения.

После чего на мониторе порта мы получим вот такие значения.

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

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

Чтобы еще больше усложнить ситуацию, мы можем сделать так, чтобы светодиод не горел, когда джойстик находится в центральном положении, а когда мы наклоняем джойстик, яркость светодиода будет равномерно увеличиваться. Для этого нам нужно подключить светодиоды к контактам с ШИМ. Подключим джойстик и светодиоды к Arduino в соответствии со схемой.

Подключим джойстик и светодиоды к Ардуино по схеме

Поскольку мы знаем, что значение в центральном положении джойстика равно 507 для оси x и 510 для оси y, мы приводим его в нужный диапазон с помощью функции map(), например, для оси x от 507 до 1023 в диапазоне от 0 до 255. Код будет выглядеть следующим образом.

Так как мы знаем значение при центральном положении стика

Этот пример может быть использован при разработке беспроводного пульта дистанционного управления.

Подключение джойстика к Arduino Uno

Большинство людей, когда их спрашивают о джойстике, в первую очередь вспоминают игровой контроллер. Да, джойстики действительно очень распространены в индустрии видеоигр, но помимо этого, они также находят применение в различных электронных проектах DIY. Джойстик — это, по сути, не что иное, как комбинация двух потенциометров для плоскостей X и Y соответственно.

Внешний вид подключения джойстика к плате Arduino Uno

В этой статье мы рассмотрим подключение джойстика к плате Arduino, которая управляет включением и выключением 4 светодиодов, указывающих направление движения рукоятки джойстика. На джойстике также имеется кнопка, которую при необходимости можно активировать для различных целей. Когда эта кнопка нажата, загорается другой светодиод в нашем проекте.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Джойстик (купить на AliExpress).
  3. Светодиоды (5 шт.) (купить на AliExpress).
  4. Резисторы 100 Ом (3 шт.) (купить на AliExpress).
  5. Соединительные провода.
  6. Макетная плата.

Модуль джойстика, который мы будем использовать в нашем проекте, по принципу работы похож на джойстики, распространенные в индустрии видеоигр. Он основан на двух потенциометрах, установленных под углом 90 градусов друг к другу. Эти потенциометры соединены с коротким валом, который центрируется пружинами.

Джойстики бывают разных форм и размеров. Внешний вид типичного джойстика показан на рисунке ниже. Блок джойстика имеет аналоговые выходы, которые вырабатывают выходное напряжение, зависящее от направления наклона вала джойстика. Интерпретируя эти изменения напряжения на выходах джойстика с помощью микроконтроллера (в данном случае в этой роли выступает плата Arduino), мы можем определить направление движения оси джойстика. Мы уже обсуждали подключение джойстика к микроконтроллеру AVR на нашем сайте.

Внешний вид джойстика

На следующем рисунке вы можете увидеть, как выглядит джойстик, когда рукоятка снята.

Как видно на рисунке, рассматриваемый нами модуль джойстика имеет две оси: x и y. Каждая ось джойстика установлена на потенциометре. Средние контакты (т.е. переменные контакты) этих потенциометров подключены к выходным контактам джойстика Rx и Ry. Когда джойстик находится в нерабочем положении, Rx и Ry работают как делители напряжения. Принцип работы джойстика показан в следующем видеоролике.

Потенциометры джойстика действуют как делители напряжения. В положении покоя (т.е. когда ось джойстика отцентрирована) напряжение на выходах этих потенциометров составляет 2,5 В. При движении оси джойстика напряжение на выходах потенциометров изменяется от 0 до 5 В в зависимости от направления движения оси джойстика. Когда джойстик подключен к аналоговым входам платы Arduino, выходы АЦП (аналого-цифровых преобразователей) имеют значение 512 в состоянии покоя (возможны небольшие отклонения от этого значения из-за неточности пружин других компонентов механизма джойстика). При перемещении оси джойстика значения на выходах этих АЦП изменяются от 0 до 1023.

На этом рисунке показаны направления X и Y джойстика и то, как изменяются значения на его выходах при подключении к плате Arduino Uno.

Принцип изменения значений на выходах джойстика при движениях его оси

Когда джойстик перемещается вдоль горизонтальной оси, напряжение на выводе Rx изменяется. Если джойстик перемещается вдоль вертикальной оси, напряжение на выводе Ry также изменяется. Таким образом, у нас есть 4 направления джойстика и 2 выходных контакта АЦП. Когда ось джойстика перемещается, напряжение на этих контактах становится выше или ниже в зависимости от направления движения джойстика.

Оцените статью