FunProject - Arduino ile Oyun Oynarken CPU Sıcaklığı ve FPS Değer Göstergesi Yapımı
Güncelleme tarihi: 24 Tem 2020
Herkese merhaba yine bir eğlencelik proje ile karşınızdayım. Bu projede oyun oynarken Arduino ile fiziksel olarak CPU sıcaklığını ve FPS değerlerini gösteren bir panel yaptım. Ayrıca ekran parlaklığını da ayarlayabileceğiniz bir rotary encoder kullanarak biraz daha işlevsellik kattım.
Kullanılan Malzemeler
Arduino UNO
Orta boy breadboard
Micro servo (2 adet)
Rotary encoder
Cihaz Görüntüsü
Üstteki gösterge bilgisayar sıcaklığını gösterirken alttaki gösterge FPS değerini göstermekte.

Devre Şeması

Arduino Kodlarının Yazımı
Projede iki adet 180 derecelik micro servo kullandım. Servo motorlarım dokuzuncu ve onuncu pinlere bağladım. Ekran parlaklığı için kullandığım rotary encoder da altıncı ve yedinci pinlere bağladım.
Burada özellikle servo motorlarımı byte veri alış verişiyle kodladım çünkü string veri alışverişlerinde veri kaybı yaşamaktaydım. Bu yüzden de dört byte lik Int32 veri alışverişi ile servo motorlarımı hareket ettirdim.
Gelen değerlerden iki motoru ayırt etmek için ilk motorumun verisine 1000 ekleyerek gönderiyorum. İkinci motoruma da 2000 ekleyerek gönderiyorum. Böylece 1000 ile 2000 arasında bir değer geldiğinde birinci motora, 2000 ile 3000 arasında bir değer geldiğinde ikinci motora ait olduğunu anlıyorum.
Motor sıfır değeri en sağ da olduğu için bende göstergelerimin en soldan başlamasını istediğim için 180 değerinden çıkartarak göstergemdeki ibreyi oynatıyorum. Böylece ibrem soldan sağa doğru hareket ediyor.
Ekran parlaklığı için kullandığım rotary encoderı da ise, hareket ettiği her bir adımda sayacı bir arttırarak bilgisayarıma bilgiyi gönderiyorum.
Bu projede kullandığım teknolojiler ve kütüphaneler:
Backend
C#
ASP .NET
Visual Studio 2019
Microsoft.Diagnostics.Tracing (https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.TraceEvent/)
OpenHardwareMonitor (https://openhardwaremonitor.org/downloads/)
Dakota framework (kendi oluşturduğum framework) (https://github.com/HakanUcaar/Dakota)
Backend Kodlarının Yazımı
Arka uç noktaya baktığınızda iki ana kısımdan oluşmakta. Birincisi Arduino dan verilerin okunması ikincisi bilgisayardan verilerin okunarak Arduino ya gönderilmesi.
GammaLight class: Bu class ekran parlaklığını değiştirmek için kullandığım class.

FPSAndCPUTemperature class: Bu class CPU sıcaklığını ve ayarladığım oyunun FPS değerlerini alarak Arduino cihazına göndermekte. FPS değerleri uygulamadan uygulamaya değiştiği için siz ayarlayacağınız oyunun ismini bularak burada adı bu ise şeklinde eşitlemelisiniz.

ArduinoMachine class: Bu classta diğer projelerimde olduğu gibi Dakota frameworkü kullandım. Arduinodan aldığım verileri ekran parlaklığını ayarlamak için kullanıyorum.

Kaynaklar
Bilgisayar ekran parlaklığını değiştirme (https://www.pinvoke.net/default.aspx/gdi32.setdevicegammaramp)
FPS değerlerinin alınması (https://stackoverflow.com/questions/18340347/monitoring-the-fps-of-a-direct-x-application)
CPU sıcaklığının alınması (https://www.lattepanda.com/topic-f11t3004.html)
Kaynak Kodlar
Github : https://github.com/HakanUcaar/FpsCpuPanel
Github : https://github.com/HakanUcaar/Dakota