Kako upravljati servo motorom pomoću džojstika

Kako upravljati servo motorom pomoću džojstika

U ovom ćemo postu naučiti kako upravljati servo motorima pomoću džojstika i Arduina. Vidjet ćemo pregled o džojstiku, njegovim iglama, njegovoj konstrukciji i radu. Izdvajat ćemo korisne podatke s joysticka koji će biti osnova za upravljanje servo motorima.



Uvod

Moto ovog članka nije samo da upravljajte servo motorima ali, kako biste naučili kako koristiti a džojstik za upravljanje mnogi drugi periferni uređaji.

Pogledajmo sada džojstik.





Navigacijska palica je ulazni uređaj koji se sastoji od poluge koja se može pomicati u nekoliko smjerova u X i Y osi. Kretanje ručice koristi se za upravljanje motorom ili bilo kojim perifernim elektroničkim uređajima.

Joystickovi se koriste od RC igračaka do aviona Boing i obavljaju slične funkcije. Pored toga, igraće i manje igračke palice imaju gumb u osi Z koji se može programirati za izvršavanje mnogih korisnih radnji.



Ilustracija džojstika:

Ilustracija džojstika:

Joystickovi su općenito elektronički uređaji pa moramo primijeniti snagu. Kretanje poluge stvara razliku napona na izlaznim zatičima. Razine napona obrađuje mikrokontroler za upravljanje izlaznim uređajem kao što je motor.

Ilustrirani džojstik je sličan onom koji se može naći na PlayStationu i Xbox kontrolerima. Ne morate razbiti ove kontrolere da biste ih spasili. Ti su moduli lako dostupni u lokalnim elektroničkim trgovinama i web mjestima e-trgovine.

Pogledajmo sada konstrukciju ovog džojstika.

Ima dva 10 kilo ohma potenciometar smješten u X i Y osi s oprugama tako da se vraća u prvobitni položaj kada korisnik otpusti silu iz ručice. Ima gumb za uključivanje na Z osi.

Ima 5 pinova, 5 volt Vcc, GND, varijablu X, varijablu Y i SW (prekidač osi ​​Z). Kad primijenimo napon i ostavimo džojstik u prvobitnom položaju ručice. Osovine X i Y proizvest će polovicu primijenjenog napona.

Kad pomaknemo ručicu, napon varira u X i Y izlaznim klinovima. Sada praktički spojimo džojstik s Arduinom.

Shematski dijagram:

Arduino servo upravljanje motorom pomoću džojstika

Pojedinosti o pin kontaktu date su uz krug. Spojite dovršeno postavljanje hardvera i prenesite kôd.

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

Otvorite serijski monitor možete vidjeti razinu napona na klinovima osi X i Y i status Z osi, tj. Tipku kao što je dolje prikazano.

Vrijednosti osi X, Y, Z koriste se za tumačenje položaja ručice. Kao što vidite vrijednosti su od 0 do 1023.

To je zato što je Arduino ugradio ADC pretvarač koji pretvara napon 0V - 5V u vrijednosti od 0 do 1023.

Sa serijskog monitora možete svjedočiti da kada poluga ostane netaknuta, poluga ostaje u srednjem položaju i osi X i Y i prikazuje polovinu vrijednosti 1023.

Također možete vidjeti da nije točno polovica od 1023. godine jer proizvodnja ovih džojstika nikada nije bila savršena.

Do sada biste stekli neko tehničko znanje o džojstiku.

Sada da vidimo kako upravljati s dva servo motora pomoću jednog džojstika.

Kružni dijagram:

Dva servo motora kontroliraju se jednim džojstikom kad pomičete džojstik duž X osi, servo povezan na zatik # 7 pomiče se u smjeru kazaljke na satu i suprotno od smjera kazaljke na satu, ovisno o položaju ručice.

Servo aktuator također možete držati u položaju ako držite nivo upravljačke palice u određenom položaju.

Slično kao kod servo motora spojenog na zatik # 6, ručicu možete pomicati duž Y osi.

Kada pritisnete ručicu duž Z osi, dva motora izvršit će pomicanje za 180 stupnjeva.

Možete povezati arduino na 9v baterija ili na računalo. Ako Arduino spojite na računalo, možete otvoriti serijski monitor i vidjeti kut servo aktuatora i razinu napona.

Program za upravljanje servo motorom:

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

Ako imate bilo kakvih specifičnih pitanja u vezi s ovim projektom, slobodno izrazite u odjeljku za komentare, možda ćete dobiti brzi odgovor.




Prethodno: Krug digitalnog mjerača kapaciteta pomoću Arduina Dalje: Korištenje digitalnog potenciometra MCP41xx s Arduinom