top of page

Yapılması planlanan tasarım aşağıdaki resimde görüldüğü gibi işleyecektir.

MODÜLLER

Yazılım Modülü

         Yazılım bölümünde sağlanması gereken parçalar topun konum bilgisinin alınması ve Pid algoritması kullanılarak servo motorların hareketinin sağlanmasıdır. Bu modül için yapılanlar şu şekilde sıralanabilir:

 

  • Touchpanel den alınan konum bilgisinin Pid algoritması kullanılarak sisteme yapılacak etkinin hesaplanması gerçekleştirilmiştir.

  • Servo motorlardan sisteme uygulanacak güç açı şeklinde hesaplanmıştır. Bu hesaplanan açı değeri kadar panel hareket ettirilmiştir.

  • Bu hareket esnasında panelden ve diğer parçalardan kaynaklanabilecek olan hata payı saptanmıştır. Bu hata miktarı göz önünde bulundurularak panelin hareketi sağlanmıştır. Bu hata payı hesaplanırken sistem birçok kez uygulanacak farklı güçler ve açılarla test edilmiştir.

  • Uygulanan açı miktarı karşısında panelin gerçekte ne kadarlık bir dönüş yaptığı gözlemlenmiştir. Bu şekilde yapılan testler sonucunda sistemdeki hata miktarı bulunmuştur ve hesaplamalar yapılırken bu hata miktarı da göz önünde bulundurulmuştur.

 

         Bu anlatılanların sağlanması için sistem modüler olarak parçalara bölünmüştür. İlk olarak panelin servo motorlar yardımıyla istediğimiz açılarda hareketi sağlanmıştır. Devamında panel üzerine top konularak bu topun konum bilgisi saptanmış ve getirilmesi gereken optimum denge konumu için uygulanacak güç miktarı ile panelin hareket ettirilmesi gereken açı değeri belirlenmiştir. Bunların gerçekleştirilmesi için PID algoritması kullanılmıştır. En sonunda topun panel üzerinde dengede durması sağlanmıştır. Bunu başarmak için kullanılan PID algoritmasının nasıl implement edildiği daha ayrıntılı bir şekilde aşağıda anlatılacaktır.

 

         Bu hesaplamaların yapılabilmesi için kullanılacak olan fonksiyonlar aşağıdaki gibidir:

 

  • getPoint( )

Topun pozisyonunu elde eden fonksiyondur. <TouchScreen.h> kütüphanesinde bulunan bu fonksiyon topun konum bilgisini almak için kullanıldı.

 

  • compute( )

Bu fonksiyonun görevi Ardunio PID kütüphanesi <PID_v1.h> kullanılarak sisteme uygulanması gereken etkiyi hesaplamaktır.

            

  • setOutputLimits( )

Bu fonksiyona verilen 2 tane parametre değeri arasında değerler üretir. Servo motorlara uygulanması istenen minimum ve maximum açı aralığını belirtmek için kullanıldı.

 

  • attach()

Servo motorları ilgili pinlere atamak için <servo.h> kütüphanesinde bulunan bu fonksiyon kullanıldı.

 

  • write()

 

         Servo motorlara uygulanması gereken etkiyi uygulayan <servo.h> kütüphanesinde bulunan bu fonksiyon kullanıldı.

     

         PID (Proportional-Integral-Derivative) günümüzde sık kullanılan bir kontrol  yöntemidir. Endüstrideki uygulamaların büyük bölümünde uygulanmaktadır. Bir PID denetleyici bir süreç içinde değişen ve istenilen  nokta ile arasındaki farkı kullanarak bir "hata" değeri hesaplar. Denetleyici sisteme yapılması gereken etkiyi hesaplayarak hatayı en aza indirip istenilen  değere ulaşmak için çalışır.

 

         PID algoritması oransal(P), integral(I), türev(D) hesaplarını sisteme uyarlayacak olan sabit katsayılar içerir. P mevcut anlık hataya bağlıdır. I geçmiş hataların toplamı ve D gelecekteki hataların bir tahminidir. Bu değerlerin en doğru şekilde belirlenmesi sistemin daha sağlıklı bir şekilde dengede durmasını sağlar. Bu üç değerin sisteme olan etkileri aşağıda özetlenmiştir:

 

Oransal denetleyici(Kp):

 

         Yükselme zamanını azaltmada etkili olur ama kalıcı durum hatasını hiçbir zaman ortadan kaldıramaz. Hata miktarına ve Kp katsayısına bağlı olarak oransal kontrol, denetleyici çıkışını üretir. Sistemin statik doğruluğunu ve dinamik cevabını artırır.

 

İntegral denetleyici(Ki):

 

         Ki kontrol katsayısına ve hata miktarına göre denetleyici çıkışı ayarlanır. Dinamik cevapdan feragat ederek statik doğruluk miktarını artırır. Kalıcı durum hatasını ortadan kaldırmada etkili olur ama geçici cevabı daha kötü yapabilir.

 

Türevsel denetleyici(Kd):

 

         Hatanın değişme hızına ve Kd türevsel kontrol katsayısına bağlı olarak, denetleyici çıkışı ayarlanır. Dinamik cevabı arttırır veya geliştirir. Sistem kararlılığının artmasında, aşmanın azalmasında ve geçici cevabın düzelmesinde etkili olur.

 

         Bu değerlerin belirlenmesi için literatürde çeşitli yöntemler bulunmaktadır. Deneme yanılma yolu ile bulunması genelde kullanılan bir yöntemdir. P, I ve D değerlerini belirlemek için ilk olarak rastgele değerler yazarak sistemin davranışını gözlemledik. Deneme yanılmayı daha mantıklı olarak yapmanın da yöntemleri vardır. Mesela iki değere sıfır atayıp diğer değeri yavaş yavaş arttırarak sistemin yaptığı tepkiye göre en düzgün davranışı gösterdiği değerler not edildi. Çok fazla test yapılmak zorunda kalındı çünkü çok küçük farktaki değerlerde bile sistemin tepkisi çok farkediyordu.

Donanım Modülü

         Donanım modülünde oluşturulacak mimaride kullanılacak öncelikli eleman Arduino MEGA mikrodenetleyicisidir. Topun konumunu elde etmek için touch panel kullanılacaktır. Elde edilen konum verileri işlendikten sonra sistemi dengelemek için 2 servo motor tarafından güç uygulanacaktır. İlerleyen aşamalarda sisteme manuel olarak Wii nunchuck tarafından komut verilmesi sağlanacaktır.

-  Touch Panel (12.1 inç)

         Touchscreen, iki şeffaf tabakadan oluşur, bu tabakalar  birbiri üzerine istiflenmiş bir iletken malzeme ile kaplıdır. Basınç uygulandığında, üst katman alt katmanla temas eder. Bir katmana bir voltaj uygulandığı zaman bölücü voltaj oluşur. Touchscreen’de  bir dokunuşun koordinatları Y yönündeki katmana voltaj uygular, daha sonra X yönünde diğer katmana voltaj uygular. Bu bölücü voltaj tarafından yaratılan gerilimi okurken Y koordinatı ve X koordinatları bulunur.

 

         4 kablolu dokunmatik ekrandaki dokunuşun x ve y koordinatları iki adımda okunabilir. İlk olarak, Y + yüksek, Y- topraklanır. Daha sonra X + 'deki gerilim ölçülür. Bu ölçülen voltajın uygulanan sürücü voltajına oranı, y koordinatının dokunmatik ekranın yüksekliğine oranına eşittir. X koordinatı ise, X + yüksek, X- 'i topraklanır  ve Y +' da gerilim ölçülür. Bu ölçülen voltajın uygulanan sürücü voltajına oranı, x koordinatının dokunmatik ekran genişliğine oranına eşittir.

 

- Arduino MEGA

         Arduino bir open-source bir mikrodenetleyici donanım parçasıdır. Arduino, 54 digital input/output pin (bu pinlerden 15’i PWM), 16 analog inputs, 4 UARTs (donanım seri portları), bir 16 MHz crystal osilatör, bir USB bağlantısı, bir güç prizi, bir ICSP başlığı ve bir reset butonundan oluşmaktadır. Ardunio, bir bilgisayara bir USB kablosuyla bağlanır veya Ardunio’yu başlatmak için bir AC-DC adaptörü veya pille güç uygulamak gerekir.

 

         Kütüphaneler ise C ve C++ dillerinde yazılmıştır.

Mega 2560, harici bir donanım programcısı kullanmadan yeni bir kod yüklenmesine izin veren bir önyükleyici ile önceden programlanmış olarak gelir. Orijinal STK500 protokolünü kullanarak iletişim kurar. Arduino mega; touch screen, servo motor ve yazılımlar arasındaki iletişim için kullanılır.

 

-  Servo mg995

         Servo motor kolunun platformun merkezi ile hizalandığı nokta önemli bir noktadır. Servo motorların yükseklik ayarlaması yapılmalıdır. Motordan alınan güç ile hareket edecek platform yatay olduğunda kollarda(pirinç çubuklar) yatay olmalıdır.Yani senkronize bir hareket söz konusudur. Servo motorların yerleri tahtanın iki kenarının(kısa kenar,uzun kenar) orta noktaları seçilecek şekilde yerleştirilecektir.

Bu projede 2 servo motor kullanıldı. Biri X ekseni diğeri Y ekseni olarak yerleştirildi.

 

- Nunchuck

         Nunchuk, ivmeölçer, kumanda çubuğu ve düğmeler verilerine erişilebilen, I²C kapasitesine sahip herhangi bir mikrokontrolör ile bağlantı kurabilir. Todbot, Nichuan'ı bir Arduino’ya bağlamayı kolaylaştırmak için bir adaptör olan Wiichuck'u oluşturuldu. 3 akslı ivmeölçer, basit joystick ve basma düğmelerinden oluşmaktadır.

Nunchuck 6 bit veri aracılığıyla iletişim kurar. Bu verileri okumak için wiimote'u Arduino gibi bir mikrodenetleyiciye bağlanması gereklidir.

            

 

3D Modülü

         3D modülünde Unreal Engine kullanıldı.

 

Unreal Engine

 

         Unreal Engine’in Epic Games tarafından 1998’de ilk sürümü ortaya çıkarıldı. C++ tabanlı olup, cross platform özelliği vardır.

Neden Unreal Engine kullanıldı?

  • CPP tabanlı en gerçekçi  fiziksel  hesaplamalar burada gerçekleşir.

  • Görsel sunum olanağı fazladır.

  • Kullanımı kolaydır. Cross platformda da çalışma özelliği vardır.

  • Plugging desteği sayesinde Unreal Engine özelleştirilir. Bu sayede Arduino ile iletişim sağlanır.

 

 

3D İçin Oluşturulan Modüller

1)UI

  • Kullanıcıdan input alınan ve kullanıya output verilen modüldür.

  • Set point belirlenir. Güncel set point kullanıcıya gösterilir.

  • Topun konumu kullanıcıya bir map aracılığıyla gösterilir.

 

 

2)GENERAL

         Donanım modülü 3D programlar ile modellendikten sonra Unreal Engine’deki sahneye aktarılarak gerçekleştirilir.

 

3)PLUGIN

         Serial Port

         Serial Port sayesinde Unreal Engine ile Arduino’nun iletişimi sağlanmaktadır. Bu bölümde port açıp kapatılabilme, arduinodan veri alma ve veri gönderme yani veri transferi gerçekleşmektedir.

bottom of page