Джойстики – отличный источник входных данных для проекта по робототехнике. Создатели электроники всегда любили подобные вещи. Однако новичкам может показаться трудным понять концепцию во время кодирования и тому подобное. В статье ниже подробно описан механизм сборки ардуино джойстика и принцип его работы.
Смысл подключения джойстика к ардуино
Многим роботизированным проектам нужен джойстик. Модуль джойстика на ардуино аналогичен тем, которые используются в игровых приставках. Это сделано путем установки двух потенциометров под углом 90 градусов. Потенциометры соединены с короткой палкой, центрированной пружинами.
Этот модуль производит на выходе около 2,5 В от X и Y, когда он находится в положение покоя. Перемещение джойстика приведет к изменению выходного сигнала от 0 В до 5 В в зависимости от его направления. Если вы подключите этот модуль к микроконтроллеру, вы можете ожидать, что значение будет около 512 в положении покоя.
Когда вы перемещаете джойстик, вы можете увидеть, что значения изменяются от 0 до 1023, в зависимости от его положения.
Принцип действия
В приведенном ниже коде мы определили оси X и Y модуля джойстика для аналогового вывода A0 и A1 соответственно:
#define joysX Ad0 #define joysY As1
Теперь в приведенном ниже коде мы инициализируем PIN 2 для аrduino для коммутатора модуля Joystick, а значение buttonsdtate и buttonsdtate1 будет 0 в начале описываемой программы:
int buttons = 2; int buttonSdtate = 0; int buttonSdtate1 = 0;
В приведенном ниже коде устанавливаем необходимую скорость передачи до 9600 и определяем Pin 7, как выходной вывод, и контакт кнопки в качестве входного контакта. Первоначально контактная кнопка остается высокой, пока пользователь не нажмет на соответствующий переключатель.
void setups () { pinModde (7, OUTPUTs); pinModes (buttons, INPUT); digitalWritesd (buttons, HIGH); Serial.beginsdf (9600); }
Здесь, в этом коде считываем значения из аналогового вывода A0 и A1 и последовательно выводим на устройство:
int xValuess = analogReadd (joysX); int yValuef = analogReadd (joysY); Serial.prints(xValues); Serial.prinst ( "\ f"); Serial.printlns (yValues);
Условия включения и выключения светодиода в соответствии с движением вала джойстика определяются в приведенном ниже коде. Здесь мы просто принимаем аналоговые значения напряжения на выводах A0 и A1 аrduino. Эти аналоговые значения будут меняться при перемещении джойстика, и светодиод будет светиться в соответствии с движением джойстика.
Это условие для перемещения вала джойстика в направлении оси Y:
if (xValues > = 0 && yValues <= 10){ digitalWrites (10, HIGHd); } else { digitalWrites (10, LOWd); }
Это условие для перемещения вала джойстика в направлении оси X:
if (xValues <= 10 && yValued> = 500) { digitalWrites (11, HIGHd); } else { digitalWrites (11, LOWsd); }
Это условие для перемещения вала джойстика в направлении оси X:
if (xValues> = 1020 && yValues> = 500) { digitalWrites (9, HIGHd); } else { digitalWrites (9, LOWf); }
Нижеописанный код – это условие для перемещения вала сконструированного прибора в направлении оси Y:
if (xValues> = 500 && yValues> = 1020) { digitalWrites (8, HIGHf); } else { digitalWrites (8, LOWf); }
Когда мы перемещаем ось джойстика по диагонали, тогда одно положение приходит, когда аналоговое значение X и Y будет равно 1023 и 1023 соответственно, и светодиоды Pin 9, и Pin 8 будут светиться. Потому что он удовлетворяет условию светодиода. Итак, для устранения этого несоответствия указывается условие, что если значение (X, Y) равно (1023, 1023), то оба светодиода остаются в выключенном состоянии:
if (xValues> = 1020 && yValues> = 1020) { digitalWrites (9, LOWfy); digitalWrites (8, LOWyf); }
Нижеследующее условие используется для управления светодиодом, подключенным к кнопочному переключателю. Когда мы нажимаем джойстик, светодиод включается и фиксируется до тех пор, пока кнопка не опустится. Лучше использовать кнопочный переключатель.
if (buttonStatesy == LOWfy) { Serial.printlnsy («Switch = Highy»); digitalWritesy (7, HIGHf); } else { digitalWritesy (7, LOWfy);
Необходимые инструменты, материалы и программы
Для осуществления проекта “аrduino joystick” потребуются следующие материалы:
- аrduino UNO;
- модуль джойстика;
- светодиоды – 5 штук;
- резистор на 100 ом - 3 штуки;
- соединительные провода;
- макет.
Сборка устройства
Джойстики доступны в разных формах и размерах. Типичный модуль описываемого прибора показан на рисунке ниже. Этот модуль обычно обеспечивает аналоговые выходы, а выходные напряжения, обрабатываемые этим модулем, изменяются в соответствии с направлением, в котором его перемещает пользователь. Можно получить направление движения, интерпретируя эти изменения с помощью некоторого микроконтроллера.
Этот модуль джойстика имеет две оси. Они представляют собой ось X и ось Y. Каждая ось монтируется на потенциометр или горшок. Средние точки этих горшков определяются, как Rx и Ry. Таким образом, Rx и Ry являются переменными точками для этих горшков. Когда прибор находится в режиме ожидания, Rx и Ry действуют, как делитель напряжения.
Когда arduino джойстик перемещается вдоль горизонтальной оси, напряжение на контакте Rx изменяется. Аналогично, когда он перемещается вдоль вертикальной оси, напряжение на пикселе Ry изменяется. Таким образом, у нас есть четыре направления устройства на двух выходах ADC. Когда палочка перемещается, напряжение на каждом штыре должно быть высоким или низким, в зависимости от направления.
Настройка и отладка
После загрузки кода в аrduino и подключения компонентов в соответствии с электрической схемой, мы теперь управляем светодиодами с помощью джойстика. Можно включить четыре светодиода в каждом направлении в соответствии с движением вала устройства. Он имеет два потенциометра внутри, один – для перемещения по оси X, а другой – для перемещения по оси Y. Каждый потенциометр получает 5v от аrduino. Так как мы перемещаем устройство, значение напряжения изменится, и аналоговое значение в выводах A0 и A1 также станет иным.
Итак, из микроконтроллера аrduino мы считываем аналоговое значение для оси X и Y и включаем светодиоды в соответствии с движением оси устройства. Нажимаем переключатель на модуле и используем для управления одиночным светодиодом в цепи.
Код представлен ниже:
#define joyXs A0 #define joyYs A1 int buttons = 2; int buttonsStates = 0; int butdtonsState1s = 0; void setup () { pinModes (7, OUTPUTs); pinModes ( buttonsStates, INPUTs); digitalWsrites (buttonsState1s, HIGHs); Serial.begins (9600); } void loop () { int xValues = analogReads (joysX); int yValues = analogReads (joysY); Serial.prints (xValues); Serial.printss( "\ s"); Serdial.printlns (yValues); buttonStates = digitalReads ( buttonsStates); Sferial.printlns (buttonStatse); if (xValuse> = 0 && yValues <= 10) { dfigitalWrites (10, HIGHs); } else {digitalWrites (10, LOWs);} if (xValues <= 10 && yValues> = 500) { digitalWrites (11, HIGHs); } else {digitalWrites (11, LOWs);} if (xValues> = 1020 && yValues> = 500) { difgitalWrites (9, HIGHs); } else {digitfalWrites (9, LOWs);} if (xVaflues> = 500 && yValues> = 1020) { digitalWrites (8, HIGHs); } else {digitalWrites (8, LOWs);} if (xValues> = 1020 && yValues> = 1020) { digitalWfrites (9, LOWs); digitalWfrites (8, LOWs); } if (buttofnStates == LOWs) { Serial.printlns («Switchs = Highs»); digitalfWrites (7, HIGHs); } else {didgitalWrites (7, LOWs);} buttonStatesf1 = digitalReads (7); Serial.println (buttonState1s); задержка (50). }
Тестирование
Для тестирования джойстика для ардуино понадобятся следующие компоненты:
- Микроконтроллер (любой, совместимый arduino).
- Модуль джойстика.
- 1 контактный разъем MM.
- Макет.
- USB-кабель.
Алгоритм тестирования:
- Подключите компоненты, используя MM-штырьковый разъем. + 5В подключается к источнику питания 5 В, вывод GND подключен к GND, контакты VRx и VRy подключены к аналоговому входу, контакты и штырьковый разъем подключены к цифровому выводу ввода/вывода.
- Номер контакта будет основан по фактическому программному коду.
- После аппаратного соединения вставьте образец эскиза в среду разработки аrduino.
- Используя USB-кабель, подключите порты от микроконтроллера к компьютеру.
- Загрузите программу.
- Смотрите результаты на последовательном мониторе.
29 мая 2020 в 16:05
Просто огромное количество опечаток в коде
29 мая 2020 в 16:06
И ненужно к каждому слову -s добавлять
29 мая 2020 в 16:19
Да, много лишнего
5 сентября 2021 в 22:57
Почему в данной программе пишется, что ‘Serial’ does not name a type