
Yazılım Modülü
Bu modül PID controller ve oyunu içerir. Topun koordinatlarını alıp, buna göre servo motorları kontrol eder.
Aynı zamanda 3D modülü ile haberleşerek topun ve servo motorların durumunu iletir, istenilen konumu günceller.
Nasıl çalışır?:
- Serialdan gelen veri var mı kontrol edilir ve gerekli işlemler yapılır. (Aşağıda anlatılacak)
- Dokunmatik panelden topun koordinatları alınır.
- X ve Y koordinatları için PID hesaplanır.
Eğer PID değeri;
X için -900 ile 900, Y için -600 ile 600 arasında değilse uç değerlerden yakın olduğu değer döndürülür. (örn. X = -1000 için -900)
- Hesaplanan PID değeri 0 ile 180 aralığına maplenir. Böylece servo motor için istenilen açı değeri elde edilir.
- Koordinatlar ve açı değerleri serial üzerinden gönderilir. (iletişim protokolü aşağıda belirtilecek)
İletişim Protokolü:
Arduino → PC:
X (int)
Y (int)
X servosunun açısı (float)
Y servosunun açısı (float)
PC → Arduino:
Gelen verinin tipini belirten karakter (Gelen veri setpoint ise ‘0’ , oyun moduna geçmek için ‘1’) (char)
Gelen veri ‘0’ ise devamı şu şekilde olur:
X’in istenilen konumu (float)
Y’nin istenilen konumu (float)
Oyun Kısmı
Oyunun genel amacı daha önce yanan ledleri hatırlayıp gyro yardımı ile topu bu ledler üzerinden götürmektir. Bunu sağlayabilmek için her bir ledin konum bilgisine göre x ve y yönünde ortalama bir konum elde edildi. Bu konumları kolay şekilde değerlendirebilmek için dokunmatik ekran üzerinde x için minimum nokta 0, maksimum nokta 800 olarak belirlenirken y için minimum nokta 0, maksimum nokta 600 olarak ayarlandı. Bu şekilde topun konumunu yani hangi pine karşılık gelen led üzerinde bulunduğu kolaylıkla belirlenmiş oldu. Böylece doğru konumda olup olmadığı ve ledin hangi tepkiyi vereceği kolaylıkla sağlanmış oldu.
Ayrıca gyrodan alınan x ve y yönündeki açı bilgilerini 0 ile 180 arasında belirleyerek oyuncunun motorlara dolayısıyla plakaya hareket kazandırması sağlandı. Bu hareket ile oyuncunun topu dengeli bir şekilde doğru yoldan götürmesi beklenmektedir.
Vision Modu:
Bunu yaparken raporun başında kurulumunu anlattığımız ArUco isimli kütüphaneyi kullandık. Bu kütüphanenin özelliği aşağıdaki gibi markerlar oluşturup, beyaz arkaplanda ve kameraya dik durumda olduğunda bunları tanıyabilmesi ve koordinatlarını belirleyebilmesi.

Marker örneği
Nasıl yaptık?:
Önce markerın bulunabileceği koordinat aralıklarını bulup, touchscreenin koordinat aralığına göre mapledik. Sonrasında ise kameradan 100 ms aralıklarla koordinat alıp kaydettik ve bu koordinatları 150 ms aralıklarla Arduino’ya göndererek X ve Ynin istenilen konumlarını değiştirdik. Böylelikle topu markerın hareketlerine göre yönlendirdik.