PCA9685 16 Kanal 12 Bit PWM Servo Sürücü Kullanımı

DeathWarrior01

Uzman üye
14 Ocak 2021
1,734
1,082
Evren
Herkese selamün aleyküm,

Bugün
PCA9685 adlı servo motor sürücüsünün kullanımının nasıl olduğuna birlikte bakacağız.Kullanımına geçmeden önce birkaç kavramı açıklayalım:

Servo motor nedir?

Servo, açısal pozisyonları, hız ve ivme kontrolünü hatasız ve stabil bir biçimde yapan tahrik sistemi olarak tanımlanır.Servo motor da bu tanımlamanın nesnesel biçime dökülmüş halidir.Servo motorlar esasında hareket kontrolünü sağlayan bir çeşit küçük makinelerdir.



Üzerinde hareket kontrolünü sağlayabilmesi için dişliler bulunmaktadır.İçerisinde AC, DC veya Step motor kullanılmaktadır.Bunun yanında ek olarak kontrol kartından gelen sinyalleri okuması için sürücü ve kontrol devresini de içerisinde bulundurmaktadır.Servo motorlar robot teknolojilerinde sıklıkla kullanılmaktadır.

Servo sürücü nedir?

Servo sürücüler, servo motordan gelen geri besleme sinyalini izler ve beklenen davranıştan sapmayı sürekli olarak ayarlar.Servo sürücülerin kullanılmasının bana göre başlıca sebebi titreme sorunlarını önlemek.Servo motor kullanan birçok kişi illaki başlarda bu sorunu yaşamıştır ve halende yaşamaktadır.Bu sorun genellikle servo motorlara stabil çalışma voltajının altında enerji verilmesinden kaynaklanmaktadır.

PCA9685 16 Kanal 12 Bit PWM Servo Sürücü Kullanımı




Bu sürücü sanırım piyasada ki en ucuz sürücülerden birisi lakin bana göre fazlasıyla fiyatında göre iyi iş çıkarmaktadır.En güzel özelliği ise 16 tane servo motoru aynı anda çalıştırabilmesi : ))

Malzemeler:
-Arduino UNO(Klon)
-PCA9685 16 Kanal 12 Bit PWM Servo Sürücü
-6 tane jumper kablo(2'si erkeğe erkek, 4'ü erkeğe dişi)
-4 adet sg90(1kg) servo motor

Öncelikle
PCA9685 servo sürücüye, servo motorları bağlıyorum:



Burada servolar'ın üstünde yazılı olan sayılar servolar'ın, sürücüye bağladığımız adreslerini göstermektedir.Kod tarafında işimize yarayacak.Bağladıktan sonra arduino ile PCA9685 arasında ki kablo bağlantılarını sağlıyorum:



Siyah kabloyu, sürücünün gnd hattından arduino'nun gnd hattına, Turkuaz kabloyu, sürücünün SCL pininden arduino'nun A5 hattına, Yeşil kabloyu, sürücünün SDA pininden arduino'nun A5 hattına, Ve son olarak kırmızı kabloyu, sürücünün VCC pininden arduino'nun 5V hattına bağladım.

Devamında servo motorlara gerekli enerjiyi sağlayabilmemiz için enerji kaynağı(4,8V pil) ile servo sürücünün bağlantısını yapmada:



Burada 4,8V servolar için yeterli olacaktır.Şimdi de kod kısmına geçelim...
Kod editörü olarak Arduino'nun kendi kod editörünü tercih edebilirsiniz.


C:
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Burada gerekli olan kütüphaneleri koda dahil ediyoruz.

C:
Adafruit_PWMServoDriver tht = Adafruit_PWMServoDriver();

#define servoMIN 150
#define servoMAX 600

Devamında ilk başta servo sürücümüzün "tht" adındaki bir değişken üzerinde çalışacağını belirtiyoruz.Sonra da servo'nun en yüksek derecesini ve en düşük derecesini "#define" kodu ile tanımlıyoruz.

C:
void setup() {
  Serial.begin(9600);
  srituhobby.begin();
  srituhobby.setPWMFreq(60);
}

Devamında "Serial.begin(9600);" ile seri port'u başlatıyoruz ve sürücü kütüphanesinin çalışmasını aktif etmek için "srituhobby.begin();" , "srituhobby.setPWMFreq(60);" kodlarını yazıyoruz.

C:
void loop() {
  for (int servo = 0; servo < 1; servo++ ) {
    srituhobby.setPWM(servo, 0, servoMIN);
    Serial.println(servo);
    delay(300);
  }

  for (int servo = 1; servo >= 0; servo-- ) {
    srituhobby.setPWM(servo, 0, servoMAX);
    Serial.println(servo);
    delay(300);
  }
  for (int servo = 14 servo < 15; servo++ ) {
    srituhobby.setPWM(servo, 0, servoMIN);
    Serial.println(servo);
    delay(300);
  }

  for (int servo = 15; servo >= 14; servo-- ) {
    srituhobby.setPWM(servo, 0, servoMAX);
    Serial.println(servo);
    delay(300);
  }
}

Son olarak da burada "loop()" adlı fonksiyonun altında bir döngü oluşturduk."int servo" diye bir değişken oluşturduk.Bu değişkenin içindeki sayı servo motorun adresini belirlemektedir(Hatırlarsanız bunu konunun en başında belirtmiştik).

Bu döngüde de servolar'ın sırasıyla minimum değerlerinden, maksimum değerlerine ve tekrardan minimum değerlerine dönmesini sürekli bir şekilde sağlayan kod bloğunu oluşturmuş olduk.

Kodun tam hali:

C:
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver srituhobby = Adafruit_PWMServoDriver();

#define servoMIN 150
#define servoMAX 600

void setup() {
  Serial.begin(9600);
  srituhobby.begin();
  srituhobby.setPWMFreq(60);
}

void loop() {
  for (int servo = 0; servo < 1; servo++ ) {
    srituhobby.setPWM(servo, 0, servoMIN);
    Serial.println(servo);
    delay(300);
  }



  for (int servo = 1; servo >= 0; servo-- ) {
    srituhobby.setPWM(servo, 0, servoMAX);
    Serial.println(servo);
    delay(300);
  }

  for (int servo = 14 servo < 15; servo++ ) {
    srituhobby.setPWM(servo, 0, servoMIN);
    Serial.println(servo);
    delay(300);

  }
 
  for (int servo = 15; servo >= 14; servo-- ) {
    srituhobby.setPWM(servo, 0, servoMAX);
    Serial.println(servo);
    delay(300);
  }
}

Herkese hayırlı ramazanlar dilerim : ))
 

hackishack

Katılımcı Üye
20 Haz 2020
823
158
Liverpool UK
Hocam konu için teşekkür ederim. Ilgimi çekti ve aklıma şu soru geldi. Acaba sürücü kartı aynı zamanda potansiyometre gibi mi çalışıyor. Yani voltajı sınırlamak gibi bir özelliği var mı?
 

DeathWarrior01

Uzman üye
14 Ocak 2021
1,734
1,082
Evren
Hocam konu için teşekkür ederim. Ilgimi çekti ve aklıma şu soru geldi. Acaba sürücü kartı aynı zamanda potansiyometre gibi mi çalışıyor. Yani voltajı sınırlamak gibi bir özelliği var mı?
Sağolun ben teşekkür ederim.Voltajı sınırlamak değilde eşit bir şekilde servolara aktarmak gibi bir özelliği var.Bu özellikte tabii titreme sorunlarını çözmede büyük bir rol oynuyor.Gerçekten de şu zamana kadar gördüğüm en iyi modüllerden birisi olabilir.
 

hackishack

Katılımcı Üye
20 Haz 2020
823
158
Liverpool UK
Sağolun ben teşekkür ederim.Voltajı sınırlamak değilde eşit bir şekilde servolara aktarmak gibi bir özelliği var.Bu özellikte tabii titreme sorunlarını çözmede büyük bir rol oynuyor.Gerçekten de şu zamana kadar gördüğüm en iyi modüllerden birisi olabilir.
Cevabınız için teşekkür ederim hocam. Eşit şekilde aktarmak yerine belli motorlara belli gücü de verebiliyor muyuz yoksa kart otomatik olarak her servonun çekebileceği maximum voltu vermeye mi çalışıyor? Şey demek istedim aslında, dilediğimiz motora daha yüksek rpm'de çalışması adına daha yüksek volt yollayabilir miyiz kod aracılığıyla?
 

DeathWarrior01

Uzman üye
14 Ocak 2021
1,734
1,082
Evren
Cevabınız için teşekkür ederim hocam. Eşit şekilde aktarmak yerine belli motorlara belli gücü de verebiliyor muyuz yoksa kart otomatik olarak her servonun çekebileceği maximum voltu vermeye mi çalışıyor? Şey demek istedim aslında, dilediğimiz motora daha yüksek rpm'de çalışması adına daha yüksek volt yollayabilir miyiz kod aracılığıyla?
Kod aracılığıyla değilde enerji bağlama anlamında daha yüksek voltaj değerinde bir kaynak bağlanabilir sürücüye.Örnek olarak, bu kullandığım servolarin herbirine maksimum 6v enerji verilebiliyor ve bu voltaj değerinde kaldırma kuvveti 1.6 kg.Sen buna diyelim 5v enerji verirsen servo 1 kg kaldırır.Tabii bu degerler servodan servoya değişir.Ben burada piyasada ki en ucuz servolardan kullandım.Umarim sorunun cevabıni alabilmişsindir.Teşekkür ederim...
 

hackishack

Katılımcı Üye
20 Haz 2020
823
158
Liverpool UK
Anladım hocam her şey çok açık şu anda. Bu arada bu konuları yapay zeka ile konuşmak da zevkli olabiliyor. Inovatif düşünmeye destek oluyor. Henüz bu amaçla kullanmadıysanız mutlaka kullanmanızı tavsiye ederim.

Bilginizden istifade ettim. Ne kadar teşekkür etsem az. Iyi çalışmalar dilerim. :)
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.