Jak sterować serwomotorem za pomocą joysticka

Jak sterować serwomotorem za pomocą joysticka

W tym poście dowiemy się, jak sterować serwomotorami za pomocą joysticka i Arduino. Zobaczymy przegląd joysticka, jego pinów, budowy i działania. Będziemy wydobywać przydatne dane z joysticka, który będzie podstawą do sterowania serwomotorami.



Wprowadzenie

Mottem tego artykułu jest nie tylko sterowanie serwomotorami ale aby dowiedzieć się, jak używać pliku joystick do sterowania wiele innych urządzeń peryferyjnych.

Przyjrzyjmy się teraz joystickowi.





Joystick to urządzenie wejściowe składające się z dźwigni, która może poruszać się w kilku kierunkach w osiach X i Y. Ruch dźwigni służy do sterowania silnikiem lub dowolnymi urządzeniami peryferyjnymi.

Joysticki są używane od zabawek RC po samoloty Boing i pełnią podobne funkcje. Dodatkowo drążki do gier i mniejsze joysticki mają przycisk na osi Z, który można zaprogramować do wykonywania wielu użytecznych czynności.



Ilustracja joysticka:

Ilustracja joysticka:

Joysticki to generalnie urządzenia elektroniczne, więc musimy włączyć zasilanie. Ruch dźwigni powoduje powstanie różnicy napięcia na pinach wyjściowych. Poziomy napięcia są przetwarzane przez mikrokontroler w celu sterowania urządzeniem wyjściowym, takim jak silnik.

Zilustrowany joystick jest podobny do tego, który znajdziemy w kontrolerach PlayStation i Xbox. Nie musisz łamać tych kontrolerów, aby go uratować. Moduły te są łatwo dostępne w lokalnych sklepach elektronicznych i witrynach handlu elektronicznego.

Zobaczmy teraz konstrukcję tego joysticka.

Ma dwa 10 kiloomów potencjometr umieszczony w osiach X i Y ze sprężynami, tak że powraca do swojego pierwotnego położenia, gdy użytkownik zwolni siłę z dźwigni. Posiada przycisk włączania na osi Z.

Posiada 5 pinów, 5 V Vcc, GND, zmienną X, zmienną Y i SW (przełącznik osi Z). Kiedy przykładamy napięcie i zostawimy joystick w pierwotnym położeniu dźwigni. Piny X i Y wytworzą połowę przyłożonego napięcia.

Kiedy poruszamy dźwignią, napięcie zmienia się na pinach wyjściowych X i Y. Teraz praktycznie połączmy joystick z Arduino.

Schemat:

Sterowanie serwomotorem Arduino za pomocą joysticka

Szczegóły połączenia pinów podano obok obwodu. Podłącz zakończoną konfigurację sprzętu i prześlij kod.

Program:

//---------------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--------------//

Otwórz monitor szeregowy, aby zobaczyć poziom napięcia na kołkach osi X i Y oraz stan osi Z, tj. Przycisk, jak pokazano poniżej.

Te wartości osi X, Y, Z służą do interpretacji położenia dźwigni. Jak widać, wartości wynoszą od 0 do 1023.

Dzieje się tak, ponieważ Arduino ma wbudowany konwerter ADC, który konwertuje napięcie 0 V - 5 V na 0 do 1023 wartości.

Na monitorze szeregowym można zobaczyć, że gdy dźwignia pozostaje nietknięta, dźwignia pozostaje w środkowym położeniu obu osi X i Y i pokazuje połowę wartości 1023.

Widać również, że nie jest to dokładna połowa z 1023, ponieważ produkcja tych joysticków nigdy nie była idealna.

Do tej pory miałbyś już wiedzę techniczną na temat joysticków.

Zobaczmy teraz, jak sterować dwoma serwomotorami za pomocą jednego joysticka.

Schemat obwodu:

Dwa serwomotory są sterowane za pomocą jednego joysticka, gdy poruszasz joystickiem wzdłuż osi X, serwomechanizm podłączony do styku nr 7 porusza się zgodnie z ruchem wskazówek zegara i przeciwnie do ruchu wskazówek zegara w zależności od położenia dźwigni.

Możesz również trzymać serwomechanizm w określonej pozycji, jeśli trzymasz joystick w określonej pozycji.

Podobnie jak w przypadku serwomotoru podłączonego na pinie # 6, możesz przesuwać dźwignię wzdłuż osi Y.

Po naciśnięciu dźwigni wzdłuż osi Z oba silniki wykonają przemiatanie o 180 stopni.

Możesz podłączyć arduino do Bateria 9V lub do komputera. Jeśli podłączysz Arduino do komputera, możesz otworzyć monitor szeregowy i zobaczyć kąt siłowników serwo i poziomy napięć.

Program do sterowania silnikiem serwo:

//---------------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--------------//

Jeśli masz jakieś konkretne pytanie dotyczące tego projektu, możesz je wyrazić w sekcji komentarzy, możesz otrzymać szybką odpowiedź.




Poprzedni: Obwód cyfrowego miernika pojemności za pomocą Arduino Dalej: Używanie potencjometru cyfrowego MCP41xx z Arduino