top of page

                                 Kullanılan  Kütüphaneler

 

MAP: Haritalama fonksiyonu temel olarak belirli bir değer aralığında olan tam sayı değerlerini başka bir değer aralığına çevirir. Projede, dokunmatik ekrandan gelen konum değerlerindeki gürültüyü azaltmak için, aralık daha küçük bir aralığa çekildi. Konum aralıkları, her iki eksen için 0 – 1024 bandındayken haritalama yöntemi ile bu değerler X ekseni için 0 - 400, Y ekseni için 0 – 300 aralığına çekildi. Haritalama işleminin ardından düzlem aşağıdaki gibi hayali ızgaralara ayrılarak her bir birim alan için yaklaşık motor tepkileri oluşturulur.

 

 

 

 

 

 

 

 

 

 


 

 


 

PID denetleyicisi: Topun sürekli hareketinden ötürü ortaya çıkan gecikme ile topun konumları için gerekli tepkilerin üretilmesi geç gerçekleşmektedir. PID denetleyicisi ile topun olacağı yer ile şu an olduğu yer bilgileri üzerinden hata hesaplaması yapılır. Hatanın büyüklüğüne göre oluşturulan daha keskin Servo motor hareketleri ile geç tepki süreleri kısaltılmış olur. [3]

Touchscreen.h: Arduino için hazırlanan dokunmatik ekran kütüphanesi ile getPoint() vb. fonksiyonlar ile X ve Y noktalarına ait bilgiler alınabilmektedir [4].

İletişim: İletişim Arduino ve bilgisayar olarak iki farklı bölüme ayrılmıştır. Her iki bölümde de alıcı (rx) ve gönderici (tx) fonksiyonlar yer almakla beraber bağlı olunan seri COM portu ile haberleşme gerçekleştirilir. Arduino tarafında sistem fonksiyonu olan Serial.read() [5] ve Serial.write() [6] fonksiyonları kullanılarak bayt bayt okuma ve yazma yapılarak cstring oluşturulur. Bilgisayar tarafında ise RS-232 kütüphanesi [7] kullanılarak seri port üzerinden karşılıklı haberleşme gerçekleştirilmiştir. Bu bölümün devamında sırasıyla bu fonksiyonlardan bahsedilecektir.

  • İletişim protokolleri: Üç kısma ayrılmıştır.

    • Arduino, bilgisayara mesaj gönderirken “<x>,<y>x” şeklinde bir string oluşturulup gönderilir. <x> ve <y> topun dokunmatik ekran üzerindeki konumunu bildirmektedir. String sonundaki x ise bitiş karakteri olarak tanımlanmıştır.

    • Bilgisayardan Arduino’ya mesaj gönderilirken <setPointX,setPointY>x formatı uygulanmaktadır. Böylece bilgisayar üzerinden kullanıcı dokunmatik ekran üzerinde yeni merkezler belirleyebilme imkânına sahip olmaktadır.

    • Kale oyunu için eklenen keypad’lerin bilgisayardan bağımsız Arduino ile iletişim kurması sağlanmıştır. Keypad üzerine basılan karakter Arduino üzerinden okunup tepki üretilmektedir.

  • Serial.read(): Arduino üzerinde ‘x’ olarak belirlenen string mesaj sonu karakterine kadar okunan karakterler sırasıyla bir string üzerinde biriktirilmektedir. Mesaj sonu görüldüğü zaman ‘x’ yerine ‘\0’ konularak alınan mesaj ile işlem yapılmaktadır.

  • Serial.write(): Dokunmatik ekran üzerinde bulunan metal topun konum bilgileri bu fonksiyon aracılığı ile birer bayt şeklinde seri porta yazılmıştır.

  • RS232_PollComport(): RS-232 kütüphanesinden olan bu fonksiyon ile açılan seri port üzerinden belirtilen boyuta kadar karakter dizisi alınabilmektedir.

  • RS232_cputs(): RS-232 kütüphanesinden olan bu fonksiyon ile açılan seri port üzerinden istenilen mesaj aynı anda birer bayt olacak şekilde seri porta yazılabilmektedir.


 

Ara yüz: OpenSceneGraph’ın sunduğu görsel imkânlarla üç boyutlu bir uzayda objelerden oluşan tasarım uygulanmıştır. OpenSceneGraph altında her bir obje ağaç hiyerarşisine sahiptir. En tepede (kök) camera HUD objesi yer almaktadır. Oluşturulan her yeni obje bu kökün içine eklenmelidir. Aşağıdaki fonksiyon açıklamalarıyla ara yüzün temel çalışma yöntemi hakkında fikir vermek amaçlanmaktadır.

  • addDrawable(): Bu fonksiyona gönderilen veri yapıları ile bir üst düğüme mevcut özellikler atanabilmektedir. Projede kullanılan veri yapıları arasında üç boyutlu vektör, çizgi, devamlı çizgi, düzlemler vb. yer almaktadır. Örneğin oyun için tasarlanan kale yapısı iki tane üçer çizgi objesinin birleştirilmesiyle gerçekleştirilmiştir.

  • updateCallback(): Dinleyici olan bu fonksiyon, başka fonksiyonlar içinde çağırıldığında belli frekansta atanan işi yürütmektedir. Bu fonksiyon ile animasyonlu (hareketli) objelerin yönetimi gerçekleştirilmiştir.

  • update(): Donanımın görsel ifadesine ek olarak pencerede sunulan gerçek zamanlı x ve y tablosunun kullandığı bu fonksiyon ile tablo düzenli olarak güncellenmektedir.

  • pickHandler class: Pencereye eklenen düzlem objesine atanan tıklama dinleyicisi ile kullanıcı tıklamaları ile dokunmatik ekranın merkez noktasının değiştirilmesi sağlanmaktadır. GUIEventhandler sınıfını ve setPointsXYfromPano fonksiyonunu kullanan bu sınıf ile fare tıklamaları ile kullanıcı etkileşimi gerçekleştirilmiştir.


 

Keypad yöneticisi: Kale oyunu için kullanılan iki keypad’den sisteme veri girişi sağlanması için getKey() isimli fonksiyon kullanılmıştır. Bu fonksiyon ile alınan değer oyun yapısının içine dâhil edilir. Oyun yapsından daha ayrıntılı bir sonraki alt başlıkta bahsedilmiştir.

Kale oyunu: Kullanıcının ara yüz aracılığı ile başlattığı bu oyunun kuralları aşağıdaki gibidir.

  • Top, kullanıcı1’in yarı sahasında ise kullanıcı1, kullanıcı2’nin yarı sahasında ise kullanıcı2 düzlem kontrolünü keypad aracılığı ile kontrol edebilmektedir.

  • Keypad ile atanmış tuşlar aşağıdaki şekildeki gibidir. Kullanıcı mavi tuşlar ile kendi bakış açısı yönünde sırasıyla (ileri, sol, sağ, geri) hareketlerini Servo motorlarına 20’şer derecelik tepki göndererek oluşturmaktadır.

  • Kullanıcı kırmız tuş ile etkileşime geçtiği zaman karşı kale yönünde (2 yönünde) 40 derecelik Servo motoru hareketi gerçekleştirir.                                                                                                       

  • Kullanıcılar arası skor kayıt altında tutulup gol anında ara yüzde golü ifade edecek eylemler gerçekleştirilir.


 

                                            Genel Algoritma


 

  • Arduino’ya yüklenen program ilk olarak düzgün PID’ler ile topu dengede tutmaktadır. PID denetleyicisi ile topun hızı ve ivmesi hesaplanarak Servo motorların yapacakları dönüş hesaplanır. Topun hızı, ivmesi ve konumuna göre topun yaptığı birkaç salınımdan sonra top merkez olarak belirlenen noktada kalmaktadır.

  • Dokunmatik ekran üzerine top konulduğunda X ve Y koordinatları Arduino aracılığı ile seri porta yazılmaktadır.

  • Dokunmatik ekranın üzerinde top yok iken Servo açıları zemine paralel hale gelip sistem denge konumuna ulaşmaktadır.

  • Yazılım modülüne bu koordinatlar (0 – 1024) aralığında gelmektedir. Bu koordinatlar map fonksiyonu kullanarak 400*300 çözünürlüğe oranlanmaktadır.

  • Varsayılan olarak topun dengelenmesini istediğimiz noktası orta noktasıdır. Bu yüzden merkez noktası (200,150) olarak alınmaktadır. Kullanıcı istediği zaman bu merkez noktası ile ilgili değişikliğe gidebilmektedir.

  • Kullanıcı oyun oynayıp oynamak istemediği girişini ara yüz aracılığı ile ifade edebilmektedir.

bottom of page