Joystick Kullanarak Servo Motor Nasıl Kontrol Edilir

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu yazıda, bir joystick ve Arduino kullanarak servo motorları nasıl kontrol edeceğimizi öğreneceğiz. Joystick, pimleri, yapısı ve çalışması hakkında genel bir bakış göreceğiz. Servo motorları kontrol etmek için temel olacak olan joystick'ten faydalı veriler çıkaracağız.

Giriş

Bu makalenin sloganı sadece servo motorları kontrol edin ama nasıl kullanılacağını öğrenmek için kontrol için joystick diğer birçok çevresel aygıt.



Şimdi joystick'e bir göz atalım.

Joystick, X ve Y eksenlerinde çeşitli yönlerde hareket edebilen bir koldan oluşan bir giriş cihazıdır. Kolun hareketi, bir motoru veya herhangi bir çevre birimi elektronik cihazını kontrol etmek için kullanılır.



Kumanda çubukları, RC oyuncaklarından Boing uçaklarına kadar kullanılır ve benzer işlevleri yerine getirir. Ek olarak oyun ve daha küçük oyun çubukları, Z ekseninde birçok yararlı eylemi gerçekleştirmek için programlanabilen bir basma düğmesine sahiptir.

Oyun Çubuğu Gösterimi:

Oyun Çubuğu Gösterimi:

Joystickler genel olarak elektronik cihazlardır, bu yüzden güç uygulamamız gerekiyor. Kolun hareketi, çıkış pinlerinde voltaj farkı yaratır. Voltaj seviyeleri, bir motor gibi çıkış cihazını kontrol etmek için bir mikrodenetleyici tarafından işlenir.

Gösterilen oyun çubuğu benzerdir ve PlayStation ve Xbox denetleyicilerinde bulunabilir. Birini kurtarmak için bu denetleyicileri kırmanıza gerek yok. Bu modüller, yerel elektronik mağazalarında ve E-ticaret sitelerinde halihazırda mevcuttur.

Şimdi bu joystick'in yapısını görelim.

İki adet 10 Kilo ohm'a sahiptir potansiyometre X ve Y eksenlerinde yaylarla konumlandırılır, böylece kullanıcı koldan kuvveti bıraktığında orijinal konumuna geri döner. Z ekseninde ON butonu bulunmaktadır.

5 pin, 5 volt Vcc, GND, değişken X, değişken Y ve SW (Z eksen anahtarı) vardır. Voltaj uyguladığımızda ve joystick'i orijinal kol konumunda bıraktığımızda. X ve Y pimleri uygulanan voltajın yarısını üretecektir.

Kolu hareket ettirdiğimizde voltaj X ve Y çıkış pinlerinde değişir. Şimdi joystick'i Arduino'ya pratik olarak arayüzleyelim.

Şematik diyagram:

Joystick Kullanarak Arduino Servo Motor Kontrolü

Pin bağlantı detayları devrenin yanında verilmiştir. Tamamlanan donanım kurulumunu bağlayın ve kodu yükleyin.

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

Seri monitörü açın, X ve Y ekseni pimlerindeki voltaj seviyesini ve Z ekseninin durumunu, yani aşağıda gösterildiği gibi basma düğmesini görebilirsiniz.

Bu X, Y, Z eksen değerleri, kolun konumunu yorumlamak için kullanılır. Gördüğünüz gibi değerler 0 ile 1023 arasındadır.

Bunun nedeni, Arduino'nun, 0V - 5V voltajını 0 ila 1023 değerlerine dönüştüren bir ADC dönüştürücüye sahip olmasıdır.

Seri monitörden, kola dokunulmadan bırakıldığında kolun hem X hem de Y eksenlerinin orta konumunda kaldığına ve 1023'ün yarı değerini gösterdiğine şahit olabilirsiniz.

Ayrıca 1023'ün tam olarak yarısı olmadığını da görebilirsiniz, çünkü bu kumanda kollarını üretmek hiçbir zaman mükemmel olmamıştır.

Şimdiye kadar, joystickler hakkında biraz teknik bilgiye sahip olacaktınız.

Şimdi bir joystick kullanarak iki servo motoru nasıl kontrol edeceğimize bakalım.

Devre şeması:

İki servo motor, kumanda kolunu X ekseni boyunca hareket ettirdiğinizde, pim # 7'ye bağlı servo, kol konumuna bağlı olarak Saat yönünde ve saatin tersi yönünde hareket ederken bir kumanda kolu ile kontrol edilir.

Ayrıca, kumanda kolunu belirli bir konumda tutarsanız, servo aktüatörü bir konumda tutabilirsiniz.

6 numaralı pime bağlı servo motora benzer şekilde, kolu Y ekseni boyunca hareket ettirebilirsiniz.

Kolu Z ekseni boyunca bastığınızda, iki motor 180 derece süpürme gerçekleştirecektir.

Arduino ya bağlayabilirsiniz. 9v pil veya bilgisayara. Arduino'yu bilgisayara bağlarsanız, seri monitörü açabilir ve servo aktüatörlerin açısını ve voltaj seviyelerini görebilirsiniz.

Servo motor kontrolü için program:

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

Bu projeyle ilgili herhangi bir sorunuz varsa, yorum bölümünde belirtmekten çekinmeyin, hızlı bir yanıt alabilirsiniz.




Önceki: Arduino Kullanarak Dijital Kapasitans Ölçer Devresi Sonraki: Dijital Potansiyometre MCP41xx'i Arduino ile Kullanma