Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

T.C. GEBZE YÜKSEK TEKNOLOJİ ENSTİTÜSÜ Bilgisayar Mühendisliği Bölümü BIL-395 PROJE 1 Dans Ettir Makinesi.

Benzer bir sunumlar


... konulu sunumlar: "T.C. GEBZE YÜKSEK TEKNOLOJİ ENSTİTÜSÜ Bilgisayar Mühendisliği Bölümü BIL-395 PROJE 1 Dans Ettir Makinesi."— Sunum transkripti:

1 T.C. GEBZE YÜKSEK TEKNOLOJİ ENSTİTÜSÜ Bilgisayar Mühendisliği Bölümü BIL-395 PROJE 1 Dans Ettir Makinesi

2 GRUP 5 Fatih DÖNMEZ Nilifer KADİROĞLU Ramazan ERECİR Hamide Betül HASGÜR Orçun ÖZ Danışman Y. Doç. Dr. Erkan ZERGEROĞLU

3 ÖNSÖZ Proje “Dans Ettir Makinesi” ‘dir. Projenin amacı insanlara dans etmeyi eğlenceli bir şekilde öğretmektir. Proje yazılım ve donanım olmak üzere iki ana parçadan oluşmaktadır. Temel olarak çalan müziğin ritmine göre oluşturulan adım kombinasyonları ile dans edilmesi sağlanır.

4 Çalışma Grupları Platform Fatih, Orçun, Ramazan Paralel Port İletişim Fatih, Orçun, Hamide, Nilifer Kullanıcı Etkileşimli Arayüz ve Ritim Analizi Hamide, Nilifer, Ramazan, Fatih

5 PROJENİN İŞLEYİŞİ Kullanıcı tarafından seçilen wav dosyasının ritim analizi bittikten sonra, ortaya çıkan adım kombinasyonları, program aracılığı ile ekranda kullanıcıya gösterilirken aynı zamanda paralel port aracılığı ile bu adım kombinasyonları, eş zamanlı olarak dans platformuna gönderilecektir. Kullanıcı, basması gereken adımları, ekrana bakarak yada platformda ki hücrelere bakarak takip edebilecektir. Ardından platform üstündeki hareketleri yine paralel port aracılığı ile programa ulaşacaktır. Kullanıcının adımlarının doğruluğu değerlendirildikten sonra, puanlama yapılacaktır.

6 PROJENİN BÖLÜMLERİ Platform Paralel Port İletişim Kullanıcı Etkileşimli Arayüz ve Ritim Analizi

7 PLATFORM Platformun yapım aşamaları: Tahta kasanın yaptırılması Butonların takılması Işıklandırma devrelerinin yapımı Ortak kullanım için ara devrenin yapımı Plexi Glass ile son hali

8 Tahta Kasanın Yaptırılması Platform 16 hücreden ve içlerinde plexi glassları desteklemesi ve butonların yerleştirilmesi için yapılmış bölümden oluşur.Ayrıca her bir hücrenin çerçeveleri bizim tarafımızdan yapılmıştır.

9 Butonların Takılması Her bir desteğe beşer tane buton kullanıcı bilgilerini almak için yerleştirilmiştir.

10 Işıklandırma Devrelerinin Yapımı Resimde görülen küçük ışıklandırma devrelerinden 64 adet yapılmış ve her bir hücreye birbirine paralel bağlı olan 4 tanesi yerleştirilmiştir.

11 Platformun Son Hali Platformun üzerine Plexi – Glass konmadan önceki son hali ; tüm butonların ve ışıklandırma devrelerinin takılmış ve kullanıma hazır hale geldiği evre.

12 Ortak Kullanım İçin Ara Devrenin Yapımı Bu devre iki grubun ortak kullanımı için tasarlanmıştır. Buton ve ışıkların kontrolü için iki ayrı soket kullanılmıştır. Ayrıca ledler tarafından çekilecek yüksek akımın kontrolü için transistör kullanılmıştır.

13 Plexi Glass İle Son Hali Denemelerin yapıldığı platformun son hali. Üzerinde dans edilebilir hale getirildiği an.

14 PARALEL PORT İLETİŞİM Projenin bu kısmının amacı bilgisayar yazılımıyla, platform’un elektronik kısmının haberleşmesinin sağlayacak bir arayüz sunmasıdır. Bu arayüz yardımı ile donanım ile yazılım birbirinden soyutlanması gerçekleşmiştir. (Hardware Abstraction Layer). Bu iletişimi sağlamak için inpout.32 dll’i kullanılmıştır. Bu işlemi yapabilmek için Connection class’ı kullanılmıştır. Class içinde paralel porttan okuma ve paralel porta yazma yapabilmek için birer fonksiyon kullanılmıştır(Inp_32 ve Out_32 ).Ayrıca bu class bilgisayarda bulunabilecek muhtemel port adreslerini tutar. Bu adresleri portun adresini değiştirmek için kullanır. Bu adresler arasında geçiş yapma imkanı sağlar.

15 İletişim Ana Devre

16 DEVRENİN İŞLEYİŞİ Bir önceki sayfada gösterilen devre bilgisayardan paralel port aracılığı ile alınan verilerin platforma gönderilmesini sağlamaktadır. Bunu yapabilmek için interrupt kullanılmıştır. Üç adet pic (Programmable Interrupt Controller ) ile bu kontrol sağlanmıştır. Birinci pic bilgisayardan gelen verileri değerlendirip diğer iki pice göderir. Bu iki picten biri yeşil renk bilgisini ve diğeri kırmızı renk bilgisini platforma göndermek için kullanılmıştır.

17 İnput kontrolü için tasarlanmış devre

18 Devrenin İşleyişi Bu devre kullanıcının inputlarını almak için önce protatif olarak tasarlanmış ve daha sonra platforma entegre edilmiştir. Buton bilgilerinin alınabilmesi için pull-up direnci kullanılmıştır.Önce butonların bir ucu bu yolla toprağa çekilmiştir ve basıldığı zaman 5v ile veri girişi kontrolü sağlanmıştır.

19 Kullanıcı Etkileşimli Arayüz ve Ritim Analizi

20 Ritim Analizi Bu projede yapılan ritim analizi “vuruş” denilen ses enerjisindeki ani değişimlerin tespiti üzerinde temellenmiştir. Vuruşların tespitinde izlediğimiz yöntem şudur: Anlık ölçtüğümüz ses enerjisi sinyalin ortalama enerjisiyle karşılaştırılmıştır.

21 Burada insanın işitme sisteminin şarkının son 1 saniyelik kısmını hatırladığını ve o an duyduğu sesi de son 1 saniyelik kısımla karşılaştırıp vuruş olup olmadığını tespit ettiğini varsaydık. Algoritmamızda steryo modunda çalıştık, yani sol kanaldan aldığımız enerji değerleri ve sağ kanaldan aldığımız enerji değerleri için iki tane dizi kullandık. Anlık ölçümü yapmak için ses sinyalinden 1024 örnek değer aldık.Yani bu 1024 örneğin içerdiği enerji,bizim anlık enerjimizdir.

22 Bu 1024 örneği sol kanal ve sağ kanal olarak aldığımız için r_signal ve l_signal dizilerimizin her ikisinin de boyutu 1024’tür. Ses sinyalinin 1 saniyelik kısmı ise yaklaşık örnek değere tekabül etmektedir. Ortalama hesabımızı da bu örnek (yani son 1 saniyelik kısım) üzerinde yaptık ve anlık ölçtüğümüz 1024 örneğin enerjisiyle karşılaştırdık.

23 Eğer sadece anlık ses enerjisini öncekilerle karşılaştırarak vuruş tespiti yapmaya çalışırsak bu algoritma aynı enerji seviyelerinde çalmakta olup farklı frekans değerlerine sahip olan sesleri ayırt edemez. İşte bu yüzden aldığımız ses sinyalinin frekans değerlerini ölçüp bunları bant aralıklarına böldük yani ses sinyalinden aldığımız örnekleri frekans değerlerine göre gruplandırmış olduk. Böylelikle herbir bant aralığını ayrı ayrı değerlendirdik ve herbiri için ayrı ayrı vuruş ölçümü yapabildik. Biz frekans değerlerimizi 64 bant aralığına ayırdık. 64, hassas bir ölçüm için yeterli bir sayı.

24 Vuruş tespiti için kullandığımız fonksiyonları içeren sınıfımız, “BeatDetector” sınıfı.Öncelikle “FileReader” sınıfımızın(dosyadan ses sinyallerini okumak için kullandığımız fonksiyonları içeriyor) fonksiyonlarını kullanarak ses sinyalimizden ilk 1024 örneği sağ ve sol kanallar olarak okuyoruz. Bu değerlerimizi frekans alanına geçirmek için “Fast Fourier Transform (FFT)” u kullanıyoruz.Bunun içinde “Fourier” sınıfımızın fonksiyonlarından faydalanıyoruz. r_signal ve l_signal dizilerimizi fft_double() fonksiyonumuza geçirerek değerlerimizin fourier dönüşümünü alıyoruz. FFT’ den bize yine herbiri 1024 compleks sayı içeren iki kanal dönüyor.İki kanaldaki karşılıklı değerlerin karelerini alarak birbiriyle topluyoruz ve boyutu 1024 olan tek bir dizide(float * B) depoluyoruz. Yani “B” dizimiz sinyalimizden aldığımız 1024 örneğin frekans değerlerini içeriyor.

25 Frekans değerlerini içeren B dizimizi 64 parçaya ayırdığımızı düşünüyoruz(64 tane bant aralığı için). Bu 64 tane bant aralığının her birindeki enerjiyi hesaplıyoruz ve “Es” dizimize kaydediyoruz. Sonuçta Es dizimizde 64 tane değer toplanmış oluyor ve Es[i] bize i’inci bant aralığının enerjisini gösteriyor.

26 Geçmiş 1 saniyedeki örnek değerlerimizi saklamak için hafızada yer ayırmamız gerekiyor. Müziğin 1 saniyesi için hafızamızda 43 tane 1024’lük değer bulunmaktadır tane değeri 64 değere dönüştürmüştük, yani hafızamızda 43 tane 64’lük dizi sakladık.

27

28 Şarkımız çalmaya başladığında,yani oyunumuz başladığında 1 kereye mahsus olmak üzere fillHistory fonksiyonumuzu çağırdık. Bu işlemi yaptıktan sonra şarkımız bitene kadar, bir döngü içerisinde her 1024’lük parça için detectBeats fonksiyonumuz çağırıyoruz. “detectBeats” fonksiyonu her çağrıldığında,1024 örnek değeri alıyor ve bu parça için 64 bant aralığının enerji değerlerini hesaplayıp bu bant aralıklarında vuruş olup olmadığını tespit ediyor. Vuruş tespit edilen bant aralıklarından en yüksek enerjiye sahip olanlardan yakılması istenen hücre sayısınca seçip,16’ya göre modlarını alıyor ve hücreler bulunmuş oluyor. Böylelikle bu fonksiyon 1 kez çağırıldığında şarkının 1 saniyesinin 1/43’ünde yakılacak hücreleri hesaplıyor.

29 ANLIK RİTİM ANALİZİNİ YAPARAK ADIMLARI TESBİT EDEN “DETECTBEATS” FONKSİYONUNUN ALGORİTMASI

30

31

32

33 GUI Level : Bir seferde belirlenebilecek maksimum adım sayısı. Mode : Kaç saniyede bir beat bulunacağını belirtir.

34 İşleyiş Browse tuşu kullanılarak wav formatında bir dosya seçilir. Detect tuşu kullanılarak seçilen dosya level ve mode değerlerine göre analiz edilir. Analiz sonuçları text dosyasına yazdırılır. Dosya formatı /* Song Name: I Miss You.wav Level: 4 Mode: 2 */ Label Start. Current Steps :0,7, Inputs :3,9, Next Steps :15,2,. Label End

35 Play tuşuna basılarak şarkının çalması sağlanır ve oyun başlar. Şarkının çalması için mmsystem.h kullanılmıştır. Text dosyasındaki tüm değerler readScenario classının startScenario fonksiyonuyla okunur. Bu fonksiyon Parameters alan bir vektör döndürür. Tüm adım bilgileri bu vektörle dosyadan alınır. struct Parameters { Step Steps1;//current Step Steps2;//next int Time; };

36 Alınan adım bilgileri GUI’ deki Dance Pad kısmında gösterilir. Aynı zamanda bu değerler paltforma da gönderilir. Dance Padde şimdiki adımlar ve sonraki adımlar gösterilir. Aynı şekilde Platformda da kullanıcının o anda basacağı ve bir sonraki durumda basacağı adımlar gösterilir. Şimdi basacağı adımlar turuncu, sonraki adımı ise yeşil renkte gösterilir. Platformdaki hücreye hem kırmızı hem de yeşil yanması için bilgi gönderilir (Create_Protocol_SpecificCell fonksiyonu ile). Bu sayede hücrenin yeşil yanması sağlanır.

37 Bir sonraki adıma geçmesi için Parameters yapısı içindeki Time bilgilerinden yararlanılır. Karşılaştırma yapılarak bir sonraki adımların kaç saniye sonra yanacağı bilgisi de kullanıcıya GUI’de gösterilir. Ayrıca kullanıcının adımlar değişene kadar bastığı tüm adımlar GUI’de kullanıcıya gösterilir. Kullanıcı bastığı her doğru adım için 10, her yanlış adım için ise -5 puan alır. Böylelikle toplam puanı hesaplanır.

38 Kullanıcının bastığı adımlar programda tutulan timerla belirlenir. Bu sayede kullanıcının bastığı adımlar belirlenir. Kullanıcı doğru adıma bastıysa bastığı adım söndürülür. 10 puan kazanır. Eğer yanlış adıma basarsa bastığı adım kırmızı yakılıp söndürülür. -5 puan alır. Toplam puanı ve son kazandığı puan ekranda gösterilir.

39 Şarkı bitince kullanıcıdan yeni bir şarkı seçmesi beklenir, eğer isterse tekrar aynı şarkıya dans edebilir. Şarkı sırasında kullanıcı eğer şarkıdan sıkılırsa Stop tuşuyla şarkıyı durdurarak başka bir şarkı seçebilir. Şarkı sırasında Pause tuşuyla şarkıyı durdurabilir. Yeniden başlatarak kaldığı yerden devam edebilir.


"T.C. GEBZE YÜKSEK TEKNOLOJİ ENSTİTÜSÜ Bilgisayar Mühendisliği Bölümü BIL-395 PROJE 1 Dans Ettir Makinesi." indir ppt

Benzer bir sunumlar


Google Reklamları