Paano Makokontrol ang Servo Motor Gamit ang Joystick

Subukan Ang Aming Instrumento Para Sa Pagtanggal Ng Mga Problema





Sa post na ito matututunan natin kung paano makontrol ang mga servo motor gamit ang isang joystick at Arduino. Makikita natin ang pangkalahatang ideya tungkol sa joystick, mga pin nito, konstruksyon at pagtatrabaho nito. Kami ay kumukuha ng kapaki-pakinabang na data mula sa joy stick na kung saan ay magiging batayan para sa pagkontrol sa mga motor na servo.

Panimula

Ang motto ng artikulong ito ay hindi lamang sa kontrolin ang mga motor na servo ngunit, upang malaman kung paano gamitin ang a joystick para sa pagkontrol maraming iba pang mga aparatong paligid.



Ngayon tingnan natin ang joystick.

Ang isang joystick ay isang aparato ng pag-input na binubuo ng isang pingga, na maaaring ilipat sa maraming direksyon sa X at Y axes. Ang paggalaw ng pingga ay ginagamit para sa pagkontrol ng isang motor o anumang mga peripheral na elektronikong aparato.



Ginagamit ang mga Joystick mula sa mga laruang RC hanggang sa mga eroplano ng Boing at nagsasagawa ng mga katulad na pagpapaandar. Bilang karagdagan ang paglalaro at mas maliit na mga stick ng kagalakan ay may isang pindutan ng push sa Z axis na maaaring mai-program upang makagawa ng maraming mga kapaki-pakinabang na pagkilos.

Paglalarawan ng Joystick:

Paglalarawan ng Joystick:

Ang mga Joystick ay mga elektronikong aparato sa pangkalahatan kaya, kailangan nating maglapat ng lakas. Ang paggalaw ng pingga ay gumagawa ng pagkakaiba sa boltahe sa mga output pin. Ang mga antas ng boltahe ay naproseso ng isang microcontroller upang makontrol ang output aparato tulad ng isang motor.

Ang nakalarawan na joystick ay pareho, na maaaring matagpuan sa mga kontrol sa PlayStation at Xbox. Hindi mo kailangang sirain ang mga kontroler na ito upang mai-save ang isa. Ang mga modyul na ito ay madaling magagamit sa mga lokal na elektronikong tindahan at mga site ng E-commerce.

Ngayon tingnan natin ang pagbuo ng joystick na ito.

Mayroon itong dalawang 10 Kilo ohm potensyomiter nakaposisyon sa X at Y axes na may mga spring kaya't, bumalik ito sa orihinal na posisyon kapag naglabas ang puwersa ng gumagamit mula sa pingga. Mayroon itong push to ON button sa Z axis.

Mayroon itong 5 mga pin, 5 volt Vcc, GND, variable X, variable Y, at SW (Z axis switch). Kapag nag-apply kami ng boltahe at naiwan ang joystick sa orihinal na posisyon ng pingga. Ang X at Y pin ay makakapagdulot ng kalahati ng inilapat na boltahe.

Kapag inilipat namin ang pingga ang boltahe ay nag-iiba sa X at Y output pin. Ngayon ay praktikal nating i-interface ang joystick sa Arduino.

Diagram ng Skematika:

Control ng Arduino Servo Motor Gamit ang Joystick

Ang mga detalye ng koneksyon ng pin ay ibinibigay sa tabi ng circuit. Ikonekta ang nakumpletong pag-setup ng hardware at i-upload ang code.

Programa:

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

Buksan ang Serial monitor maaari mong makita ang antas ng boltahe sa mga pin ng axes ng X at Y at ang katayuan ng Z axis ibig sabihin, pindutan ng push na nakalarawan sa ibaba.

Ginagamit ang mga halagang X, Y, Z axes na ito upang bigyang kahulugan ang posisyon ng pingga. Tulad ng nakikita mo ang mga halaga ay mula 0 hanggang 1023.

Iyon ay dahil ang Arduino ay nakabuo ng converter ng ADC na nag-convert ng boltahe na 0V - 5V hanggang 0 hanggang 1023 na mga halaga.

Maaari mong saksihan mula sa serial monitor na kapag ang pingga ay naiwan na hindi nagalaw ang pingga ay mananatili sa kalagitnaan ng posisyon ng parehong mga axis ng X at Y at nagpapakita ng kalahating halaga ng 1023.

Maaari mo ring makita na ito ay hindi eksaktong kalahati ng 1023 iyon dahil ang pagmamanupaktura ng mga joystick na ito ay hindi kailanman naging perpekto.

Sa ngayon, makakakuha ka na ng ilang kaalamang panteknikal tungkol sa mga joystick.

Tingnan natin ngayon kung paano makontrol ang dalawang servo motor gamit ang isang joystick.

Diagram ng Circuit:

Ang dalawang servo motor ay kinokontrol ng isang joystick kapag inilipat mo ang joystick kasama ang X axis na nakakonekta ang servo sa pin # 7 na gumagalaw Clockwise at Anti-relo na matalino depende sa posisyon ng pingga.

Maaari mo ring hawakan ang servo actuator sa isang posisyon, kung hinahawakan mo ang antas ng joystick sa isang partikular na posisyon.

Katulad para sa servo motor na konektado sa pin # 6, maaari mong ilipat ang pingga kasama ang Y axis.

Kapag pinindot mo ang pingga kasama ang Z axis, ang dalawang motor ay magsasagawa ng 180 degree sweep.

Maaari mong ikonekta ang arduino sa 9v na baterya o sa computer. Kung ikinonekta mo ang Arduino sa computer maaari mong buksan ang serial monitor at makita ang anggulo ng servo actuators at mga antas ng boltahe.

Programa para sa kontrol ng servo motor:

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

Kung mayroon kang anumang tukoy na katanungan tungkol sa proyektong ito, huwag mag-atubiling ipahayag sa seksyon ng komento, maaari kang makatanggap ng mabilis na tugon.




Nakaraan: Digital Capacitance Meter Circuit Gamit ang Arduino Susunod: Paggamit ng Digital Potentiometer MCP41xx Sa Arduino