Как управлять серводвигателем с помощью джойстика

Попробуйте наш инструмент устранения неполадок





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

Вступление

Девиз этой статьи - не просто управлять серводвигателями но, чтобы узнать, как использовать джойстик для управления многие другие периферийные устройства.



Теперь посмотрим на джойстик.

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



Джойстики используются от радиоуправляемых игрушек до самолетов Boing и выполняют аналогичные функции. Кроме того, игровые джойстики и джойстики меньшего размера имеют кнопку на оси Z, которую можно запрограммировать на выполнение множества полезных действий.

Иллюстрация джойстика:

Иллюстрация джойстика:

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

Изображенный джойстик аналогичен джойстику, который можно найти в контроллерах PlayStation и Xbox. Вам не нужно ломать эти контроллеры, чтобы спасти один. Эти модули легко доступны в местных электронных магазинах и на сайтах электронной коммерции.

Теперь посмотрим, как устроен этот джойстик.

Он имеет два 10 кОм потенциометр расположен по осям X и Y с помощью пружин, так что он возвращается в исходное положение, когда пользователь отпускает усилие с рычага. У него есть кнопка включения на оси Z.

Он имеет 5 контактов, 5 вольт Vcc, GND, переменную X, переменную Y и SW (переключатель оси Z). Когда мы подаем напряжение и оставляем джойстик в исходном положении рычага. Контакты X и Y будут производить половину приложенного напряжения.

Когда мы перемещаем рычаг, напряжение меняется на выходных контактах X и Y. Теперь давайте практически подключим джойстик к Arduino.

Принципиальная схема:

Управление серводвигателем Arduino с помощью джойстика

Детали подключения штырей указаны рядом со схемой. Подключите завершенную настройку оборудования и загрузите код.

Программа:

//---------------Program Developed by R.Girish--------------//
int X_axis = A0
int Y_axis = A1
int Z_axis = 2
int x = 0
int y = 0
int z = 0
void setup()
{
Serial.begin(9600)
pinMode(X_axis, INPUT)
pinMode(Y_axis, INPUT)
pinMode(Z_axis, INPUT)
digitalWrite(Z_axis, HIGH)
}
void loop()
{
x = analogRead(X_axis)
y = analogRead(Y_axis)
z = digitalRead(Z_axis)
Serial.print('X axis = ')
Serial.println(x)
Serial.print('Y axis = ')
Serial.println(y)
Serial.print('Z axis = ')
if(z == HIGH)
{
Serial.println('Button not Pressed')
}
else
{
Serial.println('Button Pressed')
}
Serial.println('----------------------------')
delay(500)
}
//---------------Program Developed by R.Girish--------------//

Откройте последовательный монитор, вы можете увидеть уровень напряжения на выводах осей X и Y и состояние оси Z, то есть нажать кнопку, как показано ниже.

Эти значения осей X, Y, Z используются для интерпретации положения рычага. Как видите, значения от 0 до 1023.

Это потому, что Arduino имеет встроенный преобразователь АЦП, который преобразует напряжение 0-5 В в значения от 0 до 1023.

Вы можете наблюдать из последовательного монитора, что, когда рычаг не трогается, рычаг остается в среднем положении по осям X и Y и показывает половину значения 1023.

Вы также можете видеть, что это не половина из 1023, потому что производство этих джойстиков никогда не было идеальным.

К настоящему времени вы уже должны были иметь некоторые технические знания о джойстиках.

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

Принципиальная электрическая схема:

Два серводвигателя управляются одним джойстиком, когда вы перемещаете джойстик по оси X, сервопривод, подключенный к выводу № 7, перемещается по часовой стрелке и против часовой стрелки в зависимости от положения рычага.

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

Как и для серводвигателя, подключенного к выводу №6, вы можете перемещать рычаг по оси Y.

Когда вы нажимаете рычаг вдоль оси Z, два двигателя совершают поворот на 180 градусов.

Вы можете подключить Arduino к Батарея 9v или к компьютеру. Если вы подключите Arduino к компьютеру, вы можете открыть последовательный монитор и увидеть угол сервоприводов и уровни напряжения.

Программа для управления серводвигателем:

//---------------Program Developed by R.Girish--------------//
#include
Servo servo_X
Servo servo_Y
int X_angleValue = 0
int Y_angleValue = 0
int X_axis = A0
int Y_axis = A1
int Z_axis = 2
int x = 0
int y = 0
int z = 0
int pos = 0
int check1 = 0
int check2 = 0
int threshold = 10
void setup()
{
Serial.begin(9600)
servo_X.attach(7)
servo_Y.attach(6)
pinMode(X_axis, INPUT)
pinMode(Y_axis, INPUT)
pinMode(Z_axis, INPUT)
digitalWrite(Z_axis, HIGH)
}
void loop()
{
x = analogRead(X_axis)
y = analogRead(Y_axis)
z = digitalRead(Z_axis)
if(z == LOW)
{
Serial.print('Z axis status = ')
Serial.println('Button Pressed')
Serial.println('Sweeping servo actuators')
for (pos = 0 pos <= 180 pos += 1)
{
servo_X.write(pos)
delay(10)
}
for (pos = 180 pos >= 0 pos -= 1)
{
servo_X.write(pos)
delay(15)
}
for (pos = 0 pos <= 180 pos += 1)
{
servo_Y.write(pos)
delay(10)
}
for (pos = 180 pos >= 0 pos -= 1)
{
servo_Y.write(pos)
delay(15)
}
Serial.println('Done!!!')
}
if(x > check1 + threshold || x {
X_angleValue = map(x, 0, 1023, 0, 180)
servo_X.write(X_angleValue)
check1 = x
Serial.print('X axis voltage level = ')
Serial.println(x)
Serial.print('X axis servo motor angle = ')
Serial.print(X_angleValue)
Serial.println(' degree')
Serial.println('------------------------------------------')
}
if(y > check2 + threshold || y {
Y_angleValue = map(y, 0, 1023, 0, 180)
servo_Y.write(Y_angleValue)
check2 = y
Serial.print('Y axis voltage level = ')
Serial.println(y)
Serial.print('Y axis servo motor angle = ')
Serial.print(Y_angleValue)
Serial.println(' degree')
Serial.println('------------------------------------------')
}
}
//---------------Program Developed by R.Girish--------------//

Если у вас есть какие-либо конкретные вопросы относительно этого проекта, не стесняйтесь выражать их в разделе комментариев, вы можете получить быстрый ответ.




Предыдущая статья: Схема цифрового измерителя емкости с использованием Arduino Далее: Использование цифрового потенциометра MCP41xx с Arduino