Hiç bir Arduino kullanarak kendi robotik projelerinizi inşa etmek istediğiniz, ancak yalnızca sınırlı sayıda PWM çıkışı olduğu için bunu başaramadığınız bir durumla karşılaştınız mı?

Bunun çözümü, NXP PCA9685 tabanlı 12-bit PWM sürücüsü olan Grove – 16-Channel PWM Driver (PCA9685)‘i kullanmaktır. Bu sürücü, 5V harici bir güç kaynağı ile 16 servoyu sürmek için kullanılabilir. Bu PWM sürücüsü ayrıca LED’leri kontrol etmek için de kullanılabilir.
Bir seferde 16’dan fazla servo bağlamak istediğinizde, bu sürücüleri aynı I2C veriyolu ile bağlanacak şekilde seri olarak bağlayabilirsiniz; toplamda 62 sürücüye kadar.
PWM nedir?
PWM, Puls Genişlik Modülasyonu anlamına gelir. Normalde iki farklı türde sinyal vardır: Dijital ve Analog. Dijital sinyaller “0” veya “1”, “KAPALI” veya “AÇIK” iken, Analog sinyaller AÇIK, KAPALI veya 0 ile 1 arasında sonsuz sayıda pozisyona sahip olabilir.

Bilgisayarlar yalnızca 0 ve 1’i anlayabilir, bu da dijitaldir. Sonuç olarak, MCU (Mikrodenetleyici Birimi) yalnızca dijital girişi anlayabilir. Sensörlerinizden Analog girişler aldığınızda, Analog sinyaller (örneğin: sıcaklık sensörlerinden) önce bir Analog-dijital çevirici aracılığıyla Dijital sinyallere dönüştürülmeli ve ardından MCU bu sinyali tanıyabilir.
Öte yandan, PWM bunun tersine açıklanabilir. Bu, analog cihazları dijital bir çıkış kullanarak kontrol etmenin bir yoludur. Ancak PWM gerçekten bir Analog çıkış değildir, yine de güç uygulayarak sinyal sonucunu Analog gibi göstermeye çalışır.
Bunu daha iyi açıklamak için bir örnek:
Bir motora maksimum voltajı kısa bir süre uygulayın ve ardından kapatın. Bu işlemi, kapatma ve açma arasındaki zaman aralığını değiştirerek tekrarlayın. Voltajı birçok kez uygulayıp kaldırmamıza rağmen, bu, Analog’a yakın bir tepki oluşturur.

Servolar PWM kullanılarak nasıl kontrol edilir?
Bir Servo Motor, düşük hızda yüksek tork üreten bir motordur ve farklı boyutlarda gelir. Bu motorlar genellikle 180, 270 veya 90 derece gibi belirli dönüş açıları ile sınırlıdır ve milin hareket miktarını belirleyen elektrik sinyali ile kontrol edilir. Bu sinyal bir PWM sinyalidir ve milin hareket miktarı, kontrol kablosu aracılığıyla gönderilen pulsun süresine bağlıdır.

Normalde bir servo motor, her 20 milisaniyede (ms) bir puls görmeyi bekler ve pulsun uzunluğu motorun ne kadar döneceğini belirler. Örneğin, 1.5ms’lik bir puls motoru 90° pozisyonuna döndürür. 1.5ms’den daha kısa bir süre, motoru 0° pozisyonuna doğru saat yönünün tersine hareket ettirirken, 1.5ms’den daha uzun bir süre, servoyu 180° pozisyonuna doğru saat yönünde döndürür.
“`html

Grove – 16-Channel PWM Sürücüsü (PCA9685) ile tek bir servo motor nasıl test edilir?
Gerekli Donanım
- Seeeduino Lotus /Arduino (Eğer Arduino ise, Base Shield gereklidir)
- Grove – 16-Channel PWM Sürücüsü (PCA9685)
- Bir Servo Motor
Yazılım Kurulumu
- Seeeduino/Arduino kartları ile iletişim kurmak için Arduino IDE kullanacağız. Eğer Arduino’yu henüz kurmadıysanız, lütfen aşağıdaki URL’yi ziyaret ederek kurun: https://www.arduino.cc/
- Ardından Yazılım > İndirilenler kısmına gidin

- İşletim sisteminize uygun Arduino IDE’yi indirin ve kurun. Başka bir web sitesine yönlendirileceksiniz, sadece “Sadece İndir” butonuna tıklayın.

- Kurulum talimatlarını izleyerek Arduino IDE’yi kurun.
- Arduino IDE’yi açın ve Sketch > Kütüphane Ekle > Kütüphaneleri Yönet… kısmına gidin.

- Metin kutusuna “Seeed PCA9685” yazın ve yükle butonuna tıklayın.

Donanım Kurulumu
- Grove kablosunun bir ucunu Grove – 16-Channel PWM Sürücüsü (PCA9685) bağlantı noktasına, diğer ucunu ise Seeeduino Lotus/Base Shield’in I2C portuna bağlayın.


- Ardından bir Servo Motoru PWM Sürücüsünün P1 portuna bağlayın.

- İki kabloyu “Güç Girişi” portuna iterek yerleştirin ve bırakın.

- Bu kablo aracılığıyla 5V güç sağlayın.
- Seeeduino Lotus/Arduino’yu güç kaynağına bağlayın.
Artık her şey kurulu olduğuna göre, Arduino IDE’ye geri dönün ve aşağıdaki kodu IDE’ye yapıştırın.
#include "PCA9685.h"
#include <Wire.h>
ServoDriver servo;
void setup()
{
// I2C otobüsüne katılın (I2Cdev kütüphanesi bunu otomatik olarak yapmaz)
Wire.begin();
Serial.begin(9600);
servo.init(0x7f);
// özel bir servo kullanmanız gerekiyorsa bu satırı yorumdan çıkarın
// servo.setServoPulseRange(600,2400,180);
}
void loop()
{
servo.setAngle(1, 0);
delay(1000);
servo.setAngle(1, 180);
delay(1000);
}
- Doğru kartı ve portu seçmek için “Araçlar > Kart” ve “Araçlar > Port” kısmına gidin.


- Ardından Yükle butonuna tıklayın.

Eğer kurulumları doğru yaptıysanız, servo motorun 180 derece saat yönünde döndüğünü ve ardından 180 derece saat yönünün tersine döndüğünü göreceksiniz.
Kendi Robotik Kolunuzu dört servo ile nasıl çalıştırırsınız?
Bu PWM sürücüsü ile biraz daha eğlenelim!
“““html
Kullanılan Donanım
- Seeeduino /Arduino
- Base Shield
- Grove – 16-Kanal PWM Sürücü (PCA9685)
- 4 Servo Motor
- 4 Grove – Dönme Açısı Sensörü
- Robotik Kol Çerçevesi
Donanım Kurulumu
- Grove – 16-Kanal PWM Sürücüyü (PCA9685) Seeeduino / Base Shield’in I2C portuna bağlayın.
- Sonra dört servoyu P1’den P4’e PWM Sürücüsüne bağlayın.

- Dört Grove – Dönme Açısı Sensörünü Base Shield’in A0’dan A3’e bağlayın.


- İki kabloyu “Güç Girişi” portuna iterek yerleştirin ve bırakın.
- O kablodan 5V güç sağlayın.
- Seeeduino Lotus/Arduino’yu güç kaynağına bağlayın.
Yazılım Kurulumu
- Yazılımı önceki örnekle aynı şekilde ayarlayın.
- Arduino IDE’ye aşağıdaki kodu yükleyin.
#include "PCA9685.h"
#include <Wire.h>
ServoDriver servo;
#define RotarySensor_1 A0
#define RotarySensor_2 A1
#define RotarySensor_3 A2
#define RotarySensor_4 A3
void setup()
{
// I2C bus'a katılın (I2Cdev kütüphanesi bunu otomatik olarak yapmaz)
Wire.begin();
Serial.begin(9600);
servo.init(0x7f);
pinMode(RotarySensor_1, INPUT);
pinMode(RotarySensor_2, INPUT);
pinMode(RotarySensor_3, INPUT);
pinMode(RotarySensor_4, INPUT);
// özel bir servo kullanmanız gerekiyorsa bu satırı yorumdan çıkarın
// servo.setServoPulseRange(600,2400,180);
Serial.begin(9600);
}
void loop()
{
int angle[6];
int sensor_value[6];
sensor_value[0] = analogRead(RotarySensor_1);
sensor_value[1] = analogRead(RotarySensor_2);
sensor_value[2] = analogRead(RotarySensor_3);
sensor_value[3] = analogRead(RotarySensor_4);
angle[0] = (float)sensor_value[0] * 300 / 1023;
angle[1] = (float)sensor_value[1] * 300 / 1023;
angle[2] = (float)sensor_value[2] * 300 / 1023;
angle[3] = (float)sensor_value[3] * 300 / 1023;
Serial.println(angle[0]);
servo.setAngle(12, map(angle[0], 0, 300, 0, 170));
servo.setAngle(13, map(angle[1], 0, 300, 0, 180));
servo.setAngle(14, map(angle[2], 0, 300, 20, 180));
servo.setAngle(15, map(angle[3], 0, 300, 20, 160));
//delay(15);
}
- Sonra daha önce olduğu gibi Yükle butonuna basın.
Artık Grove – Dönme Açısı Sensörlerindeki düğmeleri çevirerek kendi robotik kolunuzu kontrol edebileceksiniz!!
Özet
Ve işte Grove – 16-Kanal PWM Sürücü (PCA9685) kullanarak Robotik Kol kontrolü hakkında her şey! Yeni bir şey öğrendiniz mi? Umarız bu yazı, PWM sürücüleri hakkında daha fazla bilgi edinmenize yardımcı olmuştur ve gelecekte daha fazla içerik için bizi takip etmeye devam edin!
“`

