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 : ))