Analog Joystick ve 2 Adet Servo Motor ile Pan Tilt Platformu Arduino Projesi

in utopian-io •  7 years ago  (edited)

This is a Turkish tutorial of how to make a pan tilt application using two servo motors, an analog joystick and a pan tilt kit with Arduino microcontroller. Throughout this tutorial I will give information about servo motors: how do they work and what they are, joysticks and their working principles and brief information about pan tilt systems and their uses.

Merhaba, bu yazıda size iki adet servo motor, bir analog joystick ve bir pan-tilt aparatı kullanarak Arduino pan tilt projesi yapmayı anlatacağım. Bir çok proje için kullanabileceğiniz servo motorların ne olduğunu ve nasıl çalıştıkları hakkında bilgi verirken aynı zamanda joystiklerin çalışma mantığını ve pan tilt’in ne olduğunu da anlatacağım.

kamera.jpg
Kamera bağlanmış bir pan tilt platformu.


Servo Motor Nedir ve Nasıl Çalışır?

Servo motorlar küçük, güçlü, enerji bakımından efektif elektrik motorlarıdır. Robotik, ilaç endüstrisi, üretim hatlarında kullanıldığı gibi hobi amaçlı olarak uzaktan kumandalı arabalarda, dronelarda ve birçok çeşitli hobi projelerinde kullanılır. Servo motorlar elektrik sinyalinin motor şaftının konumunu belirlemesiyle hareketi sağlarlar.

servo.jpg
Servo motor.

Servo motorlarda bir DC motor, potansiyometre, vites görevi gören dişliler ve bir kontrol devresi bulunur. Potansiyometre servo motorun olması gerektiği açıyı belirler. Servo motorun şaftı potansiyometrenin belirttiği açıda değilse, o açıya kadar DC motor dişlileri çevirir. Şaft doğru açıya geldiğinde DC motor çalışmasını durdurur. Tüm bu işlem boyunca kontrol devresi motorun istenen açıda olup olmadığını kontrol eder.

servo_ic.png
Servo motorun iç yapısı.

Servo motor kontrolü “PWM” denile “Pulse Width Modulation” sinyalleriyle olur. Servo motora gönderilen PWM sinyalleri motorun şaftının konumunu ve hızını belirler. Minimum, maksimum ve nötr (merkez) olmak üzere 3 adet konum sinyali bulunur. Bir servo motorun (genellikle) 180 derece dönebileceği düşünülürse, minimum sinyali servo motor şaftını 0 dereceye, nötr (merkez) sinyali servo motor şaftını 90 dereceye, maksimum sinyali ise servo motor şaftını 180 dereceye getirir.

servo_pwm.jpg
PWM sinyalleri.


Joystick Nedir ve Nasıl Çalışır?

Joystick sabit bir eksen üzerinde hareket eden, kontrol edeceği cihaza konum, açı veya yön bildiren bir input cihazıdır. Joystickler ilk olarak uçakları kontrol etmek amacıyla dizayn edilmiş olsalar da, bilgisayar oyunları, vinçler, su altı insansız araçlar, insansız hava araçları, tekerlekli sandalyeler, kamera aparatları, uzaktan kumandalı oyuncaklar gibi birçok kullanım alanına sahiptir.

eski_joystick.jpg
Eski bir Atari joystick'i.

ucak_joystick.jpg
Modern bir uçak simulasyonu joystick'i.

Joystickler fiziksel hareketi analog veriye çevirerek bilgisayarın işleyebileceği ve kullanabileceği hale getirirler. Analog joystickler pozisyon bilgisini potansiyometre yardımıyla değişen direnç değerlerine göre bildirirler. Joystick çubuğunun ittirilmesiyle, potansiyometrenin direnç değeri değişir ve giriş-çıkış geriliminin değişimine göre pozisyon tayini yapılır.

joystick.jpg
Projemizde kullanacağımız analog joystick.


Pan-Tilt Hareketleri Nedir?

Sinema ve fotoğrafçılıkla ile ilgilenenler pan veya tilt hareketlerini duymuşlardır. Pan ve tilt kelimelerinin bu alanlardaki karşılıkları aslında nesnenin kinematik hareketlerinin sınıflandırılması sonucu ortaya çıkmıştır. Pan ve Tilt X ve Y eksenindeki hareketleri temsil eder. Pan bir nesnenin X ekseninde yaptığı harekettir. Tilt ise bir nesnenin Y ekseninde yaptığı harekettir. Örneğin bir kameranın X ekseni boyunca hareketi pan hareketidir. Kameranın Y ekseni boyunca yani yukarıdan aşağı veya aşağıdan yukarı hareketi ise tilt hareketidir.

Pan1.gif
Pan hareketi.

Tilt1.gif
Tilt hareketi.


Kodlar ve Detaylı Anlatımı

Joystick X-Y Modül Joystickinizi Arduino'nuza aşağıdaki gibi bağlayın.

joystick_baglanti.png

Servo motorlarınızı Arduino'nuza aşağıdaki gibi bağlayın.

servo_baglanti.jpg

1. Boş bir Arduino sketch’i açın ve “Ctrl+S” kısayolunu kullanarak, “Joystick_Pan_Tilt” olarak kaydedin.

2. Öncelikle servo motorlarınızın kütüphanesini #include <Servo.h> yazarak ekleyin.

1.PNG

3. X ve Y eksenlerindeki pan ve tilt hareketlerini yapacak servo motorların bağlantı pinlerini belirleyen komutları yazın. Ardından servo motorları kontrol edecek olan joystick’in X ve Y ekseni analog bağlantı pinlerini belirleyen komutları yazın.

2.PNG

4. Joystick’ten gelen, joystick çubuğunun X ve Y eksenindeki konumunu içeren analog veriyi Arduino’nuzun okuması için bir değişken oluşturun. Ardından kullanacağınız iki adet servo motor için object oluşturun.

3.PNG

5. void setup() fonksiyonunun içine oluşturulan servo objectleri, 3.adımda oluşturduğumuz servo değişkenlerine tanımlayın. Ardından 9600 baud rate’de seri iletişimi başlatan komutu ekleyin.

4.PNG

6. void loop() fonksiyonunun içine joystickten gelecek olan X ekseni pozisyon bilgisini içeren veriyi okuyacak ve okunan 0 ile 1023 arasında değişen değeri 0 ile 180 (servo motorlara pozisyon bilgisi iletebilmek için derece cinsine çevrildi) aralığına dönüştüren komutları ekleyin. 0 ile 180 derece cinsine çevirdiğiniz pozisyon bilgisini “servo2” motorunuzun pozisyonuna gönderin. Aynı işlemleri sırasıyla Y eksenin kontrol eden “servo1” için de yapın.

5.PNG

7. Önce “Verify”, sonra “Upload” butonlarına basarak, kodunuzu compile edip, Arduino’nuza yükleyin.

upload.png


Bu yazımda Arduino mikrokontrolörünü kullanarak bir joystick ve iki servo motor yardımıyla pan-tilt hareketlerini yapan, çeşitli projelerinizde kullanabileceğiniz bir uygulama yaptık. Umuyorum ki vermiş olduğum bilgileri ve projeyi beğenirsiniz, okuduğunuz için teşekkürler. Başka yazılarda görüşmek dileğiyle.

GitHub: https://github.com/arduino/arduino

Kodun tamamı:

#include <Servo.h>
 
const int servo1 = 5;      // X ekseni hareketini sağlayacak servo.
const int servo2 = 6;     // Y ekseni hareketini sağlayacak servo.

const int joyX = 3;        // Joystick X ekseni.
const int joyY = 4;        // Joystick Y ekseni.
 
int servoVal;    // Joystick analog verisini okumak için oluşturulan değişken. 
 
Servo myservo1;  // Kullanacağımız servo motorlar için object oluşturur.
Servo myservo2;  
 
 
void setup()
{
  myservo1.attach(servo1);  // Oluşturduğumuz servo object'leri 
  myservo2.attach(servo2);  // servo değişkenine tanımlar.
 
  Serial.begin(9600);       // 9600 baud rate'de seri haberleşmeyi başlatır.
}
 
 
void loop()
{
 
    servoVal = analogRead(joyX);                  // X ekseni joystick analog verilerini okur. Okunan değer 0-1023 arasındadır.
    servoVal = map(servoVal, 0, 1023, 0, 180);    // 0-1023 arasında okunan değeri 0-180 derece skalasına çevirir.
    myservo2.write(servoVal);                     // Uyarlanan veriyi servo pozisyon bilgisi olarak iletir.
    
 
    servoVal = analogRead(joyY);                  // Y ekseni joystick analog verilerini okur.
    servoVal = map(servoVal, 0, 1023, 0, 180);   
    myservo1.write(servoVal);                        
 
    delay(15);
}



Posted on Utopian.io - Rewarding Open Source Contributors

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Your contribution cannot be approved because it is not as informative as other contributions. See the Utopian Rules. Contributions need to be informative and descriptive in order to help readers and developers understand them.

  • Next time please perform the experiment yourself and add the pictures.

You can contact us on Discord.
[utopian-moderator]

Thank you @drencolha for making a transfer to me for an upvote of 0.71% on this post! Half of your bid goes to @budgets which funds growth projects for Steem like our top 25 posts on Steem! The other half helps holders of Steem power earn about 60% APR on a delegation to me! For help, will you please visit https://jerrybanfield.com/contact/ because I check my discord server daily? To learn more about Steem, will you please use http://steem.guide/ because this URL forwards to my most recently updated complete Steem tutorial?

Calling @originalworks :)
img credz: pixabay.com
Nice, you got a 55.0% @blockops upgoat, thanks to @forkonti
Want a boost? Minnowbooster's got your back!

The @OriginalWorks bot has determined this post by @drencolha to be original material and upvoted it!

ezgif.com-resize.gif

To call @OriginalWorks, simply reply to any post with @originalworks or !originalworks in your message!

Please note that this is a BETA version. Feel free to leave a reply if you feel this is an error to help improve accuracy.