Hvordan kontrollere servomotor ved hjelp av styrespak

Prøv Instrumentet Vårt For Å Eliminere Problemer





I dette innlegget vil vi lære hvordan du styrer servomotorer ved hjelp av styrespak og Arduino. Vi får se oversikt over styrespaken, dens pinner, dens konstruksjon og arbeid. Vi vil hente ut nyttige data fra joysticken som vil være basen for å kontrollere servomotorene.

Introduksjon

Mottoet for denne artikkelen er ikke bare å kontrollere servomotorene men å lære å bruke en styrespak for å kontrollere mange andre eksterne enheter.



La oss nå se på styrespaken.

En joystick er en inngangsenhet som består av en spak, som kan bevege seg i flere retninger i X- og Y-akser. Bevegelsen til spaken brukes til å kontrollere en motor eller elektroniske enheter til eksterne enheter.



Joysticks brukes fra RC-leker til Boing-fly og utfører lignende funksjoner. I tillegg har spill og mindre joystick en trykknapp i Z-aksen som kan programmeres til å gjøre mange nyttige handlinger.

Illustrasjon av joystick:

Illustrasjon av joystick:

Joysticks er elektroniske enheter generelt, så vi må bruke strøm. Bevegelsen til spaken produserer spenningsforskjell ved utgangspinnene. Spenningsnivåene behandles av en mikrokontroller for å kontrollere utdataenheten, for eksempel en motor.

Den illustrerte styrespaken er lik en, som du finner i PlayStation- og Xbox-kontrollere. Du trenger ikke å bryte disse kontrollerne for å berge en. Disse modulene er lett tilgjengelige på lokale elektroniske butikker og e-handelsnettsteder.

La oss nå se hvordan denne styrespaken er konstruert.

Den har to 10 Kilo ohm potensiometer plassert i X- og Y-akser med fjærer slik at den går tilbake til sin opprinnelige posisjon når brukeren frigjør kraft fra spaken. Den har en trykk på PÅ-knapp på Z-aksen.

Den har 5 pinner, 5 volt Vcc, GND, variabel X, variabel Y og SW (Z-akselbryter). Når vi bruker spenning og lar styrespaken stå på sin opprinnelige spakposisjon. X- og Y-pinnene vil produsere halvparten av den påførte spenningen.

Når vi beveger spaken, varierer spenningen i X- og Y-utgangspinnene. La oss nå praktisk talt knytte joysticken til Arduino.

Skjematisk diagram:

Arduino servomotorstyring ved hjelp av styrespak

Pin-tilkoblingsdetaljene er gitt ved siden av kretsen. Koble til det fullførte maskinvaren og last opp 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--------------//

Åpne seriell skjerm, du kan se spenningsnivået på X- og Y-aksepinnene og statusen til Z-aksen, dvs. trykknappen som vist nedenfor.

Disse X-, Y-, Z-akseverdiene brukes til å tolke spakens posisjon. Som du kan se er verdiene fra 0 til 1023.

Det er fordi Arduino har innebygd ADC-omformer som konverterer spenningen 0V - 5V til 0 til 1023.

Du kan se fra den serielle skjermen at når spaken ikke blir berørt, forblir spaken i midtposisjonen på både X- og Y-aksene og viser halvverdien på 1023.

Du kan også se at det ikke er nøyaktig halvparten av 1023, det er fordi det å produsere disse joystickene aldri har vært perfekt.

Nå hadde du fått litt teknisk kunnskap om joysticks.

La oss nå se hvordan du styrer to servomotorer ved hjelp av en styrespak.

Kretsdiagram:

De to servomotorene styres av en styrespak når du beveger styrespaken langs X-aksen, servoen som er koblet til pinne nr. 7 beveger seg med klokken og mot klokken, avhengig av spakposisjon.

Du kan også holde servomotoren i en posisjon hvis du holder styrespaken på et bestemt sted.

Lignende for servomotor koblet til pinne nr. 6, kan du bevege spaken langs Y-aksen.

Når du trykker spaken langs Z-aksen, vil de to motorene utføre 180 graders feiing.

Du kan enten koble arduino til 9v batteri eller til datamaskin. Hvis du kobler Arduino til datamaskinen, kan du åpne seriell skjerm og se vinkelen på servomotorene og spenningsnivået.

Program for 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 noen spesifikke spørsmål angående dette prosjektet, kan du gjerne uttrykke det i kommentarseksjonen, du kan få et raskt svar.




Forrige: Digital kapasitansmåler krets ved hjelp av Arduino Neste: Bruke digitalt potensiometer MCP41xx med Arduino