Hur man styr servomotor med joystick

Prova Vårt Instrument För Att Eliminera Problem





I det här inlägget lär vi oss hur man styr servomotorer med hjälp av en joystick och Arduino. Vi kommer att se en översikt om joystick, dess stift, dess konstruktion och arbete. Vi kommer att extrahera användbara data från joysticken som kommer att vara basen för styrning av servomotorerna.

Introduktion

Mottoet för denna artikel är inte bara att kontrollera servomotorerna men att lära sig att använda en joystick för kontroll många andra kringutrustning.



Låt oss nu titta på joysticken.

En joystick är en inmatningsenhet som består av en spak som kan röra sig i flera riktningar i X- och Y-axlarna. Spakens rörelse används för att styra en motor eller andra kringutrustningens elektroniska enheter.



Joysticks används från RC-leksaker till Boing-flygplan och utför liknande funktioner. Dessutom har spel och mindre joystick en tryckknapp i Z-axeln som kan programmeras för att göra många användbara åtgärder.

Illustration av joystick:

Illustration av joystick:

Joysticks är elektroniska enheter i allmänhet, så vi måste använda ström. Spakens rörelse ger spänningsskillnad vid utgångsstift. Spänningsnivåerna bearbetas av en mikrokontroller för att styra utgångsenheten såsom en motor.

Den illustrerade joysticken är liknande, som finns i PlayStation- och Xbox-kontroller. Du behöver inte bryta dessa kontroller för att rädda en. Dessa moduler är lätt tillgängliga på lokala elektroniska butiker och e-handelssajter.

Låt oss nu se konstruktionen av denna joystick.

Den har två 10 kilo ohm potentiometer placeras i X- och Y-axlar med fjädrar så att den återgår till sitt ursprungliga läge när användaren släpper kraft från spaken. Den har en tryck-till-PÅ-knapp på Z-axeln.

Den har 5 stift, 5 volt Vcc, GND, variabel X, variabel Y och SW (Z-axelomkopplare). När vi ansluter spänning och lämnar joysticken på sin ursprungliga spakposition. X- och Y-stiften producerar hälften av den applicerade spänningen.

När vi flyttar spaken varierar spänningen i X- och Y-utgångsstift. Låt oss nu praktiskt taget koppla joysticken till Arduino.

Schematisk bild:

Arduino servomotorstyrning med joystick

Stiftanslutningsdetaljerna ges bredvid kretsen. Anslut den slutförda hårdvarukonfigurationen och ladda upp koden.

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

Öppna den seriella bildskärmen, du kan se spänningsnivån vid X- och Y-axelns stift och status för Z-axeln, dvs. tryckknapp enligt bilden nedan.

Dessa X-, Y-, Z-axelvärden används för att tolka spakens position. Som du kan se är värdena från 0 till 1023.

Det beror på att Arduino har inbyggt ADC-omvandlare som omvandlar spänningen 0V - 5V till 0 till 1023.

Du kan bevittna från seriemonitorn att när spaken lämnas orörd, förblir spaken i mittläget på både X- och Y-axlarna och visar halva värdet 1023.

Du kan också se att det inte är exakt hälften av 1023 som beror på att tillverkningen av dessa joysticks aldrig varit perfekt.

Nu skulle du ha fått lite teknisk kunskap om joysticks.

Låt oss nu se hur man styr två servomotorer med en joystick.

Kretsschema:

De två servomotorerna styrs av en joystick när du flyttar joysticken längs X-axeln, den servo som är ansluten vid stift nr 7 rör sig medurs och moturs beroende på spakposition.

Du kan också hålla servostyrdonet i en position, om du håller joysticknivån i ett visst läge.

Liknande för servomotor ansluten vid stift nr 6 kan du flytta spaken längs Y-axeln.

När du trycker på spaken längs Z-axeln utför de två motorerna 180 graders svepning.

Du kan antingen ansluta arduino till 9v batteri eller till datorn. Om du ansluter Arduino till datorn kan du öppna seriell bildskärm och se vinkeln på servostyrdon och spänningsnivåer.

Program för servomotorstyrning:

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

Om du har några specifika frågor angående detta projekt är du välkommen att uttrycka i kommentarsektionen, du kan få ett snabbt svar.




Tidigare: Digital kapacitansmätarkrets med Arduino Nästa: Använda digital potentiometer MCP41xx med Arduino