XY Joystick Modülü ile SG90 Servo Motor Kontrolü
Merhaba arkadaşlar, bu yazımızda Trudyo Geliştirme Kartı‘nı kullanarak XY Joystick Modülü ile SG90 Servo Motor kontrolü yapacağız. Uygulamaya ait gerekli malzeme ve program kodlarını sizin için derlediğimiz bu yazımızda öncelikle SG90 Servo Motor hakkında kısa bir bilgi edinerek başlayabiliriz. Ayrıca XY Joystick Modülü hakkında temel bilgileri edinmek için XY Joystick ile RGB Bargraf LED Kontrolü yazımızı inceleyebilirsiniz.
SG90 Servo Motor Hakkında Kısa Bir Bilgi
SG90 Servo Motor, özellikle hobi elektroniği ve robotik projelerde sıklıkla tercih edilen bir servo motordur. Küçük boyutları, düşük maliyeti ve yeterli tork kapasitesi ile birçok uygulamada kullanılabilir.
SG90 Servo Motor içerisinde bir dişli seti ve potansiyometre bulunmaktadır. Potansiyometre, motorun mevcut konumunu sürekli olarak ölçer ve bu bilgi, kontrol sinyaline göre servo motorun hedef konumuna ulaşmasını sağlar. Servo motor, PWM girişi üzerinden uygulanan sinyale göre dişliler aracılığıyla bir rotoru döndürür. PWM sinyalin genişliği, servo motorun konumunu belirler. 50Hz (20ms) frekanslı PWM sinyali genellikle 1ms ile 2ms arasında değişir ve bu da motorun 0 derece ile 180 derece arasında hareket etmesini sağlar.
Pin No | İsim | Açıklama |
1 | PWM (Turuncu) | Servo Motor Kontrolü için PWM Bağlantı Pini |
2 | VCC (Kırmızı) | +5V Bağlantı Pini |
3 | GND (Kahverengi) | GND Bağlantı Pini |
XY Joystick Modülü, SG90 Servo Motor ve Trudyo Geliştirme Kartı Bağlantısı
Yukarıdaki görsellerde açıkladığı üzere XY Joystick Modülü, Trudyo Geliştirme Kartı‘nın A1 analog girişine ve SG90 Servo Motor ise B0 pinine bağlanmıştır. XY Joystick Modülü‘nün X eksenindeki analog verisini okuyarak, B0 pini üzerinde SG90 Servo Motor için bir dijital PWM sinyali oluşturacağız.
Bu Uygulamada Kullanılan Malzemeler
Trudyo Geliştirme Kartı
400 Pin Orta Boy Breadboard
Başlamadan Önce
XY Joystick ile RGB Bargraf LED Kontrolü
XY Joystick Modülü kullanımı hakkında ayrıntılı bilgi ve örnek uygulamayı incelemek için daha önce yayınlanan “XY Joystick ile RGB Bargraf LED Kontrolü” yazımızı okuyabilirsiniz.
Trudyo Konfigürasyon Ayarları
Trudyo Geliştirme Kartı ile programlama yapabilmek için kartınızın konfigürasyon ayarlarını yapmanız gerekmektedir. Gerekli konfigürasyon ayarlarını yapmak için “Trudyo Konfigürasyon Ayarları” yazımızı okuyabilirsiniz.
XY Joystick Modülü ile SG90 Servo Motor Kontrolü Uygulama Kodları
// Connections
sbit LED at LATA4_bit; // Dahili LED RA4 Pinine Bagli
sbit SERVO at LATB0_bit; // Servo Motor B0 Pinine Bagli
unsigned int adc=0; // ADC degeri kayit degiskeni
unsigned int degree; // Açi degeri kayit degiskeni
// 10uS'lik tekrarli zamanlama fonksiyonu
void vdelay_10us(unsigned int time){
while(time){ // time degeri 0 olmadigi sürece döngü
delay_us(10); // 10us Bekle
time--; // time degerini 1 azalt
}
}
// Herhangi bir araliktaki degeri diger bir araliga donusturme fonksiyonu
long map(long x, long in_min, long in_max, long out_min, long out_max){
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
void setServoDegree(unsigned int deg){
unsigned int TON; // Servonun aktif kalacagi sure
TON=map(deg, 0, 180, 50, 240); // Fonksiyon içerisine gelen aci degerini (0-180)
// Servo için gerekli zaman degerlerine ceviriyoruz (500us-2400us)
SERVO=1; // Servo Aktif
vdelay_10us(TON); // Aktif kalacagi sure kadar bekleme
SERVO=0; // Servo Pasif
vdelay_10us(2000-TON); // 20ms'lik dongu suresi
}
void main() {
// Port Giris-Çikis Seçimi (0:Çikis, 1:Giris)
TRISA=0b00000010;// [][][][LED][][][XY Joystick X][]
TRISB=0b00000000;// [][][][][][][][SG90]
TRISC=0b00000000;// [][][][][][][][]
TRISD=0b00000000;// [][][][][][][][]
TRISE=0b00000000;// [][][][][][][][]
// Port Analog-Dijital Giris Seçimi (0:Dijital, 1:Analog)
ANSELA=0b00000010;// [][][][][][][ADC][]
ANSELB=0b00000000;// [][][][][][][][]
ANSELC=0b00000000;// [][][][][][][][]
ANSELD=0b00000000;// [][][][][][][][]
ANSELE=0b00000000;// [][][][][][][][]
// Port Temizleme
LATA=0x00;
LATB=0x00;
LATC=0x00;
LATD=0x00;
LATE=0x00;
// Sonsuz Dongu
while(1){
adc=ADC_Read(1); // ADC degerini oku
degree=map(adc, 0, 1023, 0, 180); // Okunan degeri (0-1023) dereceye cevir (0-180)
setServoDegree(degree); // Olçülen derece degerini setServoDegree fonksiyonuna gonder
}
}
Uygulamaya ait dosyaları buraya tıklayarak indirebilirsiniz. Merak ettiğiniz ve aklınıza takılan soruları aşağıda 👇 yorum olarak bize iletebilirsiniz. İyi çalışmalar. 🙂 #geliştirmeyebaşla
Yorum yapmak için giriş yapmalısınız.