Sådan styres servomotor ved hjælp af joystick

Prøv Vores Instrument Til At Fjerne Problemer





I dette indlæg vil vi lære at styre servomotorer ved hjælp af et joystick og Arduino. Vi får vist et overblik over joystick, dens ben, dets konstruktion og arbejde. Vi udtrækker nyttige data fra joysticket, som vil være basen til styring af servomotorer.

Introduktion

Mottoet for denne artikel er ikke kun at styre servomotorer men for at lære at bruge en joystick til kontrol mange andre perifere enheder.



Lad os nu se på joysticket.

Et joystick er en inputenhed, der består af et håndtag, der kan bevæge sig i flere retninger i X- og Y-akser. Bevægelsen af ​​armen bruges til at styre en motor eller elektroniske enheder til periferiudstyr.



Joysticks bruges fra RC-legetøj til Boing-fly og udfører lignende funktioner. Derudover har spil og mindre joystick en trykknap i Z-aksen, som kan programmeres til at udføre mange nyttige handlinger.

Illustration af joystick:

Illustration af joystick:

Joysticks er generelt elektroniske enheder, så vi skal bruge strøm. Bevægelsen af ​​armen frembringer spændingsforskel ved udgangsstifter. Spændingsniveauerne behandles af en mikrocontroller til at styre outputenheden, såsom en motor.

Den illustrerede joystick er den samme, som kan findes i PlayStation- og Xbox-controllere. Du behøver ikke at bryde disse controllere for at redde en. Disse moduler er let tilgængelige på lokale elektroniske butikker og e-handelssteder.

Lad os nu se opbygningen af ​​denne joystick.

Den har to 10 Kilo ohm potentiometer placeret i X- og Y-akser med fjedre, så den vender tilbage til sin oprindelige position, når brugeren frigør kraft fra håndtaget. Det har et tryk på ON-knap på Z-aksen.

Den har 5 ben, 5 volt Vcc, GND, variabel X, variabel Y og SW (Z-aksekontakt). Når vi tilfører spænding og efterlader joysticket på sin oprindelige håndtagsposition. X- og Y-stifterne producerer halvdelen af ​​den anvendte spænding.

Når vi bevæger armen, varierer spændingen i X- og Y-udgangsstifter. Lad os nu næsten styre joysticket til Arduino.

Skematisk diagram:

Arduino servomotorstyring ved hjælp af joystick

Stiftforbindelsesoplysningerne er vist ved siden af ​​kredsløbet. Forbind den færdige hardwareopsætning og upload 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--------------//

Åbn den serielle skærm, du kan se spændingsniveauet ved X- og Y-aksestifterne og status for Z-aksen, dvs. trykknap som vist nedenfor.

Disse X-, Y-, Z-akseværdier bruges til at fortolke armens position. Som du kan se, er værdierne fra 0 til 1023.

Det skyldes, at Arduino har indbygget ADC-konverter, der konverterer spændingen 0V - 5V til 0 til 1023 værdier.

Du kan se fra den serielle skærm, at når armen ikke er berørt, forbliver armen i midterpositionen for både X- og Y-akserne og viser halvværdien på 1023.

Du kan også se, at det ikke er nøjagtig halvdelen af ​​1023, fordi produktionen af ​​disse joystick aldrig har været perfekt.

Nu ville du have fået teknisk viden om joysticks.

Lad os nu se, hvordan man styrer to servomotorer ved hjælp af et joystick.

Kredsløbsdiagram:

De to servomotorer styres af et joystick, når du bevæger joysticket langs X-aksen, den servo, der er tilsluttet ved pin nr. 7, bevæger sig med uret og mod uret afhængigt af håndtagets position.

Du kan også holde servomotoren i en position, hvis du holder joysticket i en bestemt position.

Lignende for servomotor, der er tilsluttet ved pin # 6, kan du flytte armen langs Y-aksen.

Når du trykker armen langs Z-aksen, udfører de to motorer 180 graders fejning.

Du kan enten forbinde arduino til 9v batteri eller til computeren. Hvis du slutter Arduino til computeren, kan du åbne seriel skærm og se vinklen på servoaktuatorer og spændingsniveauer.

Program til servomotorstyring:

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

Hvis du har nogle specifikke spørgsmål angående dette projekt, er du velkommen til at udtrykke det i kommentarfeltet, du kan få et hurtigt svar.




Forrige: Digital kapacitansmåler kredsløb ved hjælp af Arduino Næste: Brug af digitalt potentiometer MCP41xx med Arduino