Upload
others
View
43
Download
0
Embed Size (px)
Citation preview
T.C.
SÜLEYMAN DEMİREL ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ
ANDROİD TABANLI MOBİL CİHAZLAR ÜZERİNDE LOJİK DEVRE DENEYLERİNİN SİMÜLASYONU
Ümmüşan ÇITAK
Danışman Doç. Dr. Abdülkadir ÇAKIR
YÜKSEK LİSANS TEZİ ELEKTRONİK VE BİLGİSAYAR EĞİTİMİ ANABİLİM DALI
ISPARTA - 2018
© 2018 [Ümmüşan ÇITAK]
TAAHHÜTNAME Bu tezin akademik ve etik kurallara uygun olarak yazıldığını ve kullanılan tüm literatür bilgilerinin referans gösterilerek tezde yer aldığını beyan ederim.
Ümmüşan ÇITAK
i
İÇİNDEKİLER
Sayfa İÇİNDEKİLER ........................................................................................................................... i ÖZET ............................................................................................................................................ iii ABSTRACT ................................................................................................................................ iv TEŞEKKÜR ................................................................................................................................ v ŞEKİLLER DİZİNİ ................................................................................................................... vi ÇİZELGELER DİZİNİ .............................................................................................................. viii SİMGELER VE KISALTMALAR DİZİNİ ........................................................................... ix 1. GİRİŞ ....................................................................................................................................... 1 2. KAYNAK ÖZETLERİ .......................................................................................................... 4 3. MATERYAL VE METOT ................................................................................................... 9
3.1. Android İşletim Sistemi ........................................................................................ 10 3.1.1. Android işletim sistemi sürümleri ......................................................... 11 3.1.2. Android mimarisi ........................................................................................... 12
3.1.2.1. Temel yapı (Linux çekirdeği) ....................................................... 13 3.1.2.2. Kütüphaneler (Libraries) ............................................................... 14 3.1.2.3. Android runtime ................................................................................ 14
3.2. Unity3D ........................................................................................................................ 14 3.2.1. Proje (Project) paneli ................................................................................... 16 3.2.2. Hiyerarşi (Hierarchy) paneli ..................................................................... 17 3.2.3. Araç çubuğu (Toolbar) ................................................................................ 17 3.2.4. Sahne (Scene) paneli .................................................................................... 19 3.2.5. Game (Oyun) paneli ...................................................................................... 19 3.2.6. Inspector paneli .............................................................................................. 19
3.3. C# Programlama Dili .............................................................................................. 20 3.4. Uygulama İçin Lojik Kapıların Tasarımı ........................................................ 21
3.4.1. Lojik kapılar ..................................................................................................... 21 3.4.1.1. Ve (And) kapısı ................................................................................... 22 3.4.1.2. Veya (Or) kapısı ................................................................................. 22 3.4.1.3. Vedeğil (Nand) kapısı ...................................................................... 23 3.4.1.4. Veyadeğil (Nor) kapısı..................................................................... 23 3.4.1.5. Değil (Not) kapısı............................................................................... 24 3.4.1.6. Tampon (Buffer) kapısı .................................................................. 25 3.4.1.7. Özelveya (Xor) kapısı ....................................................................... 25
3.4.1.8. Özelveyadeğil (Xnor) kapısı .......................................................... 26 4. ANDROİD TABANLI MOBİL CİHAZLAR ÜZERİNDE LOJİK DEVRE
DENEYLERİNİN SİMÜLASYONU ................................................................................ 27 4.1. Gerçekleştirilen Simülasyon Yazılımı ............................................................. 27 4.1.1. Simülasyon ekranı.......................................................................................... 29 4.1.1.1. Lojik kapı ekle butonu .................................................................... 30 4.1.1.2. Lojik giriş (Yük) ekle butonu ....................................................... 31 4.1.1.3. Çıkış (Lamba veya led) ekle butonu .......................................... 32 4.1.1.4. Sil butonu .............................................................................................. 32 4.1.1.5. Ana menüye git butonu .................................................................. 33 4.1.1.6. Çıkış butonu ......................................................................................... 34 4.1.1.7. Temizle butonu .................................................................................. 35 4.2. Simülasyon Yazılımının Akış Diyagramı........................................................ 36
ii
4.3. Yakınlaştırma ve Sahnede Gezinme İşlemleri ............................................. 38 4.4. Geliştirilen Mobil Yazılım İle Yapılan Simülasyon Örnekleri ............... 38 4.4.1. Ve (And) kapısı uygulaması ....................................................................... 38
4.4.2. Veya (Or) kapısının akıllı tahtada uygulanması ................................ 39 4.4.3. Yarım toplayıcı lojik devresi uygulaması ............................................. 39 4.4.4. Yarım çıkarıcı lojik devresi uygulaması ............................................... 41
4.4.5. F=AB+C(A+B) Lojik ifadesinin lojik kapılar ile gerçekleştirilmesi ........................................................................................... 42 4.5. Simülasyon Uygulamasının Apk Dosyasının Oluşturulması ................. 43 4.6. Simülasyon Uygulamasının Exe Dosyasının Oluşturulması.................. 46 4.7. Geliştirilen Mobil Uygulamanın Eğitimde Kullanılması.......................... 50
5. SONUÇ VE ÖNERİLER ...................................................................................................... 52 KAYNAKLAR ....................................................... 54 EKLER ......................................................................................................................................... 58
EK A. Programın C# Kodları ........................................................................................ 59 ÖZGEÇMİŞ ................................................................................................................................. 88
iii
ÖZET
Yüksek Lisans Tezi
ANDROİD TABANLI MOBİL CİHAZLAR ÜZERİNDE LOJİK DEVRE DENEYLERİNİN SİMÜLASYONU
Ümmüşan ÇITAK
Süleyman Demirel Üniversitesi
Fen Bilimleri Enstitüsü Elektronik ve Bilgisayar Eğitimi Anabilim Dalı
Danışman: Doç. Dr. Abdülkadir ÇAKIR
Bu tez çalışmasında, ülkemizde Mesleki ve Teknik Eğitimde okutulan Sayısal/Dijital Elektronik, Lojik Devreler, Temel Elektronik ve Ölçme, Elektronik Sistemler gibi derslerde öğrencilerin ders esnasında lojik kapılar veya lojik kapılarla gerçekleştirilen lojik devre deneylerinin simülasyonunu kolayca yapabilmelerini sağlamak amacıyla Android ve Windows tabanlı mobil cihazlarda çalışan bir uygulama geliştirilmiştir. Bu derslerde eğitimi her platformda gerçekleştirebilmek adına, okullarda uygulanmakta olan FATİH Projesi kapsamında dağıtılan Tablet PC’ler, sahip oldukları akıllı telefonlar üzerinde veya Windows tabanlı dokunmatik ekran diz üstü bilgisayar ve akıllı tahta üzerinde çalışabilen, öğrencilerin ders esnasında ya da istedikleri yer ve zamanda lojik kapılarla hazırlanan lojik devre deneylerinin simülasyonlarını yapabilmeleri amacıyla Unity3D editöründe C# dili kullanılarak 2D bir uygulama hazırlanmıştır. Mobil uygulamanın kullanılabilirliğinin değerlendirilebilmesi için 2017-2018 Eğitim Öğretim yılı Mart ayında, Milli Eğitim Bakanlığı’na bağlı bir İmam Hatip Ortaokulu’nun 6. Sınıfında okuyan ve konuyu hiç bilmeyen 12’şer kişilik birbirine denk olduğu varsayılan iki grup öğrenciye birer ders saati eğitim verilmiştir. Sınıf iki gruba ayrılmıştır. Birinci gruba simülasyon uygulaması yapılmadan tahtada temel lojik kapılar anlatılarak eğitim uygulanırken, ikinci gruba konu anlatımının yanında geliştirilen mobil uygulama ile simülasyonları gösterilerek destek verilmiştir. Derslerden sonra iki gruba da bir yazılı sınav yapılmıştır. Sonuçlar değerlendirildiğinde mobil uygulama ile desteklenen öğrencilerin %83’ü sınavda devreyi tam yaparken diğer grubun %50’si tam yapabilmiştir. Uygulamanın kullanışlı ve kolaylaştırıcı olduğu görülmüştür. Mobil uygulama ile desteklenen öğrencilerin simülasyonlarını görerek ve uygulayarak konuyu daha iyi kavradıkları görülmüştür. Anahtar Kelimeler: Android, mobil cihazlar, lojik devre, lojik kapılar, simülasyon, mobil uygulama, Unity3D. 2018, 88 sayfa
iv
ABSTRACT
M.Sc. Thesis
SIMULATION OF LOGIC CIRCUIT EXPERIMENTS ON THE ANDROID-BASED MOBILE DEVICES
Ümmüşan ÇITAK
Süleyman Demirel University
Graduate School of Natural and Applied Sciences Department of Electronics and Computer Education
Supervisor: Assoc. Prof. Dr. Abdülkadir ÇAKIR
This study, an application based on Android and Windows based mobile devices has been developed for use in lessons such as Digital Electronics, Basic Electronics and Measurement, Electronic Systems, which are taught in Vocational and technical education in our country so the students can easily develop logic gates or logic circuits experiments’ simulation of logic gates performed. In these lessons, in order to be able to perform education on every platform, Tablet PCs distributed under the FATIH Project, which is being implemented in schools, are capable of working on their smart phones or on Windows based touch screen laptops and smart boards, a 2D application was prepared by using the C # language in the Unity3D editor so that the students could simulate the logic circuit experiments prepared with the logic gates at the time of the course or at the time and place they want. In order to be able to evaluate the availability of the mobile application, in the academic year 2017-2018, in March, reading in the 6th Grade of the Imam Hatip Secondary School attached to the Ministry of National Education and two group students who were supposed to be equal to twelve persons who did not know the subject were given one lesson hour training. The class is divided into two groups. The first group, while the training is carried out by describing the basic logic gates on the board without the application of the simulation, the second group was supported by showing the simulations with the developed mobile application besides the narration of the subject. After the lessons, a written examination was made in two groups. When the results are evaluated, 83% of the students supported by the mobile application in the examination were able to complete the circuit while 50% of the other group was able to complete it. The application is seen to be useful and facilitating. Students supported by mobile application had better understanding of the subject by seeing and practicing the simulations. Keywords: Android, mobile devices, logic circuit, logic gates, simulation, mobile application, Unity3D. 2018, 88 pages
v
TEŞEKKÜR
Bu araştırma için beni yönlendiren, karşılaştığım zorlukları bilgi ve tecrübesi ile aşmamda yardımcı olan, her daim bana güvenen, gösterdiği sabır ve özveriyle desteğini eksik etmeyen değerli Danışman Hocam Doç. Dr. Abdülkadir ÇAKIR’a teşekkürlerimi sunarım. Literatür araştırmalarımda ve projeyi yapmamda yardımcı olan, beni yönlendiren değerli hocam Doç. Dr. Ecir Uğur KÜÇÜKSİLLE’ye teşekkür ederim. Yazılımı geliştirirken karşılaştığım zorlukları aşmamda yardımcı olan, bilgi ve tecrübeleriyle destek olan Süleyman Yasir KULA’ya çok teşekkür ederim. Tezin yazımı aşamasında yardımlarını esirgemeyen sevgili arkadaşım Birkan BÜYÜKARIKAN’a çok teşekkür ederim. Tezimin her aşamasında beni yalnız bırakmayan sevgili aileme ve eşim Gürkan ÇITAK’a sonsuz sevgi ve saygılarımı sunarım.
Ümmüşan ÇITAK
ISPARTA, 2018
vi
ŞEKİLLER DİZİNİ
Sayfa Şekil 3.1. Android mimarisi ............................................................................................... 13 Şekil 3.2. Unity3d ana editör penceresi ....................................................................... 16 Şekil 3.3. Proje paneli görünümü .................................................................................... 17 Şekil 3.4. Hiyerarşi paneli görünümü............................................................................ 17 Şekil 3.5. Araç çubuğu görünümü ................................................................................... 18 Şekil 3.6. Hareket butonları ............................................................................................... 18 Şekil 3.7. Transform gizmo butonları ........................................................................... 18 Şekil 3.8. Oynatma, durdurma, step butonları .......................................................... 18 Şekil 3.9. Layers butonu ...................................................................................................... 18 Şekil 3.10. Layout butonu ................................................................................................... 19 Şekil 3.11. Sahne paneli ....................................................................................................... 19 Şekil 3.12. Inspector paneli ............................................................................................... 20 Şekil 3.13. Unity3D programında C# kod yapısı ...................................................... 21 Şekil 3.14. Ve kapısı sembolü ........................................................................................... 22 Şekil 3.15. Veya kapısı sembolü ....................................................................................... 22 Şekil 3.16. Vedeğil kapısı sembolü ................................................................................. 23 Şekil 3.17. Veyadeğil kapısı sembolü ............................................................................ 24 Şekil 3.18. Değil kapısı sembolü ...................................................................................... 24 Şekil 3.19. Tampon kapısı sembolü ............................................................................... 25 Şekil 3.20. Özelveya kapısı sembolü .............................................................................. 25 Şekil 3.21. Özelveyadeğil kapısı sembolü .................................................................... 26 Şekil 4.1. Giriş ekranı görünümü ..................................................................................... 28 Şekil 4.2. Simülasyon ekranı görünümü ...................................................................... 28 Şekil 4.3. Yardım ekranı görünümü ............................................................................... 29 Şekil 4.4. Simülasyon ekranı menü görünümü ......................................................... 29 Şekil 4.5. Lojik kapı ekle butonu...................................................................................... 30 Şekil 4.6. Sahneye and kapısını ekleme ........................................................................ 31 Şekil 4.7. Lojik giriş ekle butonu ..................................................................................... 31 Şekil 4.8. Çıkış ekle butonu ................................................................................................ 32 Şekil 4.9. Sil butonu görünümü ........................................................................................ 33 Şekil 4.10. Ana menüye git butonu ................................................................................. 33 Şekil 4.11. Ana menüye git butonuna dokununca açılan pencere
görünümü ........................................................................................................... 34 Şekil 4.12. Çıkış butonu ....................................................................................................... 34 Şekil 4.13. Çıkış butonuna dokununca açılan pencere görünümü ................... 35 Şekil 4.14. Temizle butonu ................................................................................................ 35 Şekil 4.15. Programın çalışmasını gösteren akış şeması ...................................... 37 Şekil 4.16. Ve (And) kapısı uygulaması ekran görüntüleri .......................................... 38 Şekil 4.17. Veya (Or) kapısı akıllı tahta ekran görüntüleri .......................................... 39 Şekil 4.18. Yarım toplayıcı sembolü ............................................................................... 40 Şekil 4.19. Yarım toplayıcı devresi ekran görüntüleri ........................................... 40 Şekil 4.20. Yarım çıkarıcı sembolü ................................................................................. 41 Şekil 4.21. Yarım çıkarıcı devresi ekran görüntüleri .............................................. 42 Şekil 4.22. Yarım çıkarıcı devresi ayrıntılı şeması ve uygulama
görüntüleri ......................................................................................................... 42
vii
Şekil 4.23. F=ab+c(a+b) Lojik ifadesinin lojik kapılar ile tasarımı ................... 43 Şekil 4.24. File / Build settings ekran görünümü .................................................... 44 Şekil 4.25. Build settings penceresi ............................................................................... 44 Şekil 4.26. Player settings ekranı .................................................................................... 45 Şekil 4.27. Geliştirilen uygulamanın logosunun mobil cihazda görünümü .. 46 Şekil 4.28. File / Build settings ekran görünümü .................................................... 47 Şekil 4.29. Build settings penceresi ............................................................................... 48 Şekil 4.30. Windows platformu için gerekli dosyalar ............................................ 48 Şekil 4.31. Uygulamanın akıllı tahta üzerinde ekran görüntüsü – 1 ................ 49 Şekil 4.32. Uygulamanın akıllı tahta üzerinde ekran görüntüsü – 2 ................ 49 Şekil 4.33. Uygulamanın akıllı tahta üzerinde ekran görüntüsü – 3 ................ 50 Şekil 4.34. Değerlendirme sorusu .................................................................................. 51
viii
ÇİZELGELER DİZİNİ
Sayfa Çizelge 3.1. Mobil işletim sistemleri .............................................................................. 11 Çizelge 3.2. Tüm android sürümleri listesi ................................................................. 12 Çizelge 3.3. Ve kapısı doğruluk tablosu ........................................................................ 22 Çizelge 3.4. Veya kapısı doğruluk tablosu ................................................................... 23 Çizelge 3.5. Vedeğil kapısı doğruluk tablosu ............................................................. 23 Çizelge 3.6. Veyadeğil kapısı doğruluk tablosu ......................................................... 24 Çizelge 3.7. Değil kapısı doğruluk tablosu .................................................................. 24 Çizelge 3.8. Tampon kapısı doğruluk tablosu ............................................................ 25 Çizelge 3.9. Özelveya kapısı doğruluk tablosu .......................................................... 26 Çizelge 3.10. Özelveyadeğil kapısı doğruluk tablosu ............................................. 26 Çizelge 4.1. Yarım toplayıcı devresi doğruluk tablosu .......................................... 40 Çizelge 4.2. Yarım çıkarıcı devresi doğruluk tablosu ............................................. 41 Çizelge 4.3. Verilen lojik ifadenin doğruluk tablosu ............................................... 43
ix
SİMGELER VE KISALTMALAR DİZİNİ API Uygulama programlama arayüzü APK Android uygulama paketi B Yarım çıkarıcı devresi borç biti BDÖ Bilgisayar destekli öğretim Co Yarım toplayıcı devresi elde biti D Yarım çıkarıcı devresi fark biti GSM Cep telefonu iletişim protokolü GPRS Genel paket radyo servisi JDK Java geliştirme kiti S Yarım toplayıcı devresi toplam biti SDK Yazılım geliştirme kiti 3G 3.Nesil kablosuz telefon teknolojisi 4.5G 4.Nesil kablosuz telefon teknolojisi
1
1. GİRİŞ
Eğitim, bireyin sadece okul hayatında değil, yaşamın her alanında oldukça önemli
bir yere sahiptir. Özellikle son dönemlerde teknolojide yaşanan gelişmeler,
bireye eğitim alması açısından pek çok yeni ortam sunmuştur. Bu ortamlardan
biri de yer ve zamandan bağımsız olarak mobil cihazlar ve tablet bilgisayarlarla
sağlanan ortamlardır. Bu teknolojiler gün geçtikçe daha vazgeçilmez bir nitelik
kazanmaktadırlar. Özellikle son yıllarda yaygınlaşan mobil simülasyon
uygulamalarından derslerde faydalanmak suretiyle soyut kavramlar
somutlaştırılarak öğrencilerin derslere karşı ilgisi ve başarısı arttırılabilir. Aynı
zamanda mobil öğrenme yazılımları ile gerçek uygulamalarda yaşanan zorluklar,
kullanıcıların maruz kalacağı tehlikeler azaltılabilir, yer ve zaman kısıtlaması
olmadan ihtiyaç anında öğrenme gerçekleştirilebilir.
Sürekli olarak araştırmalar sonucu yenilenen teknoloji ve bunun sonucu ortaya
çıkan teknoloji ürünleri hayatı kolaylaştıracak biçimde insan yaşamı içinde yerini
almaktadır. Bilgisayar teknolojileri ve buna bağlı olarak gelişen internet
hizmetlerinin kısa sürede nasıl yaygın bir araç olarak ortaya çıktıkları hepimizin
yaşayarak gördüğü bir süreçtir. Hep ‘’daha iyi ve verimli nasıl öğretebiliriz’’
sorusuna cevap almak için yapılan eğitimle ilgili çalışmalarda bilgisayar
teknolojisine bağlı olarak yeni öğretim teknik ve yöntemleri geliştirilmiştir
(Büyükbayraktar, 2006).
Hızla ilerleyen teknoloji, bilim dünyasında büyük gelişmeler sağlarken, bilgiyi ve
bilgiye ulaşmayı küçük cihazlara sığdırmayı başarmıştır. Bu teknolojik
gelişmelere paralel olarak mobil cihazlar, bilgisayarlar ile yapılabilecek birçok
işlemi yapabilecek donanıma ve yazılıma sahip hale gelmiştir. Bu durum dünya
üzerinde mobil cihaz kullanımının muazzam derecede artmasını sağlamıştır
(Sonuç vd., 2013).
Gün geçtikçe android tabanlı akıllı cihazların hayatımızdaki yeri artmaktadır.
Bunların başında akıllı telefonlar ve tablet PC’ler gelmektedir (Şimşek vd., 2013).
Bu cihazların sahip olduğu üstün özellikler kullanılarak gerçekleştirilen, insan
2
hayatını kolaylaştıracak projeler her geçen gün artmaktadır. Bu taşınabilir
sistemler sayesinde günümüzde insanlar, zaman ve mekândan bağımsız olarak
birçok uygulamayı kullanabilmektedirler.
Simülasyon yazılımları sayesinde öğrenciler deneyi bireysel olarak
gerçekleştirebilmektedirler. Simülasyon yazılımlarının özellikle deneysel
çalışmalarda araç-gereçleri tanıma ve kullanabilme hususlarında etkili olduğu
söylenebilir. Okul laboratuvarlarındaki malzeme eksikliği ve sınıf mevcutlarının
fazla olmasından dolayı deneylerin birçoğu gösteri yöntemiyle
gerçekleştirilmektedir. Bu durumda simülasyon yazılımları gösteri yöntemine iyi
bir alternatif olarak karşımıza çıkar. Yüksek maliyetli laboratuvar araç-gereçleri
nedeniyle simülasyon yazılımlarının kullanılması maliyeti düşürecektir
(Özdener, 2005).
Başta Elektrik-Elektronik Teknolojileri olmak üzere, Bilgisayar Teknolojilerinin
de içinde bulunduğu pek çok alanda, lojik mantığının kavratılmaya başlandığı,
sayı sistemleri ve bu sistemlerin birbirine dönüştürülmesi aşamasında,
öğrenciler büyük zorluk çekmektedirler. Daha çok geleneksel yöntemlerle
anlatılan bu derslerde, kavramların soyut kalması en büyük problemdir. Başta
temel kavramları öğrenmede güçlük çeken öğrenciler, daha sonrasında temel
lojik devrelerin kurulması ve ileriki aşamalarda daha da zorlanmaktadırlar.
Öğrencilerin derse karşı ilgi ve tutumunu arttırmak için bu kavramların
somutlaştırılması gerekmektedir (Akkağıt ve Tekin, 2011).
Bu gelişmeler ışığında ülkemizde yapılan birçok çalışma ve proje mevcuttur. Bu
projelerin en büyüğü günümüzde uygulanmakta olan FATİH projesidir. FATİH
projesi öğrencinin tablet kullanarak, eğitim-öğretim ortamına daha aktif
katılımının sağlanmasına yardımcı olmaktadır. Mobil teknolojilere dayalı tablet,
akıllı telefon vb. aygıtların öğrenme amaçlı olarak giderek öğrenme merkezi
haline gelmesi mobil öğrenme uygulamalarının önemini ortaya koymaktadır.
Mobil öğrenme, öğrenene esnek bir çalışma ortamı sunarak zamanın ve mekânın
daha verimli kullanılmasını sağlar. Daha önceden yapılan çalışmalarda mobil
cihazlar farklı alanlarda ve farklı öğrenme faaliyetlerinde aktif olarak
3
kullanılmıştır. Mobil teknolojiler eğitim öğretimi desteklemesi amacıyla dilbilgisi,
yabancı dil eğitimi, matematik, yönetim ve bilgisayar bilimleri gibi alanlarda
kullanılmıştır (Kılıç, 2015).
Ülkemizde son yıllarda birçok alanda simülasyon temelli öğrenme üzerine
geliştirilen mobil uygulamalar ve akademik çalışmalar bulunmaktadır. Literatür
taramalarında Google Play üzerinde Lojik Kapılar ve Lojik devrelerin kullanımı
ile ilgili birkaç android tabanlı mobil uygulamaya rastlanmıştır. Ayrıca bu konuda
yapılmış akademik çalışmalarda bilgisayar destekli simülasyon uygulamalarının
yapıldığı görülmüş, hem Android hem de Windows platformunda çalışabilen
mobil bir simülasyon uygulamasına rastlanmamıştır.
Bu tez çalışmasında ülkemizde Mesleki ve Teknik Eğitimde okutulan
Sayısal/Dijital Elektronik, Temel Elektronik ve Ölçme, Elektronik Sistemler gibi
derslerde öğrencilerin ders esnasında lojik kapılar veya lojik kapılarla
gerçekleştirilen lojik devre deneylerinin simülasyonunu kolayca yapabilmelerini
sağlamak amacıyla Android ve Windows tabanlı mobil cihazlarda çalışan bir
uygulama geliştirilmiştir. Bu derslerde eğitimi her platformda
gerçekleştirebilmek adına, okullarda uygulanmakta olan FATİH Projesi
(Fırsatları Arttırma ve Teknolojiyi İyileştirme Hareketi Projesi) kapsamında
dağıtılan Tablet PC’ler, sahip oldukları akıllı telefonları üzerinde veya programı
Unity’de Windows için derleyerek akıllı tahta ve dokunmatik ekran dizüstü
bilgisayarda da çalışabilen, öğrencilerin ders esnasında ya da istedikleri yer ve
zamanda lojik kapılarla hazırlanan lojik devre deneylerinin simülasyonlarını
yapabilmeleri amacıyla Unity3D editöründe C# dili kullanılarak 2D bir uygulama
hazırlanmıştır. Sadece öğrenciler değil, öğretmenler veya araştırmacılar da bu
taşınabilir cihazlar üzerinde, herhangi bir elektronik laboratuvarına veya
bilgisayara ihtiyaç duymadan istedikleri yerde ve zamanda simülasyon
uygulamalarını yapabileceklerdir.
4
2. KAYNAK ÖZETLERİ
Altıkardeş (2001) tarafından, Marmara Üniversitesi Teknik Bilimler Meslek
Yüksekokulu Dijital Devreler 1 dersinin öğretim programına uygun olarak Lojik
Devreler 1 adı altında, öğrencilerin dersi İnternet üzerinden takip etmelerini
sağlayacak, klasik eğitime yardımcı olarak WEB tabanlı bir eğitim materyali
hazırlanmıştır.
Ekiz vd. (2003) tarafından, Mühendislik Fakülteleri ve Teknik Eğitim Fakülteleri
ile Meslek Yüksek Okulları’nda “Mantık Devreleri”, “Lojik Devreler” veya “Dijital
Elektronik” adı ile okutulan dersin uzaktan, İnternet Destekli Öğretim (İDÖ)
metodu ile verilmesine yönelik olarak içeriğin hazırlanmasındaki kriterler
anlatılmış, ders içeriğinin oluşturulmasına/geliştirilmesine yönelik
araçlar/yöntemler tanıtılmış ve İnternet destekli uzaktan eğitimin
değerlendirmesi yapılmıştır.
Büyükbayraktar (2006) tarafından, anaolog ve dijital elektronik devrelerini
simüle etmek için geliştirilmiş Proteus isimli sanal laboratuvar programının,
öğrencilerin Dijital Elektronik atelyesi Lojik Devreler konusundaki ders
başarılarına olan etkisini belirlemek için bir çalışma yapılmıştır.
Özcan (2008) tarafından, cep bilgisayarları (PDA-Personal Digital Assistant) için
bir mobil öğrenme ortamı tasarımı ve uygulaması gerçekleştirilmiştir. Tasarım
SQL server veri tabanı ve .Net 2005 C# programları kullanılarak
gerçekleştirilmiştir.
Rosilah vd. (2008, 2010) yapmış oldukları çalışmada internet üzerinden
ulaşılabilecek Dijital Lojik Tasarımı dersi için hazırlanmış pratik yeni bir
laboratuvar deneyimi sunmuşlardır. Multimedya platformu kullanarak
tasarlanan DigiLAB isimli sanal laboratuvar ile Bilişim Teknolojisi Bölümü’ndeki
öğrencilerin lojik devre davranışını anlamaları, farklı tekniklerle ve
enstrümanlarla devre kartlarını tasarlamaları amaçlanmıştır.
5
Keskin (2010) tarafından yapılan çalışmada mobil öğrenme uygulamalarında
kullanılan mobil öğrenme teknolojileri ve araçları incelenmiş, aynı zamanda
farklı amaçlar için hazırlanmış, değişik platformlarda hizmet veren, ileri düzey
mobil öğrenme uygulamaları, kullanılan teknolojiler ve araçlar bakımından
değerlendirilmiştir.
Çakır (2011) tarafından, Temel Bilgi Teknolojisi dersi için mobil yazılım
geliştirilmiştir. Bu mobil yazılım öğrenciler tarafından kullanılmış ve yazılıma
ilişkin öğrenci görüşleri belirlenmeye çalışılmıştır.
Cupic (2011) yapmış olduğu çalışmada Sayısal Mantık öğretme ve öğrenme için
web teknoloji temelli bütünleşmiş bir platform geliştirmiştir. Bu platform
öğretmenlere, öğrenme ve değerlendirme materyallerini hazırlarken ve
öğrencilerin öğrenme durumunu takip ederken yardımcı olmaktadır.
Akkağıt ve Tekin (2011) tarafından yapılan çalışmada Labview yazılımı
kullanılarak lojik kapılar için bir eğitim aracı geliştirilmiştir. Elektrik-Elektronik
ve Bilgisayar Teknolojileri’nin içinde bulunduğu pek çok alanda, lojik elemanları
ve devreleri tanıtan ve bu elemanlarla lojik tasarımlar yapabilmeyi amaçlayan bu
derslerde, malzeme veya laboratuar imkânlarının kısıtlı olması nedeniyle
kavramlar soyut kalmaktadır. Bu eğitim aracı ile konular somutlaştırılmış, görsel
ara yüzler hazırlanmış ve öğrenciler ile etkileşim sağlanmıştır. Örnek uygulama
olarak Ve (And), Veya (Or), Değil (Not) kapıları seçilmiştir.
Muştu (2012) tarafından, eğitimde teknolojik olanaklardan faydalanarak
öğrenci-eğitimci etkileşiminin ve verimliliğinin arttırılması yönünde çalışmalar
yapılmıştır. Öğrenci ve eğitimcilerin, cep telefonları ve İnternet olanakları
kullanarak, interaktif olarak hızlı ve verimli bir biçimde iletişim kurabilmeleri
için bir sistem tasarlanmış ve uygulama ortamı geliştirilmiştir.
Bal (2012) tarafından yapılan çalışmada LabVIEW 2010 Student Edition
programı kullanılarak, Elektrik-Elektronik Mühendisliği, Bilgisayar Mühendisliği
ve Bilgisayar Bilimleri bölümleri öğrencilerinin, Dijital Lojik Tasarımı dersine ait
6
uygulamalarda kullanabilecekleri Dijital Lojik isimli bir araç kutusu
tasarlanmıştır.
Çevik ve Koçer (2012) yaptıkları çalışmada yabancı dil öğreniminde önemli bir
etken olan kelime ezberleme veya öğrenmeye yönelik yardımcı bir mobil yazılım
gerçekleştirmişlerdir. Bu yazılım, Android işletim sistemi platformunda
çalışabilecek şekilde Java programlama dili ile gerçekleştirilmiştir.
Tülü (2012) yaptığı çalışmada öğrencinin ve akademik personelin ihtiyaçlarını
göz önüne alarak objective c dili ile IPhone ‘a uygulama geliştirmiştir.
Sonuç vd. (2013) yaptıkları çalışmada Karabük Üniversitesi'ne yönelik Android
cihazlarda kullanılmak üzere bir bilgi sistemi hazırlamışlardır. Uygulama sadece
Karabük Üniversitesi öğrencileri veya personeline yönelik değil, Karabük
Üniversitesi hakkında bilgi sahibi olmak isteyen ya da üniversite ile ilgili
gelişmeleri takip etmek isteyen Android kullanıcılarına da hizmet verecek şekilde
geliştirilmiştir.
Demir (2014), çalışmasında Bilgisayar ve Öğretim Teknolojileri Öğretmenliği
Anabilim Dalı’nda okutulan Grafik ve Animasyon dersindeki mobil öğrenme
uygulamalarının, öğrencilerin akademik başarılarına ve mobil öğrenmeye
yönelik tutumlarına etkisini araştırmıştır.
Yechshzhanova (2014) tarafından BDÖ ve Mobil Öğrenme için geometri dersinin
içeriği geliştirilmiştir. İçeriğin geliştirilmesinde 3DS MAX ve UNİTY3D yazılımları
kullanılmıştır. Üç boyutlu modeller 3DS Max programında tasarlanıp öğrencilerin
bu modelleri daha iyi inceleyebilmesi için Unity3D programına aktarılmıştır. Bu
çalışmada ayrıca, BDÖ için geliştirilen bu içeriğin öğrencilerin akademik
başarısını nasıl etkilediği de belirlenmeye çalışılmıştır.
İğci (2014), çalışmasında MySQL veritabanından okunan veriyi RSS yayınına
dönüştüren bir php yazılımı ile bu veriye RSS aracılığıyla erişip, ayrıştırarak
anlamlı veriye dönüştüren ve kullanıcıya sunan mobil bir Android uygulaması
7
geliştirmiştir. Geliştirilen uygulama, Ege Üniversitesi mezunlarının ve mezun
bilgilerinin görüntülenebildiği; fakülte, bölüm ve yıl bazlı çalışan bir uygulamadır.
Çınar (2014), çalışmasında Android mobil cihazı ve evrensel seri veriyolu (USB)
bağlantılı parmak izi okuyucusu kullanarak parmak izi tanıma ve kimlik
doğrulama sistemi geliştirmiştir.
Dehmenoğlu (2015), çalışmasında Mesleki ve Teknik Anadolu Lisesi Bilişim
Teknolojileri Alanı Programlama Temelleri Dersinin mobil öğrenme ile
desteklenmesini sağlayacak Android tabanlı Kod Her Yerde isimli bir mobil
uygulama geliştirmiştir. Ayrıca uygulamayı kullanan ve kullanmayan
öğrencilerin akademik başarıları arasındaki farklar ölçülmeye çalışılmıştır.
Kh’tour (2015) tarafından yapılan çalışmada android tabanlı hastane uygulaması
geliştirilmiştir. Android uygulamasını geliştirmek için Java, veritabanı yönetimi
için mysql, veritabanı ve Android uygulaması arasında haberleşme için php
kullanılmıştır.
Erşahin (2015) tarafından yapılan çalışmada kablosuz teknoloji ile uzaktan
kontrol edilebilen, üzerinde yerleşik bir kamera taşıyan bir mobil robot
tasarlanmıştır. Android tabanlı tablet bilgisayarlar (kontrolör) ile kablosuz
olarak mobil robot kontrol edilebilmektedir. Kablosuz kontrol için Android
arayüz programı tasarlanmıştır.
Dalmaz (2015) tarafından yapılan çalışmada, öncelikli olarak web ortamındaki
yoğun bilgi kirliliği içerisinden kullanıcının ihtiyaç duyduğu anlamlı verilere
ulaşımın Android cihazlarla nasıl daha hızlı ve güvenilir bir şekilde
yapılabileceğinin analizleri yapılmış, geliştirilecek uygulamada bulunacak
özellikler tespit edilmiş, sonrasında uygulamanın geliştirme ortamı Eclips’de
hazır hale getirilip kodlaması yapılmıştır.
Doğan (2017) tarafından çok hücreli canlı embriyolarının anne karnında ya da
yumurta içinde nasıl olgunlaştığı araştırılmış ve bu mekanizmanın basit bir
8
simülasyonu yapılarak yöntemin 3 boyutlu özgün tasarımlar üretmedeki başarısı
incelenmiştir. Uygulama, Unity3D oyun motoru ile geliştirilmiştir.
Dube (2017) tarafından yapılan çalışmada, sanal gerçeklik tabanlı arayüz,
artırılmış gerçeklik tabanlı arayüz ve dokunmaya dayalı mobil uygulama Android
platformunda tanımlanmıştır. Arabirimleri geliştirmek için Unity3D programı
kullanılmıştır. Bu çalışmada, bir koreografi üreteci için farklı etkileşim
tekniklerinin kullanıcı deneyimi üzerindeki etkileri araştırılmıştır. Koreografide,
dokunmatik ekran ve jestler gibi doğrudan girdi yöntemleri olan ve fare, klavye
gibi dolaylı yöntemler gibi farklı interaktif teknikler de değerlendirilmiştir.
Ayrıca koreografi araçları için sanal gerçeklik ve artırılmış gerçek arayüz olarak
değerlendirilmiştir. Araştırma, aynı uygulamanın farklı etkileşim yöntemlerinin
kullanıcı deneyimini nasıl etkilediğini araştırmaya katkıda bulunmaktadır.
Yaşar (2017) çalışmasında, anne ve anne adayları için bir android uygulama
geliştirmiştir. Hem annelerin 0-2 yaş arası çocukları için gereken aşı bilgilerine
ulaşabilecekleri hem de anne adaylarının hafta hafta gebelik bilgilerini takip
edebilecekleri bir uygulama tasarlanmıştır. Böylelikle hem doktor taraflı hem de
anne ve anne adayları açısından bir paylaşım platformu ve iletişim kanalı
oluşturulmuştur.
Demiray (2017) tarafından yapılan çalışmada, dalış kazalarında kazazedelerin,
mümkün olan en kısa sürede tedavi merkezlerine ulaşarak tedavinin en kısa
zamanda başlaması ve dalış kazalarına karşı bilinç sağlamak amacıyla bir
Android uygulama geliştirilmiş, etki alanları ve faydaları ifade edilmiştir.
Kalınkara (2017) çalışmasında mobil teknolojilerin öğrenci başarısı üzerine
etkisini araştırmıştır. Bu amaç doğrultusunda, Bilgisayar Donanımı ve Elektronik
dersi konularını kapsayan Android işletim sistemi platformunda çalışan bir
uygulama hazırlanmıştır. Araştırma sonuçlarına göre deney grubunun, kontrol
grubuna göre akademik olarak anlamlı derecede başarılı olduğu görülmüştür.
9
3. MATERYAL VE METOT
Bireyin ihtiyaç duyduğu yerde ve zamanda öğrenme sürecini başlatıp, istediği
zamanda da sürece müdahale edebilmesi önemli bir ayrıcalıktır. Mobil öğrenme
diğer öğrenme aktiviteleri ile karşılaştırıldığında önemli farklılıklar
görülmektedir. Bunlar arasında en belirgin olanı, gerçek anlamda zaman ve yer
açısından kullananlara özgürlük sunmasıdır (Çakır, 2011).
Günümüzde kullanılan cep telefonları, Gprs, 3G, 4.5G teknolojileri sayesinde
insanlar artık istedikleri yer ve zamanda, ihtiyaç duydukları bilgilere cep
telefonları üzerinden internete girerek ulaşmak suretiyle mobil öğrenmeyi
gerçekleştirebilmektedirler.
Mobil öğrenme ortamları bireyin ihtiyaçlarına istediği zamanda yanıt verebilir,
görsel ve işitsel hafızaya aynı anda hitap edebilirler. Mobil cihazlara yüklenen
öğretici oyun ve uygulamalar sayesinde öğrenci konuyu iyice pekiştirmiş olur ve
öğrenme gerçekleşir.
Mobil öğrenmeyi diğer öğrenme yöntemlerinden ayıran özellikler vardır. Mobil
teknolojilerle zenginleştirilen mobil öğrenme, öğrencinin hem fiziksel hem de
dijital dünya ile eş zamanlı olarak etkileşimde bulunmasını sağlar. Bu da sınıf
dışında teknoloji ile desteklenmiş yeni öğrenme metotlarının oluşmasına olanak
sağlar (Facer vd., 2004).
Ülkemizde Mesleki ve Teknik Eğitimde okutulan Sayısal/Dijital Elektronik, Temel
Elektronik ve Ölçme, Elektronik Sistemler gibi derslerde öğrencilerin ders
esnasında lojik devre deneylerinin simülasyonunu yapabilmelerini sağlamak
amacıyla mobil uygulama gerçekleştirilmiştir. Bu mobil uygulama sayesinde,
okullarda uygulanmakta olan FATİH Projesi (Fırsatları Arttırma ve Teknolojiyi
İyileştirme Hareketi Projesi) kapsamında dağıtılan Tablet PC’ler, kendi akıllı
telefonları veya akıllı tahta üzerinde öğrenciler ders sırasında ya da istedikleri
yer ve zamanda lojik devre deneylerinin uygulamalarını yapabileceklerdir.
10
Mobil öğrenme kapsamında, Android ve Windows tabanlı mobil cihazlar için
geliştirilen simülasyon uygulaması C# ile kodlanarak Unity3D programında
hazırlanmıştır. Bu bölümde Android işletim sisitemi ile uygulamanın geliştirildiği
Unity3D oyun motoru, kullanılan C# programlama dili ve Lojik kapılar hakkında
bilgiler verilmiştir.
3.1. Android İşletim Sistemi
Android, kelime anlamı olarak insan şeklinde robot anlamına gelen İngilizce bir
kelimedir. Terim anlamı olarak ise önceleri sadece mobil cihazlarda kullanılması
için düşünülerek geliştirilen bir mobil işletim sisteminin adıdır (Zeytin, 2013).
Android, Google, Open Handset Alliance Birliği ve özgür yazılım toplulukları
tarafından 2007 yılında geliştirilen Linux çekirdeğini kullanan açık kaynak kodlu
mobil bir işletim sistemidir. Geliştirilen uygulamaların uzantısı “.apk”dır.
Temelde dokunmatik ekranlar için tasarlanan Android, düşük maliyetli ve
kişiselleştirilebilen işletim sistemi arayan yüksek teknolojiye sahip cihazlar
arasında da popüler hale gelmiştir. Başlarda bu sadece tablet ve akıllı telefonları
kapsamış olsa da, günümüzde televizyonlar, arabalar, oyun konsolları, dijital
kameralar ve kol saatleri gibi cihazlarda da kullanılmaya başlanmıştır (Kh’tour,
2015).
Android işletim sisteminin kaynak kodları iki farklı lisans kullanmaktadır.
Kullandığı Linux çekirdeği GPL, diğer dış bileşenler ise Apache Lisansı ile
lisanslanmıştır. Bu değiştirilebilir yapı, yazılımcıları Android'e katkıda
bulunmaları için teşvik ettiğinden sürekli gelişmesini ve yeni özelliklerin
eklenmesini sağlamaktadır (Kh’tour, 2015).
Günümüzde mobil cihazlarda kullanılabilmesi için birçok uygulama
geliştirilmektedir. Bu aşamada uygulamaların geliştirileceği işletim sistemlerinin
özelliklerinin incelenmesi gerekir. İşletim sistemlerinin pazar payı, uygulama
geliştirme dili, XML editörü, ürünlerin pazarlanması, flash gibi özelliklerinin
incelenmesi çok önemlidir (Karaman, 2008).
11
Çizelge 3.1’de gösterildiği gibi bu özellikler işletim sistemi bazında karşılaştırmalı
olarak verilmiştir. Tüm mobil işletim sistemlerinde yapılan çalışmalar,
geliştirilen uygulamalar, uygulama geliştirme süreçleri ve bunun gibi birçok
özellik karşılaştırıldığında, Android işletim sisteminin ve bu işletim sistemine
uygun olarak mobil uygulama geliştirmenin avantajlı olduğu görülmektedir.
Android, açık kaynak kodlu olması nedeni ile birçok yazılımcı tarafından öncelikli
olarak tercih edilmekte ve esneklik sağlamaktadır. Flash desteği sağlıyor olması
ve yazılım geliştirme araçlarının ücretsiz olması en önemli tercih edilme
sebeplerindendir (Karaman, 2008).
Çizelge 3.1. Mobil işletim sistemleri (Karaman, 2008)
İşletim Sistemi
Firma Açık Kaynak Kodlu Mu?
Flash Desteği
Var Mı?
SDK (Software
Development Kit)
Programlama Dili
iOS Apple Hayır Hayır Ücretli Objective-C Android Google Evet Evet Ücretsiz Java
Blackberry RIM Hayır Evet Ücretsiz C#, Java Windows
Phone Microsoft Hayır Evet Ücretsiz C#
Symbian Nokia Hayır Evet Ücretsiz Java, C++ Bada Samsung Hayır Evet Ücretsiz Java
WebOS HP Hayır (Bazı
kısımlar açık
kaynak kodlu)
Evet Ücretsiz Java
3.1.1. Android işletim sistemi sürümleri
Android ilk çıktığı sürüm olan Android 1.0 Astro ile beraber bu güne kadar sürekli
güncellendi ve son olarak 2017 yılında çıkan Android 8.0 Oreo ile kullanılmaya
başlandı. Çizelge 3.2’de Şubat 2009’da yayınlanan ilk Android sürümünden bu
güne yapılan tüm Android sürümleri ve çıkış tarihleri görülmektedir (MobilShift,
2014). Bunlar içerisinde kullanıcılar tarafından en çok tercih edilen ve kullanılan
Nougat sürümü olmuştur.
12
Çizelge 3.2. Tüm android sürümleri listesi (MobilShift, 2014)
1.1 Astro 9 Şubat 2009
1.2 Bender 16 Mart 2009
1.5 Cupcake 30 Nisan 2009
1.6 Donut 15 Eylül 2009
2.0
2.1 Eclair
26 Ekim 2009
Ocak 2010
2.2 Froyo 20 Mayıs 2010
2.3 Gingerbread 6 Aralık 2010
3.0
3.1
3.2
Honeycomb
Şubat 2011
Temmuz 2011
Kasım 2011
4.0 Ice Cream Sandwich 19 Ekim 2011
4.1
4.2
4.3
Jelly Bean
9 Temmuz 2012
29 Ekim 2012
24 Temmuz 2013
5.0
5.0.1
5.0.2
5.1.0
5.1.1
Lollipop
12 Kasım 2014
2 Aralık 2014
19 Aralık 2014
10 Mart 2015
6.0 Marshmallow 5 Ekim 2015
7.0 Nougat 22 Ağustos 2016
8.0 Oreo 21 Ağustos 2017
3.1.2. Android mimarisi
Android işletim sistemi Şekil 3.1’de görüldüğü gibi Linux Kernel ve Dalvik sanal
makinesi üstünde çalışır. Bu işletim sisteminin parçaları çekirdek (kernel), sistem
kütüphaneleri, uygulama geliştirme çatıları (frameworks) ve yerleşik temel
uygulamalardan oluşur (Turkcell, 2015).
13
Şekil 3.1. Android mimarisi (Turkcell, 2015)
3.1.2.1. Temel yapı (Linux çekirdeği)
Android, Linux çekirdeğini (kernel) kullanmaktadır. Linux çekirdeğine Android
için eklenen kod parçacıkları ve kütüphaneler Genel Kamu Lisansı'na sahipken,
diğer bileşenler üretici firmalarına kendi kapalı ROM'larını oluşturmalarına izin
vermekte ama yine özgür olarak Apache Lisansı ile dağıtılmaktadır (Turkcell,
2015).
Linux çekirdeğinin doğrudan kaynak sağladığı yapılar; security (güvenlik),
memory ve process (hafıza ve süreç) kontrolü, dosyalama ve bağlantı için I/O
işlemleri ve cihaz sürücüleridir. Çekirdekte Android için özelleştirilmiş başlıca
alanlar ise güç kontrolü, paylaşılan hafıza, low memory killer ve süreçler arası
iletişim içindir (Turkcell, 2015).
14
3.1.2.2. Kütüphaneler (Libraries)
Mimarinin kütüphaneler kısmında, C ile yazılmış sistem kütüphaneleri, internet
tarayıcısı (browser) motorlarının çalışması için Webkit, görüntüleme kontrolünü
yapan Surface Manager, grafik işlemleri için OpenGL, ses ve video işlemleri için
gereken Media Framework, veri yapıları kontrolü ve düzenlenmesi için SQLite
gibi yapılar bulunmaktadır (Turkcell, 2015).
3.1.2.3. Android runtime
Android Runtime Linux çekirdeğindeki kütüphanelerin Java ile birleştiği
bölümdür. Temel Java kütüphaneleri ve Dalvik Sanal (virtual) Makinesi olarak iki
önemli bileşeni vardır. Uygulamalar Dalvik Sanal Makinesi tarafından
çalıştırılmaktadır. Temel çalışma mekanizmasını anlamak Android projelerinin
yaşam döngüsünü anlamak açısından önemlidir. Java ile yazılan uygulamalar
alınır, Java kodları derlenerek bytecode dosyalarına çevrilir. Bu dosyalar dex
dosyasına çevrilerek Dalvik Sanal Makinesi'nin çalıştıracağı şekle dönüşür.
Dalvik ortamı düşük işlemci gücü, az RAM ve sınırlı batarya koşullarına göre
tasarlanmıştır (Turkcell, 2015).
3.2. Unity3D
Unity3D, Unity Technologies şirketi tarafından geliştirilmiş ücretli bir oyun
motorudur. Oyun motoru en basit anlamda, oyun yapmak için kullanılan
programlara verilen genel isimdir. İçerisinde programlama dilleri kullanılarak
tanımlanan fonksiyonlar yardımıyla az kod yazarak çok iş yaptırmak
hedeflenmektedir.
Unity3D oyun motoru günümüzde en yaygın kullanılan programlardan birisidir.
PC, MAC, Linux, iOS, Android, BlackBerry, Windows Phone, Windows Store, XBOX
360, Play Station 3, Wii platformlarının yanı sıra internet için Flash Player, Unity
Web Player ve Google Native uygulama olmak suretiyle, pek çok alanda oyun
15
geliştirmeyi sağlamaktadır. Bu yönüyle Unity3D, programcıların en çok tercih
ettiği oyun motorudur (Satman, 2015).
Unity3D, JavaScript, C# ve Boo dillerinde kodlama imkânı sunar. Bu işlemi de
çekirdek kurulumu ile birlikte gelen ve kurulum sırasında seçimini kullanıcıya
bırakan MonoDevelop kod editörü ile sağlar. Unity3D oyun motorunun sağladığı
çoklu platform özelliği sayesinde masaüstü ve mobil cihazlar için çok sayıda 3D
ve 2D oyun ve uygulama geliştirilebilmektedir. Örneğin bilgisayar ortamı için
geliştirilen ve .exe formatında çıktı veren bir oyun, biraz müdahale edilerek hem
mobil hem de internet tabanlı bir oyun haline getirilebilir. Bu sebeple Unity Asset
Store üzerinden ücretli veya ücretsiz olarak erişilebilen Unity3D ile yapılmış çok
sayıda 3D ve 2D oyun veya uygulama bulunmaktadır (Satman, 2015).
Unity3D oyun motorunun tercih edilme nedenleri aşağıda listelenmektedir:
Bütün yüksek seviyeli oyun motorlarının sahip olması gereken grafik, fizik
motoru, ses sistemi, ana eklentilerin kullanılması, modellerin ithal olması,
tıklamayla texture’lerin yerleştirilmesi gibi büyük potansiyele sahiptir.
JavaScript, C# ve Boo olmak üzere 3 farklı dil yapısını desteklemektedir.
Unity3D ile yapılan uygulamalar Web Player eklentisi sayesinde hiçbir
kuruluma gerek kalmadan web tarayıcı üzerinden çalışabilir.
Unity3D ile yapılan bir uygulama herhangi bir altyapı değişikliği
gerektirmeden farklı platformlar (PC, Mac, Web, iOS, Android, Windows
Phone) için derlenebilir.
Unity3D, son derece pahalı diğer oyun motorlarının (Unreal Engine,
Havok, vb.) sağladığı gelişmiş shader yazılımı, fizik motoru, animasyon
editörü, occlusion culling gibi özellikleri kullanıcılarına oldukça uygun bir
fiyattan sunar.
Unity’nin diğer oyun motorlarından üstün taraflarından biri de yazılım
geliştirme zamanında programcıya, program kodu yazma imkânı
sağlamasıdır. Diğer oyun motorları grafik ile kodu ayırırken Unity’de
grafik ile kod birlikte çalışmaktadır. Bu çalışma mantığı yazılımcılara
esneklik sağlamakta, oyun yapım süresini kasaltmaktadır
(Yechshzhanova, 2014).
16
Aşağıda Şekil 3.2’de verilen ekran görüntüsünde Unity3D Ana Editör Penceresi
görülmektedir. Editör Penceresi birden fazla bölüme ayrılmıştır ve bunların her
birine Panel denilir.
Şekil 3.2. Unity3D ana editör penceresi
3.2.1. Proje (Project) paneli
Tüm Unity projelerinde Assets klasörü bulunmaktadır. Bu klasörün
içeriğindekiler Şekil 3.3’te görüldüğü üzere Proje panelinde görünür
durumdadırlar. Burada oyunda bulunan her şey depolanır. Örneğin kodlar, 3
boyutlu veya 2 boyutlu modeller, kaplamalar (texture), ses dosyaları (audio file)
ve Prefab’lar gibi. Bu pencereden oyun için scriptler (kodlar), Prefab’lar veya
klasörler oluşturulabilir ve böylece proje dosyaları düzenli bir şekilde tutulabilir.
Prefablar, bir grup GameObject (Oyun Nesnesi) ve Component’in (Bileşen);
sahnede tekrar tekrar kullanılabilmesi için oluşturulan hazır şablonlardır. Bir
Prefab’tan çok sayıda GameObject oluşturulabilir, bu işleme kopyalama
(instancing) denilir (Kula, 2011).
17
Şekil 3.3. Proje paneli görünümü
3.2.2. Hiyerarşi (Hierarchy) paneli
Hiyerarşi panelinde, o an çalışılan sahnede (scene) yer alan tüm GameObject’ler
gösterilir. Bunlar bir nesnenin doğrudan kendisi olabileceği gibi bir Prefab’ın
kopyası (instance) da olabilir. Nesneleri Hiyerarşi panelinde seçip, seçilen
nesnelere ebeveyn (parent) nesne veya çocuk (child) nesne atayabilirsiniz.
Sahneye nesneler eklenince veya silinince, bu işlem aynı zamanda Hiyerarşi
panelinde de gerçekleşir (Kula, 2011). Şekil 3.4’te Hiyerarşi paneli görülmektedir.
Şekil 3.4. Hiyerarşi paneli görünümü
3.2.3. Araç çubuğu (Toolbar)
Araç çubuğunda beş temel fonksiyona erişim sağlanır. Şekil 3.5’te Araç çubuğu
genel görünümü verilmiştir.
18
Şekil 3.5. Araç çubuğu görünümü
Şekil 3.6’da sahnede GameObject’ler üzerinde işlemler (hareket ettirme,
döndürme, boyutunu değiştirme gibi işlemler) yapmak için kullanılan araç
çubuğu üzerindeki Hareket (transform) butonları görülmektedir (Kula, 2011).
Şekil 3.6. Hareket butonları
Şekil 3.7’de Sahnedeki görünümü etkileyen Transform gizmo butonları
görülmektedir.
Şekil 3.7. Transform gizmo butonları
Şekil 3.8’de Game (Oyun) panelinde kullanılan Oynatma, Durdurma, Bir Adım
İleri Sarma (Step) butonları verilmiştir.
Şekil 3.8. Oynatma, durdurma, step butonları
Şekil 3.9’da Sahnede gösterilecek GameObject’leri belirlemeyi sağlayan Layers
(Katmanlar) butonu verilmiştir.
Şekil.3.9. Layers butonu
Şekil 3.10’da Sahnedeki pencerelerin düzenini değiştirmeyi sağlayan Layout
(Pencere Düzeni) butonu görülmektedir.
19
Şekil 3.10. Layout Butonu
3.2.4. Sahne (Scene) paneli
Sahneyi kullanarak kamerayı, karaterleri, yer şekillerini, kısaca tüm
GameObject’leri konumlandırma işlemleri gerçekleştirilebilir. GameObject’leri
bu panel ile konumlandırmak Unity’nin en önemli fonksiyonlarından birisidir. Bu
sayede işlemler oldukça hızlı gerçekleştirilebilir (Kula, 2011). Şekil 3.11’de Sahne
panelinin görünümü verilmiştir.
Şekil 3.11. Sahne paneli
3.2.5. Game (Oyun) paneli
Sahnedeki kameraların gözüyle oyun veya uygulamayı test etmeyi sağlar.
Oynatma butonu çalıştırıldığında bu panelde uygulama test edilebilir. Sahnede en
az bir kamera bulunması gereklidir (Kula, 2011).
3.2.6. Inspector paneli
Unity’de tasarlanan oyunlar ya da uygulamalar, çeşitli 3 boyutlu veya 2 boyutlu
şekillere (mesh), scriptlere (kod), seslere veya ışıklar (light) gibi değişik grafiksel
20
elementlere sahip olan birçok GameObject’ten oluşabilir. Inspector paneli, seçili
olan GameObject’in tüm Component’lerini (parça) ve bu parçaların özelliklerini
gösterir (Kula, 2011). Şekil 3.12’de Kameranın özelliklerini gösteren Inspector
paneli görüntüsü verilmiştir.
Şekil 3.12. Inspector paneli
3.3. C# Programlama Dili
Unity3D programı JavaScript, C# ve Boo olmak üzere 3 tane programlama dilini
desteklemektedir. Bu 3 dilde de kod yapısı nesne yönelimli programlama
şeklindedir. Unity3D oyun motorunda C# dilinin kod yapısı Şekil 3.13’de
gösterilmektedir (Satman, 2015).
21
Şekil 3.13. Unity3D programında C# kod yapısı
3.4. Uygulama İçin Lojik Kapıların Tasarımı
Gerçekleştirilen mobil programda kullanılan lojik kapılar ve diğer lojik giriş-çıkış
birimleri Adobe Photoshop ve Fireworks programlarında düzenlenmiştir.
Simülasyon programı ise Unity3D Oyun Motorunda C# programlama dili
kullanılarak hazırlanmıştır.
3.4.1. Lojik kapılar
Lojik devrelerin en temel elemanı lojik kapılardır. Lojik değişkenlerin değerlerini
(gerilimlerini) giriş olarak kullanan, girişten aldığı değerler üzerinde işlemler
yaparak lojik eşitliğin değerine uygun değerler (gerilim) üreten elektronik devre,
‘lojik kapı’ olarak adlandırılır. Kapılar, basit bir sayısal elektronik devreden
bilgisayara kadar cihazların temel yapı taşıdır. Yaygın olarak kullanılan kapılar:
VEYA (OR), VE (AND), VEYADEĞİL (NOR), VEDEĞİL (NAND), DEĞİL (NOT)
kapılarıdır ve bu kapılar ‘temel lojik kapılar’ olarak isimlendirilirler. Lojik kapılar
kullanılarak oluşturulan devreler de, ‘lojik devreler’ olarak adlandırılırlar (Ekiz,
2005).
22
3.4.1.1. Ve (And) kapısı
VE kapısının bir çıkışı, iki veya daha fazla da girişi bulunmaktadır. Geliştirilen
uygulamada iki girişli VE kapısı kullanılmıştır. ‘VE’ kapısının gerçekleştirdiği
işlem çarpma işlemidir ve çıkış Q=A*B şeklinde tanımlanır. Şekil 3.14’de sembolü
verilen VE kapısının, Çizelge 3.3’de de doğruluk tablosu verilmiştir.
Şekil 3.14. Ve kapısı sembolü
Çizelge 3.3. Ve kapısı doğruluk tablosu
A B Q (Çıkış) 0 0 0 0 1 0 1 0 0 1 1 1
3.4.1.2. Veya (Or) kapısı
VEYA kapısının bir çıkışı, iki veya daha fazla da girişi bulunmaktadır. Geliştirilen
uygulamada iki girişli VEYA kapısı kullanılmıştır. ‘VEYA’ kapısının
gerçekleştirdiği işlem toplama işlemidir ve çıkış Q=A+B şeklinde tanımlanır. Şekil
3.15’de sembolü verilen VEYA kapısının, Çizelge 3.4’te de doğruluk tablosu
verilmiştir.
Şekil 3.15. Veya kapısı sembolü
23
Çizelge 3.4. Veya kapısı doğruluk tablosu
A B Q 0 0 0 0 1 1 1 0 1 1 1 1
3.4.1.3. Vedeğil (Nand) kapısı
VEDEĞİL kapısının bir çıkışı, iki veya daha fazla da girişi bulunmaktadır.
Geliştirilen uygulamada iki girişli VEDEĞİL kapısı kullanılmıştır. ‘VE’ ile ‘DEĞİL’
kapılarının birleşmesinden oluşan VEDEĞİL kapısının gerçekleştirdiği işlem VE
kapısının tam tersi olarak belirtilebilir. Çıkışı, Q = A.B şeklindedir ve ‘A ve B’nin
değili’ şeklinde okunur. Şekil 3.16’da sembolü verilen VEDEĞİL kapısının, Çizelge
3.5’te de doğruluk tablosu verilmiştir.
Şekil 3.16. Vedeğil kapısı sembolü
Çizelge 3.5. Vedeğil kapısı doğruluk tablosu
A B Q 0 0 1 0 1 1 1 0 1 1 1 0
3.4.1.4. Veyadeğil (Nor) kapısı
VEYADEĞİL kapısının bir çıkışı, iki veya daha fazla da girişi bulunmaktadır.
Geliştirilen uygulamada iki girişli VEYADEĞİL kapısı kullanılmıştır. ‘VEYA’ ile
‘DEĞİL’ kapılarının birleşmesinden oluşan VEYADEĞİL kapısının gerçekleştirdiği
işlem VEYA kapısının tam tersi olarak yazılabilir. Çıkışı, Q = A+B şeklindedir ve ‘A
24
veya B’nin değili’ şeklinde okunur. Şekil 3.17’de sembolü verilen VEYADEĞİL
kapısının, Çizelge 3.6’da doğruluk tablosu verilmiştir.
Şekil 3.17. Veyadeğil kapısı sembolü
Çizelge 3.6. Veyadeğil kapısı doğruluk tablosu
A B Q 0 0 1 0 1 0 1 0 0 1 1 0
3.4.1.5. Değil (Not) kapısı
DEĞİL kapısının bir girişi, bir de çıkışı bulunmaktadır. Çıkışı, Q = A şeklindedir ve
‘A’nın değili veya tersi’ şeklinde okunur. Şekil 3.18’de DEĞİL kapısının sembolü,
Çizelge 3.7’de ise doğruluk tablosu verilmiştir.
Şekil 3.18. Değil kapısı sembolü
Çizelge 3.7. Değil kapısı doğruluk tablosu
A Q
0 1
1 0
25
3.4.1.6. Tampon (Buffer) kapısı
BUFFER kapısının bir çıkışı, bir de girişi bulunmaktadır. Çıkışı, Q = A şeklindedir.
Çizelge 3.8’de verilen doğruluk tablosunda görüldüğü gibi giriş değişkeni ‘1’ veya
‘0’ değerlerinden birini alabilir ve çıkış her zaman girişle aynı değeri alır. Şekil
3.19’da BUFFER kapısının sembolü görülmektedir.
Şekil 3.19. Tampon kapısı sembolü
Çizelge 3.8. Tampon kapısı doğruluk tablosu
A Q 0 0
1 1
3.4.1.7. Özelveya (Xor) kapısı
Geliştirilen uygulamada, ÖZELVEYA kapısının Şekil 3.20’de verilen sembolünde
görüldüğü üzere bir çıkışı, iki adet girişi bulunmaktadır. ÖZELVEYA kapısının
çıkış işlemi, Q=A.B'+A'.B veya Q=A⨁B şeklinde yazılır. Çizelge 3.9’da verilen
doğruluk tablosunda görüldüğü gibi giriş değişkenleri birbirinin aynısı
olduğunda çıkış ‘0’, giriş değişkenleri birbirinden farklı olduğunda ise çıkış ‘1’
değerini alır.
Şekil 3.20. Özelveya kapısı sembolü
26
Çizelge 3.9. Özelveya kapısı doğruluk tablosu
A B Q
0 0 0
0 1 1
1 0 1
1 1 0
3.4.1.8. Özelveyadeğil (Xnor) kapısı
Geliştirilen uygulamada, ÖZELVEYADEĞİL kapısının Şekil 3.21’de verilen
sembolünde görüldüğü gibi iki giriş ve bir çıkışa sahiptir. ÖZELVEYADEĞİL
kapısının çıkış işlemi, Q=A.B+ A'.B' veya Q=A⨂B şeklinde yazılır. Çizelge 3.10’da
verilen doğruluk tablosunda görüldüğü gibi giriş değişkenlerinin değerleri aynı
ise çıkış ‘1’, giriş değişkenlerinin değerleri birbirinden farklı olduğunda ise çıkış
‘0’ değerini alır.
Şekil 3.21. Özelveyadeğil kapısı sembolü
Çizelge 3.10. Özelveyadeğil kapısı doğruluk tablosu
A B Q
0 0 1
0 1 0
1 0 0
1 1 1
27
4. ANDROİD TABANLI MOBİL CİHAZLAR ÜZERİNDE LOJİK DEVRE
DENEYLERİNİN SİMÜLASYONU
Çalışmada, Android ve Windows tabanlı mobil cihazlarda lojik devre
deneylerinin simülasyonlarının gerçekleştirilebileceği bir mobil uygulama
geliştirilmiştir.
Unity3D Oyun Motorunda Android’e uygulama geliştirmek için, bilgisayara ilk
olarak kendi sitesinden indirilen Java JDK (Java Development Kit) kurulmalıdır.
Sonrasında yine kendi sitesinden indirilen Android SDK Manager ile Android SDK
(Software Development Kit) kurulur. Android SDK kurulurken Android 2.2’den
büyük en az bir sürüm seçilmeli ve gereken diğer seçimler yapılarak kurulum
yapılmalıdır. Daha sonra Unity3D programı da kendi sitesinden son sürümünün
ücretsiz olanı indirilerek kurulumu yapılır. Unity3D kurulumu yapılırken C#
kodlarının yazılacağı Visual Studio 2015 programı da Unity ile birlikte
kurulmaktadır. Ayrıca Android için yapılan uygulamaların bilgisayarda
çalıştırılmasına olanak sağlayan BlueStacks programı da indirilerek kurulur.
Uygulamanın çalışmasını Oynatma butonuna tıklayarak Unity Oyun Panelinde
görebildiğimiz gibi test etmek için ayrıca BlueStacks programı da kullanılmıştır.
4.1. Gerçekleştirilen Simülasyon Yazılımı
Meslek Lisesi öğrencilerinin derslerinde öğrendikleri lojik kapılar veya lojik
devreleri, bilgisayar veya gerçek bir elektronik devre hazırlamaya gerek
kalmadan akıllı telefon veya tabletlerini kullanarak anında sonuçları
görebilmeleri ve konuyu pekiştirebilmelerini sağlamak amacıyla Unity3D
programında, 2D bir mobil uygulama geliştirilmiştir.
Mobil uygulama, Giriş Ekranı ve Simülasyon Ekranı olmak üzere iki bölümden
oluşmaktadır. Giriş ekranında Yeni, Yardım ve Çıkış Butonları bulunmaktadır.
Şekil 4.1’de uygulamanın giriş ekranı verilmiştir.
28
Şekil 4.1. Giriş ekranı görünümü
Ekrandaki Çıkış butonu programdan tamamen çıkmak için kullanılmaktadır. Yeni
butonuna dokunulduğunda, yeni bir devre uygulaması başlatmak için
Simülasyon ekranı açılır. Şekil 4.2’de devre uygulamalarının gerçekleştirildiği
Simülasyon ekranı görülmektedir. Programın çalışması sırasında kullanımda
kolaylık olması açısından küçük bir kodla ekranın yatay olarak kalması
sağlanmıştır.
Şekil 4.2. Simülasyon ekranı görünümü
29
Yardım butonuna dokunulduğunda programın çalışması hakkında bilgi veren
Yardım ekranı açılır. Şekil 4.3’te görülen Yardım Ekranında, devre elemanlarının
sahneye nasıl ekleneceği veya silineceği, devrelerin nasıl oluşturulacağı hakkında
bilgiler verilmiştir. Ekranın altında bulunan buton ise Giriş Ekranına geri
dönmeyi sağlamaktadır.
Şekil 4.3. Yardım ekranı görünümü
4.1.1. Simülasyon ekranı
Simülasyon Ekranı, uygulamaların gerçekleştirileceği sahnenin ve gerekli devre
elemanlarının seçileceği menünün bulunduğu ekrandır. Menüdeki butonlara
dokunarak istenilen devre elemanları açılan listeden seçilerek sahneye
eklenebilir. Menüdeki butonlar ile sırasıyla Lojik Kapı Ekle, Lojik Giriş Ekle, Çıkış
(lamba veya led) Ekle, SİL, Ana Menüye (Giriş Ekranı) Dön ve ÇIKIŞ işlemleri
gerçekleştirilebilir. Şekil 4.4’te menünün görünümü verilmiştir.
Şekil 4.4. Simülasyon ekranı menü görünümü
30
4.1.1.1. Lojik kapı ekle butonu
Menüdeki ilk seçenek olan Lojik Kapı Ekle Butonuna dokunulduğunda sahneye
eklemek için seçilebilecek kapıların listesi açılmaktadır. Listeden istenilen kapıya
dokunulduğunda sahnenin ortasına kapı eklenecektir. Bu şekilde devre
oluştururken kullanılacak tüm kapılar listeden sırayla dokunularak sahneye
eklenir. Şekil 4.5’te butona dokunulduğunda açılan liste ve sahneye eklenebilen
kapılar görülmektedir.
Şekil 4.5. Lojik kapı ekle butonu
Açılan listeden ‘AND KAPISI’ seçeneğine dokunulduğunda Şekil 4.6’da görüldüğü
gbi sahneye AND Kapısı eklenecektir. Kapı sahneye eklendikten sonra sürükle
bırak yöntemiyle dokunarak sahnede istenilen konuma sürüklenebilir. Devreyi
oluştururken kullanılacak tüm kapıları eklemek için aynı işlemler tekrar edilir.
31
Şekil 4.6. Sahneye and kapısını ekleme
4.1.1.2. Lojik giriş (Yük) ekle butonu Menüdeki ikinci seçenek olan Lojik Giriş Ekle Butonuna dokunulduğunda
sahneye eklemek için seçilebilecek girişlerin listesi açılmaktadır. Lojik giriş
olarak programda Lojik 1, Lojik 0 ve Switch olmak üzere üç seçenek
kullanılmıştır. Listeden istenilen girişe dokunulduğunda sahneye eklenir. Şekil
4.7’de butona dokunulduğunda açılan liste görülmektedir.
Şekil 4.7. Lojik giriş ekle butonu
32
4.1.1.3. Çıkış (lamba veya led) ekle butonu Menüdeki üçüncü seçenek olan Çıkış Ekle Butonuna dokunulduğunda sahneye
eklenebilecek çıkışların (lamba ve led) listesi açılmaktadır. Devrenin girişlerine
verilen değerlere göre çıkışlarına gelen Lojik 1 veya 0’a göre lamba veya ledin
yanıp sönmesi sağlanarak devrenin çalışması görülmektedir. Listeden kullanmak
istenilen çıkış birimine dokunulduğunda sahneye eklenir. Şekil 4.8’de butona
dokunulduğunda açılan liste görülmektedir.
Şekil 4.8. Çıkış ekle butonu
4.1.1.4. Sil butonu
Menüdeki Sil butonu devre elemanları silinmek istenildiği zaman kullanılır. İlk
olarak Sil butonuna dokunulur. Sil butonunun ismi ‘SİL AKTİF’ olarak değiştiği
zaman sahnede silinmek istenen devre elemanına bir kez dokunulması ile eleman
sahneden silinir. Başka silinmek istenen elemanlar varsa hespi aynı yöntemle
silinir. Silme işlemi bitip tekrar devre kurmaya devam edebilmek için menüden
tekrar ‘SİL AKTİF’ butonuna dokunularak konumunun ‘SİL’ olarak değişmesi
sağlanır. Bu şekilde tekrar düzenleme işlemine devam edilebilir. Eğer butonun
konumu değiştirilmez ise silme işlemine devam eder ve dokunulan her eleman
33
silinir. Şekil 4.9’da Sil butonunun ilk pasif durumu ve aktif olduğu durumu birlikte
verilmiştir.
Şekil 4.9. Sil butonu görünümü
4.1.1.5. Ana menüye git butonu
Menüden Şekil 4.10’da verilen Ana menüye git butonuna dokunulduğunda
sahnenin üzerinde kullanıcıya Giriş ekranı olan Ana menüye dönmek isteyip
istemediğini soran bir pencere gelir. Şekil 4.11’de görüldüğü gibi açılan
pencerede ‘Evet’ butonuna dokunulursa Giriş ekranına gidilir, ‘Hayır’ butonuna
dokunulursa devrenin yapıldığı sahneye geri dönülür.
Şekil 4.10. Ana menüye git butonu
34
Şekil 4.11. Ana menüye git butonuna dokununca açılan pencere görünümü
4.1.1.6. Çıkış butonu
Menüden Şekil 4.12’de verilen Çıkış butonuna dokunulduğunda sahnenin
üzerinde kullanıcıya programdan çıkmak isteyip istemediğini soran bir pencere
gelir. Şekil 4.13’de görüldüğü gibi açılan pencerede ‘Evet’ butonuna dokunulursa
program kapanır, ‘Hayır’ butonuna dokunulursa devrenin yapıldığı sahneye geri
dönülür.
Şekil 4.12. Çıkış butonu
35
Şekil 4.13. Çıkış butonuna dokununca açılan pencere görünümü
4.1.1.7. Temizle butonu
Sahnenin sağ alt köşesinde bulunan Şekil 4.14’te verilen Temizle butonu sahneyi
temizlemek için kullanılır. Sil butonu istenilen elemanları dokunarak silmek için
kullanılırken, temizle butonu ise sahneyi tamamen temizleyip yeni devre kurmak
için kullanılabilir.
Şekil 4.14. Temizle butonu
36
4.2. Simülasyon Yazılımının Akış Diyagramı
Devreyi kurabilmek için gereken devre elemanları menülerden seçilerek sahneye
eklenir. Sahnede her eleman sürükle bırak yöntemiyle yerlerine taşınır. Yanlış ya
da fazla eklenen devre elemanı varsa ‘Sil’ butonu kullanılarak sahneden silinir.
Son olarak devre elemanlarının pinleri arasında bağlantıları yapılır. Her bir
bağlantı tek tek yapılmalıdır. Bağlantıları yapabilmek için yüklerin gidiş yönü
dikkate alınarak ilk olarak çıkış pinine sonra onun bağlanacağı kapının giriş
pinine veya ledin pinine dokunulmalıdır. Bu sayede yüklerin devre elemanları
arasında bağlantı kurularak aktarılması sağlanır. Kapıların üzerinde kendi
görevlerini yapmalarını sağlayan scriptler (kodlar) Component (bileşen) olarak
eklenmiştir. Bu kodlarda kapıların girişlerine gelen yükler alınarak kapının
işlevine göre işleme girmiş ve sonuç çıkış pinine aktarılmıştır. Bağlantı kurulduğu
zaman sonuç değerindeki yük diğer kapı ya da lede aktarılmış olur.
Yanlış pinler bağlandığında ya da bağlantı değiştirilmek istendiğinde öncelikle
bağlantının iptal edilmesi gerekir. Bunun için iptal edilmek istenen bağlantının
ilk olarak çıkış pinine sonra diğer bağlantı kurulduğu yerdeki pinine dokonulması
gerekir. Yani pinleri bağlarken dikkat edilen yüklerin gidiş yönü göz önüne
alınarak bağlantı nasıl kurulduysa aynı şekilde ilk olarak birinci pine ardından
ikinci pine dokunularak aradaki bağ kaldırılmış olur. Programın çalışmasını
gösteren akış şeması Şekil 4.15’te görülmektedir.
37
Şekil 4.15. Programın çalışmasını gösteren akış şeması
Uygulaması Yapılacak Lojik Devre Elemanlarını Ekle
Pin bağlantılarını yap
Uygulamanın çalıştırılması için
gerekli Yükü (Lojik Giriş) ekle
Yanlış Devre Elemanına dokun sil
Pinlere dokunarak yanlış bağlantıyı sil
Yanlış yüke dokun sil
Lojik Devre Elemanları Doğru
Eklendi mi?
Pin bağlantıları
doğru yapıldı mı?
Doğru yük eklendi mi?
H
H
H
E
Başla
E
E
Uygulama sonuçlarının sağlamasını yap
Menüden Sil Butonunu aktif yap
Menüden Sil Butonunu pasif
yap
Bitir
Menüden Sil Butonunu aktif yap
Menüden Sil Butonunu pasif
yap
38
4.3. Yakınlaştırma ve Sahnede Gezinme İşlemleri
Gerçekleştirilen mobil uygulama ile devre kurarken, sahne üzerinde
yakınlaştırma, uzaklaştırma (zoom) veya yukarı, aşağı, sağa ve sola gezinme
(panning) işlemleri yapılabilmektedir. Yakınlaştırma veya uzaklaştırma işlemleri
yapılıp devre tamamlandıktan sonra uygulamanın normal görünümüne
döndürmek için de sahnede boş bir alanda hızlıca iki kez dokunmak yeterlidir.
4.4. Geliştirilen Mobil Yazılım ile Yapılan Simülasyon Örnekleri
Yazılım tamamlandıktan sonra çeşitli uygulama örnekleri gerçekleştirilmiştir.
Yapılan uygulamalar; Ve kapısı uygulaması, akıllı tahta üzerinde Veya kapısı
uygulaması, Yarım toplayıcı lojik devresi, Yarım çıkarıcı lojik devresi ve verilen
bir fonksiyonun lojik kapılarla gerçekleştirilmesidir.
4.4.1. Ve (And) kapısı uygulaması
Ve kapısına girişlerin sırayla uygulandığı, girişlere göre de çıkışların alındığı
simülasyonun ekran görüntüleri Şekil 4.16’da verilmiştir. Giriş yüklerini
uygulamak için Switch (Anahtar) kullanılmıştır.
Şekil 4.16. Ve (And) kapısı uygulaması ekran görüntüleri
39
4.4.2. Veya (Or) kapısının akıllı tahtada uygulanması
Veya kapısına girişlerin sırayla uygulandığı, girişlere göre de çıkışların alındığı
simülasyonun ekran görüntüleri Şekil 4.17’de verilmiştir. Mobil uygulama akıllı
tahta üzerinde çalıştırılarak Veya kapısının simülasyonu yapılmıştır.
Şekil 4.17. Veya (Or) kapısı akıllı tahta ekran görüntüleri
4.4.3. Yarım toplayıcı lojik devresi uygulaması
Girişine uygulanan iki biti toplayarak sonucu toplam (sum) ve elde (carry)
şeklinde iki çıkış olarak veren toplayıcı devresi, ‘yarım toplayıcı’ olarak
adlandırılır. Şekil 4.18’te Yarım toplayıcı sembolü ve Çizelge 4.1’de Yarım
toplayıcı devresi doğruluk tablosu verilmiştir (Ekiz, 2005).
40
Şekil 4.18. Yarım toplayıcı sembolü
Çizelge 4.1. Yarım toplayıcı devresi doğruluk tablosu
A B S Co
0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1
Doğruluk tablosunda verilen girişlerin sırayla uygulandığı simülasyonun ekran
görüntüleri Şekil 4.19’da verilmiştir. Anahtarın üzerinde dokunulduğunda
otomatik olarak konumu değişmektedir. Anahtarın üzerinde ışık yandığında
Lojik 1 yükünü, ışık yanmadığı konumunda ise Lojik 0 yükünü devrenin girişine
vermektedir. Yükler bağlantılar üzerinden kapıların girişlerindeki pinlere,
böylece de kapılara aktarılmış olur.
Şekil 4.19. Yarım toplayıcı devresi ekran görüntüleri
41
4.4.4. Yarım çıkarıcı lojik devresi uygulaması
İki bit üzerinde çıkarma işlemini yapan çıkarıcı devresinde, iki giriş ve iki çıkış
bulunmaktadır (Şekil 4.20). Çıkışlardan birisi sayının farkını (difference-D),
diğeri borç bitini (borrow-B) gösterir. Çizelge 4.2’de Yarım çıkarıcı devresi
doğruluk tablosu verilmiştir (Ekiz, 2005).
Şekil 4.20. Yarım çıkarıcı sembolü
Çizelge 4.2. Yarım çıkarıcı devresi doğruluk tablosu
A B Fark (A-B) Borç (B)
0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 0
Doğruluk tablosunda verilen girişlerin sırayla uygulandığı simülasyonun ekran
görüntüleri Şekil 4.21’de verilmiştir. Şekil 4.22’de ise ÖzelVeya kapısı
kullanılmadan bu kapıyı oluşturan kapılar kullanılarak daha ayrıntılı devre
şeması ve ekran görüntüleri verilmiştir.
42
Şekil 4.21. Yarım çıkarıcı devresi ekran görüntüleri
Şekil 4.22. Yarım çıkarıcı devresi ayrıntılı şeması ve uygulama görüntüleri
4.4.5. F=AB+C(A+B) Lojik ifadesinin lojik kapılar ile gerçekleştirilmesi
Verilen bir lojik ifadenin lojik kapılar ile tasarımını yapmadan önce
sadeleştirilmesi gerekiyorsa sadeleştirilir ve son haliyle doğruluk tablosu
oluşturulur. Devre simülasyon ortamında hazırlandıktan sonra Çizelge 4.3’teki
43
doğruluk tablosundaki giriş değerleri sırayla girişlere uygulanarak çıkıştaki ledin
durumuna göre devrenin çalışması görülmüş olur. Devrenin girişlerindeki yük
değerlerinin Lojik 1, 0, 1 olduğu durumda çıkıştaki ledin yandığı ekran görünümü
Şekil 4.23’te verilmiştir.
Çizelge 4.3. Verilen lojik ifadenin doğruluk tablosu
A B C ÇIKIŞ (Q)
0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1
Şekil 4.23. F=AB+C(A+B) Lojik ifadesinin lojik kapılar ile tasarımı
4.5. Simülasyon Uygulamasının Apk Dosyasının Oluşturulması
Geliştirilen uygulamanın Android platformunda çalışabilmesi için Build edilerek
.apk uzantılı dosyasının oluşturulması gerekmektedir. Bunun için ilk olarak Unity
Editör üst menüsünde bulunan File menüsünden Build Settings seçeneği seçilir
(Şekil 4.24).
44
Şekil 4.24. File / Build settings ekran görünümü
Açılan Build Settings Penceresinde üst kısımda projede kulllanılan tüm sahneler
listelenmektedir. Platform kısmında Android seçeneği seçilir ve ardından
pencerenin alt kısmında yer alan Player Settings butonuna tıklanır (Şekil 4.25).
Şekil 4.25. Build settings penceresi
45
Player Settings ekranı, Unity Editör’ün sağ tarafında Inspector panelinde açılır
(Şekil 4.26). Hazırlanan uygulama ile ilgili temel yayınlama düzenlemeleri bu
ekranda gerçekleştirilir.
Şekil 4.26. Player settings ekranı
Player Settings ekranında öncelikle Company Name ( Geliştirici İsmi), Product
Name (Uygulama İsmi) ve Default Icon (Uygulama Logosu) bilgilerinin
doldurulması gerekmektedir. Uygulamanın logosu Photoshop programında
hazırlandıktan sonra Project Panelinde Assets klasörüne eklenmiştir. Bu logo,
Default Icon seçeneğinin karşısında bulunan Select butonuna tıklayıp açılan
pencereden seçilerek projeye eklenmiş olur.
Resolution and Presentation sekmesinde ekran görüntüsü ile ilgili ayarlar yapılır.
Uygulama dikey veye yatay pozisyonlardan herhangi biri veya her biri olabilir.
Icon sekmesi, uygulama için oluşturulan logoları farkı boyutlarda eklemeyi
sağlar. Splash Image sekmesi, yalnızca Unity Pro lisansına sahip kullanıcılar için
geçerli olan açılış ekranını temsil eder. Uygulama açılırken kullanıcıyı karşılayan
5 saniyelik görseli ayarlamak için kullanılır. Lisanslı olmayan tüm kullanımlarda
Unity3D oyun motorunun resmi logosu görülmektedir. Other Settings
sekmesinde uygulamanın Google Play tarafından tanımlanacağı sürüm bilgisi,
ürün kimliği, ilgili minimum Android sürümü gibi bilgiler ayarlanır. Son olarak
46
Publishing Settings sekmesinde, geliştiriciyle uygulama arasındaki bağı
kanıtlayan bir anahtar dosya tanımlanır (Satman, 2015).
Gerekli bilgiler Inspector panelinde girildikten sonra uygulama Build (Derleme)
işlemi için hazır hale gelmiştir. File menüsünden Build Settings yolunu izleyerek
açılan Build Settings penceresinde Build butonuna basarak .apk uzantılı Android
dosyası uygulamanın bulunduğu klasörün içerisine oluşturulur. Oluşan .apk
uzantılı dosya herhangi bir android tabanlı mobil cihaza aktarılıp kurularak
çalıştırılabilir. Uygulamanın apk dosyası mobil cihaza kurulduktan sonraki
logosunun görünümü Şekil 4.27’de verilmiştir.
Şekil 4.27. Geliştirilen uygulamanın logosunun mobil cihazda görünümü
4.6. Simülasyon Uygulamasının Exe Dosyasının Oluşturulması
Geliştirilen uygulamanın Windows platformundaki mobil cihazlarda
çalışabilmesi için Build edilerek .exe uzantılı dosyasının oluşturulması
gerekmektedir. Bunun için ilk olarak .apk dosyasını oluşturmadaki gibi Unity
Editör üst menüsünde bulunan File menüsünden Build Settings seçeneği seçilir
(Şekil 4.28).
47
Şekil 4.28. File / Build settings ekran görünümü
Açılan Build Settings Penceresinde alt bölümdeki Platform kısmında PC, Mac &
Linux Standalone seçeneği seçilmelidir. Yine aynı pencerede sağ bölümde Target
Platform olarak Windows ve Architecture kısmı x86_64 seçilerek Build butonuna
tıklanır (Şekil 4.29). Böylece uygulamanın Windows platformunda çalışması için
.exe dosyası ve gerekli dosyalar oluşturulur. Akıllı tahtada veya diğer mobil
cihazlarda çalıştırmak için Şekil 4.30’da .exe dosyası ile birlikte verilen klasöre de
ihtiyaç vardır. Buradaki .exe dosyası çalıştırılarak uygulama başlatılır.
48
Şekil 4.29. Build settings penceresi
Şekil 4.30. Windows platformu için gerekli dosyalar
Uygulamanın akıllı tahtada çalıştırılması ile elde edilen ekran görüntüleri Şekil
4.31, Şekil 4.32 ve Şekil 4.33’te verilmiştir.
49
Şekil 4.31. Uygulamanın akıllı tahta üzerinde ekran görüntüsü – 1
Şekil 4.32. Uygulamanın akıllı tahta üzerinde ekran görüntüsü – 2
50
Şekil 4.33. Uygulamanın akıllı tahta üzerinde ekran görüntüsü – 3
4.7. Geliştirilen Mobil Uygulamanın Eğitimde Kullanılması
Bu eğitim aracı ile lojik kapılar ve lojik devrelerin çalışması simülasyon ile
kavratılmaya çalışılmıştır. Çalışma 2017-2018 Eğitim Öğretim yılı Mart ayında,
Milli Eğitim Bakanlığı’na bağlı Isparta Şehit Komiser Muhsin Kiremitçi İmam
Hatip Ortaokulu’nun 6. Sınıfında okuyan ve konuyu hiç bilmeyen 12’şer kişilik
birbirine denk olduğu varsayılan iki grup öğrencinin katılımıyla yapılmıştır. Sınıf
iki gruba ayrılmıştır. Birinci gruba simülasyon uygulaması yapılmadan tahtada
temel lojik kapılar anlatılarak eğitim verilirken, ikinci gruba konu anlatımının
yanında geliştirilen mobil uygulama ile simülasyonları gösterilerek destek
verilmiştir. Eğitim verilirken dokunmatik ekranlı bir diz üstü bilgisayarda
program çalıştırılmış ve projeksiyona yansıtılarak ders işlenmiştir. Aynı zamanda
bir tablet pc de öğrenciler arasında dolaştırılarak onların da tablet üzerinde
simülasyonu yapabilmeleri sağlanmıştır. Konu anlatımlarından sonra iki gruba
da bir yazılı sınav yapılmıştır. Sınavda öğrencilerden lojik kapıları kullanarak bir
lojik devre çizmeleri istenmiştir. Birinci gruptaki öğrencilerin %50’si devreyi tam
yaparken, %33’ü yarısını yapabilmiş, %16’sı hiç yapamamıştır. İkinci gruptaki
51
öğrencilerin ise %83’ü devreyi tam yaparken, %16’sı yarısını yapabilmiştir.
Öğrencilere sorulan değerlendirme sorusu Şekil 4.34’te verilmiştir.
Şekil 4.34. Değerlendirme sorusu
Sonuçlar değerlendirildiğinde mobil uygulama ile desteklenen öğrencilerin diğer
gruba göre daha başarılı olduğu, uygulamanın kullanışlı ve kolaylaştırıcı olduğu
görülmüştür. Dersin işlenişinde de ikinci gruptaki dersin daha verimli geçtiği,
öğrencilerin simülasyonlarını görerek ve uygulayarak konuyu daha iyi
kavradıkları görülmüştür.
52
5. SONUÇ VE ÖNERİLER
Son dönemlerde teknolojide yaşanan gelişmeler, bireye eğitim alması açısından
pek çok yeni ortam sunmuştur. Bu ortamlardan biri de yer ve zamandan bağımsız
olarak mobil cihazlar ve tablet bilgisayarlarla sağlanan ortamlardır. Bu
teknolojiler gün geçtikçe daha vazgeçilmez bir nitelik kazanmaktadırlar. Özellikle
son yıllarda yaygınlaşan mobil simülasyon uygulamalarından derslerde
faydalanmak suretiyle soyut kavramlar somutlaştırılarak öğrencilerin derslere
karşı ilgisi ve başarısı arttırılabilir. Simülasyon uygulamalarında kullanılan
değerler istenildiği gibi değiştirilip sonuçlar hemen görülebildiği için daha çok
tercih edilmektedir.
Bu tez çalışmasında, ülkemizde Mesleki ve Teknik Eğitimde okutulan
Sayısal/Dijital Elektronik, Temel Elektronik ve Ölçme, Elektronik Sistemler gibi
derslerde öğrencilerin ders esnasında lojik kapılar veya lojik kapılarla
gerçekleştirilen lojik devre deneylerinin simülasyonunu kolayca yapabilmelerini
sağlamak amacıyla Android ve Windows tabanlı mobil cihazlarda çalışan bir
uygulama geliştirilmiştir. Bu derslerde eğitimi her platformda
gerçekleştirebilmek adına Unity3D editöründe C# dili kullanılarak iki platformda
da çalışan 2D bir mobil uygulama geliştirilmiştir.
Geliştirilen mobil uygulamada, devre için gerekli giriş anahtarları, kapılar ve
çıkışlar menüden seçilip sahneye eklenir. Devre elemanları sürükle-bırak
yöntemiyle sahnede uygun yere taşınır. Devre elemanları arasında pinlerine
dokunarak gerekli bağlantılar yapıldıktan sonra, giriş anahtarlarının konumunu
değiştirerek, doğruluk tablosuna göre çıkışlar gözlemlenir. Bu şekilde, istenen
lojik devrelerin simülasyonu kolayca gerçekleştirilebilir.
Mobil uygulamanın kullanılabilirliğinin değerlendirilebilmesi için 2017-2018
Eğitim Öğretim yılı Mart ayında, Milli Eğitim Bakanlığı’na bağlı Isparta Şehit
Komiser Muhsin Kiremitçi İmam Hatip Ortaokulu’nun 6. Sınıfında okuyan ve
konuyu hiç bilmeyen 12’şer kişilik birbirine denk olduğu varsayılan iki grup
öğrenciye birer ders saati eğitim verilmiştir. Sınıf iki gruba ayrılmıştır. Birinci
53
gruba simülasyon uygulaması yapılmadan tahtada temel lojik kapılar anlatılarak
eğitim verilirken, ikinci gruba konu anlatımının yanında geliştirilen mobil
uygulama ile simülasyonları gösterilerek destek verilmiştir. Derslerden sonra iki
gruba da bir yazılı sınav yapılmıştır.
Sonuçlar değerlendirildiğinde mobil uygulama ile desteklenen öğrencilerin
%83’ü sınavda devreyi tam yaparken diğer grubun %50’si tam yapabilmiştir.
Uygulamanın kullanışlı ve kolaylaştırıcı olduğu görülmüştür. Dersin işlenişinde
de ikinci gruptaki dersin daha verimli geçtiği, öğrencilerin simülasyonlarını
görerek ve uygulayarak konuyu daha iyi kavradıkları görülmüştür.
Bu simülasyon uygulaması gerçek hayatla karşılaştırıldığında; daha güvenli
olması, öğrenme durumunun karmaşıklığını öğretisel açıdan kontrol etmesi,
Android ve Windows platformlarında çalışabilmesi açısından ve elektronik
malzemelerin gereksiz kullanımının önüne geçilmesi ile mali kazanç sağlama gibi
avantajları vardır. Öğrenciler mobil uygulamayı kullanarak, lojik devrelerin
tasarımını yaparken zorlanmayacak, lojik kapıların sembollerini tanıyıp
devreleri kolaylıkla çizebilecek ve çizilmiş olan devre şemalarını da
okuyabileceklerdir.
Geliştirilen uygulama Mesleki ve Teknik Eğitimdeki öğrencilere sunularak,
onlardan gelen dönütler doğrultusunda daha da geliştirilebilir. Uygulamaya flip-
floplar, azlayıcılar, çoklayıcılar gibi diğer lojik elemanlar ve kaydetme işlemleri
de eklenerek daha da kullanışlı hale getirilebilir. Ayrıca uygulama
oyunlaştırılarak ekranda verilen devre doğru şekilde tamamlandığında kolaydan
zora doğru level (seviye) atlaması sağlanarak, her seviye sonunda puan almasıyla
tamamlanacak şekilde hem eğitici hem de eğlenceli hale getirilebilir.
54
KAYNAKLAR
Akkağıt, Ş., F., Tekin A., 2011. Lojik Kapılar İçin Bir Eğitim Aracı. 5th International Computer & Instructional Technologies Symposium, 22-24 September 2011, Fırat University, Elazığ, Turkey.
Altıkardeş, Z.A., 2001. Lojik devreler dersinin internet tabanlı simülatör ile
eğitimi. Marmara Üniversitesi. Fen Bilimleri Enstitüsü, Elektrik ve Elektronik Mühendisliği, Elektronik Haberleşme Eğitimi. Yüksek Lisans Tezi, 144s, İstanbul.
Bal, M., 2012. Labview Tabanlı Logıc Simülatör İçin Toolbox Tasarımı. Süleyman
Demirel Üniversitesi, Fen Bilimleri Enstitüsü, Yüksek Lisans Tezi,78s,
Isparta.
Büyükbayraktar, M., 2006. Lojik Devre Tasarımının Bilgisayar Destekli Olarak
Uygulanmasının Öğrenci Başarısına Etkisi. Sakarya Üniversitesi, Sosyal Bilimler Enstitüsü, Yüksek Lisans Tezi, 149s, Sakarya.
Cupic M., 2011. Building an integrated platform for teaching and learning of
Digital logic. MIPRO, 2011 Proceedings of the 34th International Convention, 1168–1173.
Çakır, H., 2011. Mobil Öğrenmeye İlişkin Bir Yazılım Geliştirme ve Değerlendirme.
Çukurova Üniversitesi Eğitim Fakültesi Dergisi, 2(40), 01-09. Çevik, K.K., Koçer, H.E., 2012. Mobil Cihaz Tabanlı Yabancı Dilde Kelime Öğrenme
Uygulaması. Teknik-Online Dergi, 11, 2, 60-70. Çınar, S., 2014. Mobil Android Ortamında Parmak İzi Tanıma Ve Kimlik
Doğrulama Sisteminin Geliştirilmesi. Haliç Üniversitesi, Fen Bilimleri Enstitüsü, Bilgisayar Mühendisliği Anabilim Dalı, Bilgisayar Mühendisliği Programı. Yüksek Lisans Tezi, 92s, İstanbul.
Dalmaz, H., 2015. Android Tabanlı Cihazlarda Web Verilerinin Gerçek Zamanlı
Değişken Parametreli Takibi. Erciyes Üniversitesi, Fen Bilimleri Enstitüsü, Bilgisayar Mühendisliği Anabilim Dalı. Yüksek Lisans Tezi, 55s, Kayseri.
Dehmenoğlu, C., 2015. Programlama Temelleri Dersine Yönelik Mobil Öğrenme
Aracının Geliştirmesi. Bahçeşehir Üniversitesi, Fen Bilimleri Enstitüsü, Bilgi Teknolojileri. Yüksek Lisans Tezi, 42s, İstanbul.
Demir, K., 2014. Grafik ve Animasyon Dersindeki Mobil Öğrenme
Uygulamalarının Öğrencilerin Akademik Başarılarına ve Mobil Öğrenmeye Yönelik Tutumlarına Etkisi. Dokuz Eylül Üniversitesi Eğitim Bilimleri Enstitüsü, Bilgisayar ve Öğretim Teknolojileri Eğitimi Anabilim Dalı, Bilgisayar ve Öğretim Teknolojileri Öğretmenliği Programı. Yüksek Lisans Tezi, 93s, İzmir.
55
Demiray, A., 2017. Olası Dalış Kazalarına Erken Müdahale Etmek Amaçlı Android Tabanlı Uygulama Tasarımı. Bahçeşehir Üniversitesi, Fen Bilimleri Enstitüsü, Bilgi Teknolojileri. Yüksek Lisans Tezi, 65s, İstanbul.
Doğan, Y.S., 2017. Evrimsel Algoritmalar Kullanılarak Özgün 3d Nesne Tasarımı.
Ankara Yıldırım Beyazıt Üniversitesi, Fen Bilimleri Enstitüsü, Bilgisayar Mühendisliği Bölümü, Yüksek Lisans Tezi, 61s, Ankara.
Dube, T.J., 2017. Koreografi Üretimi İçin Sanal Ve Artırılmış Gerçeklik Tabanlı
Arayüzler. İstanbul Teknik Üniversitesi, Fen Bilimleri Enstitüsü. Yüksek Lisans Tezi, 75s, İstanbul.
Ekiz, H., 2005. Mantık Devreleri Sayısal Elektronik. Değişim Yayınları, 569s,
İstanbul. Ekiz, H., Bayam, Y., Ünal, H., 2003. Mantık Devreleri Dersine Yönelik İnternet
Destekli Uzaktan Eğitim Uygulaması. The Turkish Online Journal of Educational Technology – TOJET, 2,4, 92-99.
Erşahin, G., 2015. Tablet Bilgisayar İle Kablosuz Gezgin Robot Kontrolü. Yıldız
Teknik Üniversitesi, Fen Bilimleri Enstitüsü, Elektronik Ve Haberleşme Mühendisliği Anabilim Dalı Haberleşme Programı. Yüksek Lisans Tezi, 75s, İstanbul.
Facer, K., Joiner, R., Stanton, D., Reid, J., Hull, R., Kirk, D., 2004. Savannah: Mobile
Gaming and Learning. Journal of Computer Assisted Learning. 20(6), 399-409.
İğci, E., 2014. Android İşletim Sistemi İle Çalışan Mobil Cihazlarda Uygulama
Geliştirilmesi. Ege Üniversitesi, Fen Bilimleri Enstitüsü, Bilgisayar Mühendisliği Anabilim Dalı. Yüksek Lisans Tezi, 112s, İzmir.
Kalınkara, Y., 2017. Bilgisayar Donanımı Dersine Yönelik Mobil Eğitim
Materyalinin Geliştirilmesi VE Öğrenci Başarısı Üzerine Etkisinin İncelenmesi. İnönü Üniversitesi, Eğitim Bilimleri Enstitüsü, Bilgisayar ve
Öğretim Teknolojileri Eğitimi Ana Bilim Dalı. Yüksek Lisans Tezi, 114s, Malatya.
Karaman, S., 2008. Öğrenme 2.0 Yaygınlaşıyor: Web 2.0 Uygulamalarının
Eğitimde Kullanımına İlişkin Araştırmalar ve Sonuçları. Orta Doğu Teknik Üniversitesi, Ankara.
Keskin, N.Ö., 2010. Mobil Öğrenme Teknolojileri ve Araçları. Erişim
Tarihi:21.01.2018. http://www.academia.edu/1109901/Mobil_Öğenme_Teknolojileri_ve_Araçları.
Kh’tour, M., 2015. Android Tabanlı Hastane Uygulaması. Kırıkkale Üniversitesi
Fen Bilimleri Enstitüsü, Yüksek Lisans Tezi, 97s, Kırıkkale.
56
Kılıç, M., 2015. Mobil Öğrenmeye Dayalı Android Uygulamalarının Öğrencilerin
Kimya Dersi Atom Ve Periyodik Sistem Ünitesindeki Akademik Başarılarına, Kalıcı Öğrenmelerine Ve Motivasyonlarına Etkisi. Kahramanmaraş Sütçü İmam Üniversitesi, Fen Bilimleri Enstitüsü, Yüksek Lisans Tezi, 94s, Kahramanmaraş.
Kula, S.Y., 2011. Unity’nin Orijinal Başlangıç Tutorialleri. Erişim Tarihi:
20.03.2017. https://yasirkula.com/2011/08/28/unity%E2%80%99nin-orijinal-baslangic-tutorialleri-%E2%80%93-simdi-tamamen-turkce/.
MobilShift, 2014. Erişim Tarihi: 12.02.2018.
http://www.mobilshift.com/android-tum-surumleri-listesi-surekli-guncel/.
Muştu, Y., 2012. SMS ve Android tabanlı uygulamalarla sınıf içi etkileşimin
arttırılması. Bilecik Şeyh Edebali Üniversitesi, Fen Bilimleri Enstitüsü, Bilgisayar Mühendisliği Anabilim Dalı. Yüksek Lisans Tezi, 100s, Bilecik.
Özcan, A., 2008. Cep bilgisayarları (PDA) için bir mobil öğrenme ortamı tasarım
ve uygulaması. Muğla Üniversitesi, Fen Bilimleri Enstitüsü, Yüksek Lisans
Tezi, 76s, Muğla.
Özdener, N., 2005. Deneysel öğretim yöntemlerinde benzetişim (simulation)
kullanımı. The Turkish Online Journal of Educational Technology – TOJET October 2005 ISSN: 1303-6521, 4(4), Article 13.
Rosilah H., Nazlia O., Haslina A., Shahnorbanun S., 2008. A Design of Virtual Lab
for Digital Logic. 7th WSEAS International Conference on E-Activities, 139-
145.
Rosilah H., Nazlia O., Haslina A., Shahnorbanun S., 2010. DigiLab: A Virtual Lab for
IT Students. Wseas Transactions On Advances in Engineering Education,
7, 151-160.
Satman, A.G., 2015. Yeni Başlayanlar İçin UNITY3D. Kodlab Yayınları, 246s,
İstanbul. Sonuç, E., Ortakcı, Y., Elen, A., 2013. Karabük Üniversitesi Bilgi Sistemi Android
Uygulaması. Erişim Tarihi: 28.03.2013. http://ab.org.tr/ab13/bildiri/221.pdf.
Şimşek, M.A., Erdemli, T., Taşdelen, K., 2013. Android Cihazlarda Konum Tespiti
ve Aktarılması. Erişim Tarihi: 22.01.2018. http://ab.org.tr/ab13/bildiri/134.pdf.
57
Turkcell, 2015. Android Mimarisi ve Sistem Özellikleri. Erişim Tarihi: 10.01.2018. https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-201/android-mimarisi-ve-sistem-ozellikleri.
Tülü, M., 2012. Objective C ile İPHONE’a Üniversite Uygulaması Geliştirme. Erişim
Tarihi: 28.03.2013. http://ab.org.tr/ab12/bildiri/153.pdf. Yaşar, E., 2017. Android Tabanlı Anne Ve Anne Adayları İçin Bilgi Paylayışım
Platformu. Selçuk Üniversitesi Fen Bilimleri Enstitüsü. Elektronik ve Bilgisayar Sistemleri Eğitimi Anabilim Dalı. Yüksek Lisans Tezi, 49s, Konya.
Yechshzhanova, Z., 2014. Bilgisayar Destekli Öğretim ve Mobil Öğretim İçin
Geometri Dersinin İçeriğinin Geliştirilmesi. Gazi Üniversitesi Bilişim Enstitüsü, Yüksek Lisans Tezi, 95s, Ankara.
Zeytin, İ., 2013. Android İşletim Sistemi. Tekirdağ. Erişim Tarihi: 19.02.2018.
https://books.google.com.tr/books?id=73RpCQAAQBAJ&pg=PP1&lpg=PP1&dq=islam+zeytin+android+i%C5%9Fletim+sistemi&source=bl&ots=vr22GhywdU&sig=kM9gKk_SNSBRpxfOvcwq3yHHOJU&hl=tr&sa=X&ved=0ahUKEwj7-ZL6p7XZAhVGyKQKHdGtCt0Q6AEIJzAA#v=onepage&q=islam%20zeytin%20android%20i%C5%9Fletim%20sistemi&f=false.
58
EKLER
EK A. Programın C# Kodları
59
EK A. Programın C# Kodları using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Collections.Generic; public class Zoom : MonoBehaviour // zoom ve panning işlemleri { [SerializeField] float VelocidadDeZoom = 0.3f; [SerializeField] Vector2 Limites; [SerializeField] Vector2 Orginals; private Vector2 ScreenSize; private Vector3 lastPanPosition; private int panFingerId; // Touch mode only private bool wasZoomingLastFrame; // Touch mode only private Vector2[] lastZoomPositions; // Touch mode only private static readonly float PanSpeed = 2f; private static readonly float[] BoundsX = new float[] { -12f, 12f }; private static readonly float[] BoundsY = new float[] { -12f, 12f }; private static readonly float[] BoundsZ = new float[] { -18f, -4f }; Camera c; private void Start() { //Ekran yönü yatay olacak şekilde ayarlama Screen.orientation = ScreenOrientation.LandscapeLeft; c = GetComponent<Camera>(); } // Update is called once per frame void Update() { if (Input.touchCount == 2) { Touch t0 = Input.GetTouch(0); Touch t1 = Input.GetTouch(1); Vector2 t0Cambio = t0.position - t0.deltaPosition; Vector2 t1Cambio = t1.position - t1.deltaPosition; float MagnitudToquesAnteriores = t1Cambio.magnitude - t0Cambio.magnitude; float MagnitudDeToque = t1.position.magnitude - t0.position.magnitude; float Diferancia = MagnitudToquesAnteriores - MagnitudDeToque; if (c.orthographic) { c.orthographicSize += Diferancia * VelocidadDeZoom;
60
c.orthographicSize = Mathf.Clamp(c.orthographicSize, Limites.x, Limites.y); } else { c.fieldOfView += Diferancia * VelocidadDeZoom; c.fieldOfView = Mathf.Clamp(c.fieldOfView, Limites.x, Limites.y); } } // Zoom işleminden sonra Çift tıklayınca orjinal haline döndüren kod if (Input.GetTouch(0).tapCount == 2 && Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began) { Touch t0 = Input.GetTouch(0); Vector2 t0Cambio = t0.position - t0.deltaPosition; float MagnitudToquesAnteriores = t0Cambio.magnitude; float MagnitudDeToque = t0.position.magnitude; float Diferancia = MagnitudToquesAnteriores - MagnitudDeToque; if (c.orthographic) { c.orthographicSize += Diferancia * VelocidadDeZoom; c.orthographicSize = Mathf.Clamp(c.orthographicSize, Orginals.x, Orginals.y); } else { c.fieldOfView += Diferancia * VelocidadDeZoom; c.fieldOfView = Mathf.Clamp(c.fieldOfView, Orginals.x, Orginals.y); } } if (Input.touchCount== 1) { // Panning wasZoomingLastFrame = false; Touch touch = Input.GetTouch(0); if (touch.phase == TouchPhase.Began) { lastPanPosition = touch.position; panFingerId = touch.fingerId; } else if (touch.fingerId == panFingerId && touch.phase == TouchPhase.Moved) { PanCamera(touch.position); } } } void PanCamera(Vector3 newPanPosition) { Vector3 Diferancia = c.ScreenToViewportPoint(lastPanPosition-newPanPosition);
61
Vector3 move = new Vector3(Diferancia.x * PanSpeed,Diferancia.y * PanSpeed,0); // Hareketi gerçekleştir transform.Translate(move, Space.World); // Kameranın sınırların içinde kalmasını sağla Vector3 pos = transform.position; pos.x = Mathf.Clamp(transform.position.x, BoundsX[0], BoundsX[1]); pos.y = Mathf.Clamp(transform.position.y, BoundsY[0], BoundsY[1]); pos.z = Mathf.Clamp(transform.position.z, BoundsZ[0], BoundsZ[1]); transform.position = pos; // Cache the position pozisyonu sakla lastPanPosition = newPanPosition; } } using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Collections.Generic; public class PinComponent : MonoBehaviour { //Pin bağlantılarının yapılması ve koparılması private struct BagliPinler { public readonly PinComponent pin1; public readonly PinComponent pin2; public readonly LineRenderer lineRenderer; public BagliPinler(PinComponent pin1, PinComponent pin2, LineRenderer lineRenderer) { this.pin1 = pin1; this.pin2 = pin2; this.lineRenderer = lineRenderer; } } private static List<BagliPinler> bagliPinler = new List<BagliPinler>(); private static PinComponent seciliPin = null; private static bool pinlerGuncellendi = false; private GameObject lojikKapi; //reference to LineRenderer component private LineRenderer line; //assign a material to the Line Renderer in the Inspector public Material material; //number of lines drawn private int currLines = 0; // Oyun başladığında void Awake() { lojikKapi = transform.parent.gameObject;
62
} // Use this for initialization void Start () { } // Update is called once per frame void Update () { if(!pinlerGuncellendi) { for (int i = 0; i < bagliPinler.Count; i++) { BagliPinler tmp = bagliPinler[i]; tmp.lineRenderer.SetPosition(0, tmp.pin1.transform.position); tmp.lineRenderer.SetPosition(1, tmp.pin2.transform.position); } pinlerGuncellendi = true; } } void LateUpdate() { pinlerGuncellendi = false; } // Bu pin objesine mouse veya parmak ile dokunulduğunda void OnMouseDown() { if (seciliPin == null) { seciliPin = this; } else if (seciliPin == this) { seciliPin = null; } else { // Seçilen iki pin objesi de aynı lojik kapının piniyse bunları birbirine bağlama if ((seciliPin.lojikKapi == this.lojikKapi) || (seciliPin.tag == "input")) { seciliPin = null; return; } // Seçilen iki pin objesini zaten birbirine bağlıysa aralarındaki bağı kopar for (int i = 0; i < bagliPinler.Count; i++) { BagliPinler bp = bagliPinler[i];
63
if ((bp.pin1 == seciliPin && bp.pin2 == this) || (bp.pin1 == this && bp.pin2 == seciliPin)) { Destroy(bagliPinler[i].lineRenderer.gameObject); bagliPinler.RemoveAt(i); seciliPin.GetComponent<YukComponent>().hedefler.Remove(this.GetComponent<YukComponent>()); this.GetComponent<YukComponent>().hedefler.Remove(seciliPin.GetComponent<YukComponent>()); seciliPin.GetComponent<YukComponent>().bag = null; this.GetComponent<YukComponent>().yuk = 0; seciliPin.GetComponent<YukComponent>().yuk = 0; seciliPin = null; currLines++; return; } } // Seçilen iki pin objesi birbirine bağlı değil, onları birbirine bağla bagliPinler.Add(new BagliPinler(this, seciliPin, CizgiCiz(transform.position, seciliPin.transform.position))); if (!seciliPin.GetComponent<YukComponent>().hedefler.Contains(this.GetComponent<YukComponent>())) seciliPin.GetComponent<YukComponent>().hedefler.Add(this.GetComponent<YukComponent>()); seciliPin.GetComponent<YukComponent>().bag = this.GetComponent<YukComponent>(); seciliPin = null; currLines++; return; } } LineRenderer CizgiCiz(Vector3 StartPoint, Vector3 EndPoint) { //create a new empty gameobject and line renderer component line = new GameObject("Line" + currLines).AddComponent<LineRenderer>(); line.SetVertexCount(2);
64
line.SetWidth(0.10f, 0.10f); line.SetColors(Color.black, Color.black); line.useWorldSpace = true; line.material.color = Color.black; line.SetPosition(0, StartPoint); line.SetPosition(1, EndPoint); return line; } public void BosCizgiyiSil(string silindi) // boşta kalan çizgileri sil { for (int i = bagliPinler.Count - 1; i >= 0; i--) { BagliPinler pinler = bagliPinler[i]; if (pinler.pin1 == this || pinler.pin2 == this) { Destroy(pinler.lineRenderer.gameObject); Destroy(gameObject); bagliPinler.RemoveAt(i); pinler.pin1.GetComponent<YukComponent>().bag = null; pinler.pin1.GetComponent<YukComponent>().hedefler.Clear(); pinler.pin1.GetComponent<YukComponent>().yuk = 0; seciliPin = null; } } } } using UnityEngine; using System.Collections; public class surukle : MonoBehaviour //Sürükle-bırak işlemleri { public GameObject gameObjectTodrag; public Vector3 GOCenter; public Vector3 touchPosition; public Vector3 offset; public Vector3 newGOCenter; RaycastHit hit; public bool draggingMode = false; // Update is called once per frame void Update() { foreach(Touch touch in Input.touches) { switch (touch.phase) {
65
case TouchPhase.Began: Ray ray = Camera.main.ScreenPointToRay(touch.position); if (Physics.SphereCast(ray,0.3f,out hit)) { gameObjectTodrag = hit.collider.gameObject; GOCenter = gameObjectTodrag.transform.position; touchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); offset = touchPosition - GOCenter; draggingMode = true; } break; case TouchPhase.Moved: if (draggingMode) { touchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); newGOCenter = touchPosition - offset; gameObjectTodrag.transform.position = new Vector3(newGOCenter.x, newGOCenter.y, GOCenter.z); } break; case TouchPhase.Stationary: break; case TouchPhase.Ended: draggingMode = false; break; case TouchPhase.Canceled: break; default: break; } } } } using UnityEngine; using System.Collections; public class ANDKapisi : MonoBehaviour { // AND Kapısı kodları public YukComponent input1, input2, output; // Use this for initialization void Start () { } // Update is called once per frame void Update () { output.yuk = (input1.yuk) * (input2.yuk); } } using UnityEngine; using System.Collections; public class BUFFERKapisi : MonoBehaviour { // BUFFER Kapısı kodları public YukComponent input1, output; // Use this for initialization void Start () { }
66
// Update is called once per frame void Update () { output.yuk = input1.yuk; } } using UnityEngine; using System.Collections; public class NANDKapisi : MonoBehaviour { // NAND Kapısı kodları public YukComponent input1, input2, output; // Use this for initialization void Start () { } // Update is called once per frame void Update () { int sonuc = (input1.yuk) * (input2.yuk); if (sonuc == 1) output.yuk = 0; else output.yuk = 1; } } using UnityEngine; using System.Collections; public class NORKapisi : MonoBehaviour { // NOR Kapısı kodları public YukComponent input1, input2, output; // Use this for initialization void Start () { } // Update is called once per frame void Update () { int sonuc = (input1.yuk) | (input2.yuk); if (sonuc == 1) output.yuk = 0; else output.yuk = 1; } } using UnityEngine; using System.Collections; public class NOTKapisi : MonoBehaviour { // NOT Kapısı kodları public YukComponent input1, output; // Use this for initialization void Start () { } // Update is called once per frame void Update () {
67
if (input1.yuk == 1) { output.yuk = 0; } else output.yuk = 1; } } using UnityEngine; using System.Collections; public class ORKapisi : MonoBehaviour { // OR Kapısı kodları public YukComponent input1, input2, output; // Use this for initialization void Start () { } // Update is called once per frame void Update () { output.yuk = (input1.yuk) | (input2.yuk); } } using UnityEngine; using System.Collections; public class XORKapisi : MonoBehaviour { // XOR Kapısı kodları public YukComponent input1, input2, output; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if ((input1.yuk) != (input2.yuk)) { output.yuk = 1; } else output.yuk = 0; } } using UnityEngine; using System.Collections; public class XNORKapisi : MonoBehaviour { // XNOR Kapısı kodları public YukComponent input1, input2, output; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if ((input1.yuk) == (input2.yuk)) {
68
output.yuk = 1; } else output.yuk = 0; } } using UnityEngine; using System.Collections; using System.Collections.Generic; public class Yuk0 : MonoBehaviour { // YUK0 Lojik0 kodları public YukComponent output; // Use this for initialization void Start () { } // Update is called once per frame void Update () { output.yuk = 0; } } using UnityEngine; using System.Collections; using System.Collections.Generic; public class Yuk1 : MonoBehaviour { // YUK1 Lojik1 kodları public YukComponent output; // Use this for initialization void Start () { } // Update is called once per frame void Update () { output.yuk = 1; } }
using UnityEngine; using System.Collections; using System.Collections.Generic; public class YukComponent : MonoBehaviour {//Yükün pinler arasında aktarılması kodu public System.Collections.Generic.List<YukComponent> hedefler = new System.Collections.Generic.List<YukComponent>(); public YukComponent bag; public int yuk=0; // Use this for initialization void Start () { } // Update is called once per frame
69
void Update () { foreach (YukComponent hedef in hedefler) hedef.yuk = this.yuk; } }
using UnityEngine; using System.Collections; public class Lamba : MonoBehaviour { //Lamba ve ledin üzerindeki kod public YukComponent input; public Light lt; // Use this for initialization void Start () { } // Update is called once per frame void Update () { //pinler arası bağa göre ve yuk degerine göre şartı gerçekleştir if ( input.yuk==1) //lambayı yak lt.intensity = 10; else lt.intensity = 0; //lambayı söndür } } using UnityEngine; using System.Collections; using System.Collections.Generic; public class Switch : MonoBehaviour //Switch kodları { public YukComponent output; public SpriteRenderer mySpriteRenderer; public SpriteRenderer mySpriteRenderer1; public SpriteRenderer mySpriteRenderer2; public SpriteRenderer mySpriteRenderer3; public SpriteRenderer mySpriteRenderer4; public SpriteRenderer mySpriteRenderer5; public SpriteRenderer mySpriteRenderer6; public SpriteRenderer mySpriteRenderer7; public SpriteRenderer mySpriteRenderer8; public SpriteRenderer mySpriteRenderer9; public static bool Degistir = true; public Light switch_Lamb; private void Awake() { } // Use this for initialization void Start() {
70
} // Update is called once per frame void Update() { if (mySpriteRenderer != null) { // if the A key was pressed this frame if (Input.touchCount == 1) { Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.name == "Switch(Clone)") { if ((Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer.flipY = true; output.yuk = 1; switch_Lamb.intensity = 5; Degistir = false; } else if ((!Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer.flipY = false; output.yuk = 0; switch_Lamb.intensity = 0; Degistir = true; } } } } } if (mySpriteRenderer1 != null) { // if the A key was pressed this frame if (Input.touchCount == 1) { Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.name == "Switch1(Clone)") { if ((Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer1.flipY = true; output.yuk = 1; switch_Lamb.intensity = 5;
71
Degistir = false; } else if ((!Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer1.flipY = false; output.yuk = 0; switch_Lamb.intensity = 0; Degistir = true; } } } } } if (mySpriteRenderer2 != null) { // if the A key was pressed this frame if (Input.touchCount == 1) { Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.name == "Switch2(Clone)") { if ((Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer2.flipY = true; output.yuk = 1; switch_Lamb.intensity = 5; Degistir = false; } else if ((!Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer2.flipY = false; output.yuk = 0; switch_Lamb.intensity = 0; Degistir = true; } } } } } if (mySpriteRenderer3 != null) { // if the A key was pressed this frame if (Input.touchCount == 1) {
72
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.name == "Switch3(Clone)") { if ((Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer3.flipY = true; output.yuk = 1; switch_Lamb.intensity = 5; Degistir = false; } else if ((!Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer3.flipY = false; output.yuk = 0; switch_Lamb.intensity = 0; Degistir = true; } } } } } if (mySpriteRenderer4 != null) { // if the A key was pressed this frame if (Input.touchCount == 1) { Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.name == "Switch4(Clone)") { if ((Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer4.flipY = true; output.yuk = 1; switch_Lamb.intensity = 5; Degistir = false; } else if ((!Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer4.flipY = false; output.yuk = 0; switch_Lamb.intensity = 0; Degistir = true;
73
} } } } } if (mySpriteRenderer5 != null) { // if the A key was pressed this frame if (Input.touchCount == 1) { Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.name == "Switch5(Clone)") { if ((Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer5.flipY = true; output.yuk = 1; switch_Lamb.intensity = 5; Degistir = false; } else if ((!Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer5.flipY = false; output.yuk = 0; switch_Lamb.intensity = 0; Degistir = true; } } } } } if (mySpriteRenderer6 != null) { // if the A key was pressed this frame if (Input.touchCount == 1) { Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.name == "Switch6(Clone)") { if ((Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer6.flipY = true; output.yuk = 1; switch_Lamb.intensity = 5;
74
Degistir = false; } else if ((!Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer6.flipY = false; output.yuk = 0; switch_Lamb.intensity = 0; Degistir = true; } } } } } if (mySpriteRenderer7 != null) { // if the A key was pressed this frame if (Input.touchCount == 1) { Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.name == "Switch7(Clone)") { if ((Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer7.flipY = true; output.yuk = 1; switch_Lamb.intensity = 5; Degistir = false; } else if ((!Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer7.flipY = false; output.yuk = 0; switch_Lamb.intensity = 0; Degistir = true; } } } } } if (mySpriteRenderer8 != null) { // if the A key was pressed this frame if (Input.touchCount == 1) {
75
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.name == "Switch8(Clone)") { if ((Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer8.flipY = true; output.yuk = 1; switch_Lamb.intensity = 5; Degistir = false; } else if ((!Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer8.flipY = false; output.yuk = 0; switch_Lamb.intensity = 0; Degistir = true; } } } } } if (mySpriteRenderer9 != null) { // if the A key was pressed this frame if (Input.touchCount == 1) { Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.name == "Switch9(Clone)") { if ((Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer9.flipY = true; output.yuk = 1; switch_Lamb.intensity = 5; Degistir = false; } else if ((!Degistir) && (Input.GetTouch(0).phase == TouchPhase.Began)) { mySpriteRenderer9.flipY = false; output.yuk = 0; switch_Lamb.intensity = 0; Degistir = true;
76
} } } } } } } using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.Events; using UnityEngine.EventSystems; public class MenuSil : MonoBehaviour {// Sahneye eklenen elemanları sil kodu string silText = "SİL"; public int sayac = 0; public Text nerds = null; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (silText== "SİL AKTİF") { ElemanSil(); } } public void OnButtonClick() { if (sayac == 1) { silText = "SİL"; nerds.text = silText; sayac = 0; } else if (sayac == 0) { silText = "SİL AKTİF"; nerds.text = silText; sayac++; } } public void ElemanSil() // menüde silbutonu aktifken sahnedeki kapıları sil { if (Input.touchCount > 0) { Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); RaycastHit hit; if (Physics.Raycast(ray, out hit))
77
{ if (hit.collider.gameObject.name == "AND_2(Clone)" || hit.collider.gameObject.name == "OR_2(Clone)" || hit.collider.gameObject.name == "NAND(Clone)" || hit.collider.gameObject.name == "NOR(Clone)" || hit.collider.gameObject.name == "XOR(Clone)" || hit.collider.gameObject.name == "XNOR(Clone)" || hit.collider.gameObject.name == "BUFFER(Clone)" || hit.collider.gameObject.name == "NOT(Clone)" || hit.collider.gameObject.name == "HIGH1(Clone)" || hit.collider.gameObject.name == "LOW1(Clone)" || hit.collider.gameObject.name == "LAMBA(Clone)" || hit.collider.gameObject.name == "Switch(Clone)" || hit.collider.gameObject.name == "Switch1(Clone)" || hit.collider.gameObject.name == "Switch2(Clone)" || hit.collider.gameObject.name == "Switch3(Clone)" || hit.collider.gameObject.name == "Switch4(Clone)" || hit.collider.gameObject.name == "Switch5(Clone)" || hit.collider.gameObject.name == "Switch6(Clone)" || hit.collider.gameObject.name == "Switch7(Clone)" || hit.collider.gameObject.name == "Switch8(Clone)" || hit.collider.gameObject.name == "Switch9(Clone)" || hit.collider.gameObject.name == "LED(Clone)") { Destroy(hit.transform.gameObject); var pinler = hit.transform.GetComponentsInChildren<PinComponent>(); foreach (var pin in pinler) { pin.BosCizgiyiSil(null); } } } } } } using UnityEngine; using System.Collections; using UnityEngine.UI; public class MenuGirisEkle : MonoBehaviour { //Yükleri lojik0,lojik1,switch ekle kodları public GameObject KopyaHIGH; public GameObject KopyaLOW; public GameObject KopyaSWITCH; public GameObject KopyaSWITCH1; public GameObject KopyaSWITCH2; public GameObject KopyaSWITCH3; public GameObject KopyaSWITCH4; public GameObject KopyaSWITCH5; public GameObject KopyaSWITCH6; public GameObject KopyaSWITCH7; public GameObject KopyaSWITCH8; public GameObject KopyaSWITCH9; [SerializeField] Transform menuPanel1; [SerializeField]
78
GameObject buttonPrefab1; // Use this for initialization void Start() { for (int i = 0; i < 3; i++) { if (i == 0) { GameObject button = (GameObject)Instantiate(buttonPrefab1); button.GetComponentInChildren<Text>().text = "LOGIC 1"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel1; } else if (i == 1) { GameObject button = (GameObject)Instantiate(buttonPrefab1); button.GetComponentInChildren<Text>().text = "LOGIC 0"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel1; } else if (i == 2) { GameObject button = (GameObject)Instantiate(buttonPrefab1); button.GetComponentInChildren<Text>().text = "SWITCH"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel1; } } } public int arttir = 0; // Update is called once per frame void Update() { } public void OnButtonClick(string bName) { if (bName == "LOGIC 1") { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaHIGH, edgeOfScreen, KopyaHIGH.transform.rotation); } else if (bName == "LOGIC 0") {
79
Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaLOW, edgeOfScreen, KopyaLOW.transform.rotation); } else if (bName == "SWITCH") { arttir++; if (arttir == 1) { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaSWITCH, edgeOfScreen, KopyaSWITCH.transform.rotation); } if (arttir == 2) { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaSWITCH1, edgeOfScreen, KopyaSWITCH1.transform.rotation); } if (arttir == 3) { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaSWITCH2, edgeOfScreen, KopyaSWITCH2.transform.rotation); } if (arttir == 4) { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaSWITCH3, edgeOfScreen, KopyaSWITCH3.transform.rotation); } if (arttir == 5) { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaSWITCH4, edgeOfScreen, KopyaSWITCH4.transform.rotation); } if (arttir == 6) { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaSWITCH5, edgeOfScreen, KopyaSWITCH5.transform.rotation); } if (arttir == 7) {
80
Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaSWITCH6, edgeOfScreen, KopyaSWITCH6.transform.rotation); } if (arttir == 8) { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaSWITCH7, edgeOfScreen, KopyaSWITCH7.transform.rotation); } if (arttir == 9) { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaSWITCH8, edgeOfScreen, KopyaSWITCH8.transform.rotation); } if (arttir == 10) { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaSWITCH9, edgeOfScreen, KopyaSWITCH9.transform.rotation); } } } } using UnityEngine; using System.Collections; using UnityEngine.UI; public class MenuKapiEkle : MonoBehaviour { //Sahneye kapı ekleme kodları [SerializeField] Transform menuPanel; [SerializeField] GameObject buttonPrefab; public GameObject KopyaAND; public GameObject KopyaOR; public GameObject KopyaNAND; public GameObject KopyaNOR; public GameObject KopyaXOR; public GameObject KopyaXNOR; public GameObject KopyaBUFFER; public GameObject KopyaNOT; // Use this for initialization void Start () { for (int i = 0; i < 8; i++) { if (i == 0) {
81
GameObject button = (GameObject)Instantiate(buttonPrefab); button.GetComponentInChildren<Text>().text = "AND KAPISI"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel; } else if (i == 1) { GameObject button = (GameObject)Instantiate(buttonPrefab); button.GetComponentInChildren<Text>().text = "OR KAPISI"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel; } else if (i == 2) { GameObject button = (GameObject)Instantiate(buttonPrefab); button.GetComponentInChildren<Text>().text = "NAND KAPISI"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel; } else if (i == 3) { GameObject button = (GameObject)Instantiate(buttonPrefab); button.GetComponentInChildren<Text>().text = "NOR KAPISI"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel; } else if (i == 4) { GameObject button = (GameObject)Instantiate(buttonPrefab); button.GetComponentInChildren<Text>().text = "XOR KAPISI"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel; } else if (i == 5) { GameObject button = (GameObject)Instantiate(buttonPrefab); button.GetComponentInChildren<Text>().text = "XNOR KAPISI"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel; } else if (i == 6) { GameObject button = (GameObject)Instantiate(buttonPrefab);
82
button.GetComponentInChildren<Text>().text = "BUFFER KAPISI"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel; } else if (i == 7) { GameObject button = (GameObject)Instantiate(buttonPrefab); button.GetComponentInChildren<Text>().text = "NOT KAPISI"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel; } } } // Update is called once per frame void Update () { } public void OnButtonClick(string bName) { // Debug.Log(bName); if (bName == "AND KAPISI") { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaAND, edgeOfScreen, KopyaAND.transform.rotation); } else if (bName == "OR KAPISI") { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaOR, edgeOfScreen, KopyaOR.transform.rotation); } else if (bName == "NAND KAPISI") { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaNAND, edgeOfScreen, KopyaNAND.transform.rotation); } else if (bName == "NOR KAPISI") { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaNOR, edgeOfScreen, KopyaNOR.transform.rotation); } else if (bName == "XOR KAPISI") { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaXOR, edgeOfScreen, KopyaXOR.transform.rotation); } else if (bName == "XNOR KAPISI")
83
{ Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaXNOR, edgeOfScreen, KopyaXNOR.transform.rotation); } else if (bName == "BUFFER KAPISI") { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaBUFFER, edgeOfScreen, KopyaBUFFER.transform.rotation); } else if (bName == "NOT KAPISI") { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaNOT, edgeOfScreen, KopyaNOT.transform.rotation); } } } using UnityEngine; using System.Collections; using UnityEngine.UI; public class MenuCikisEkle : MonoBehaviour {//Sahneye çıkış(lamba,led) ekleme public GameObject KopyaLAMBA; public GameObject KopyaLED; [SerializeField] Transform menuPanel2; [SerializeField] GameObject buttonPrefab2; // Use this for initialization void Start () { for (int i = 0; i < 3; i++) { if (i == 0) { GameObject button = (GameObject)Instantiate(buttonPrefab2); button.GetComponentInChildren<Text>().text = "LAMBA"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel2; } else if (i == 1) { GameObject button = (GameObject)Instantiate(buttonPrefab2); button.GetComponentInChildren<Text>().text = "LED"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel2; } } } // Update is called once per frame void Update () {
84
} public void OnButtonClick(string bName) { if (bName == "LAMBA") { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaLAMBA, edgeOfScreen, KopyaLAMBA.transform.rotation); } if (bName == "LED") { Vector2 edgeOfScreen = new Vector2(Random.Range(-2, 2), Random.Range(-2, 2)); Instantiate(KopyaLED, edgeOfScreen, KopyaLAMBA.transform.rotation); } } } using UnityEngine; using System.Collections; public class MenuProgramCikis : MonoBehaviour { //Simülasyon ekranı Çıkış butonu kodları public GameObject PANEL; // Use this for initialization public void ProgramdanCik() { PANEL.SetActive(true); } //Çıkış panelinin evethayırı public void Hayir() { PANEL.SetActive(false); } public void Evet() { Application.Quit(); Debug.Log("ÇIKIŞ"); } } using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.SceneManagement; public class MenuExit : MonoBehaviour { //Simülasyon ekranı Geri ve Çıkış kodları [SerializeField] Transform menuPanel4; [SerializeField] GameObject buttonPrefab4; public GameObject PANEL; public GameObject PANELGERI; // Use this for initialization
85
void Start () { for (int i = 0; i < 2; i++) { if (i == 0) { GameObject button = (GameObject)Instantiate(buttonPrefab4); button.GetComponentInChildren<Text>().text = "GİRİŞ EKRANI"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel4; } else if (i == 1) { GameObject button = (GameObject)Instantiate(buttonPrefab4); button.GetComponentInChildren<Text>().text = "ÇIKIŞ"; string buName = button.GetComponentInChildren<Text>().text; button.GetComponent<Button>().onClick.AddListener( () => OnButtonClick(buName)); button.transform.parent = menuPanel4; } } } // Update is called once per frame void Update () { } public void OnButtonClick(string bName) { Debug.Log(bName); if (bName == "ÇIKIŞ") { PANEL.SetActive(true); } else if (bName== "GİRİŞ EKRANI") { Debug.Log("Geri"); PANELGERI.SetActive(true); } } //Çıkış panelinin evethayırı public void Hayir() { PANEL.SetActive(false); } public void Evet() { Application.Quit(); Debug.Log("ÇIKIŞ"); } //GirişEkranı panelinin evethayırı
86
public void HayirG() { PANELGERI.SetActive(false); } public void EvetG() { // ekranı temizlemek için Debug.Log("Ekranı Temizle"); GameObject[] klones = GameObject.FindGameObjectsWithTag("tem"); foreach (GameObject klon in klones) { GameObject.Destroy(klon); var pinler = klon.GetComponentsInChildren<PinComponent>(); foreach (var pin in pinler) { pin.BosCizgiyiSil(null); } } //buraya kadar SceneManager.LoadScene("GIRIS"); Debug.Log("GERİ"); } } using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.SceneManagement; public class MenuGeri : MonoBehaviour { //Geri Paneli kodları public GameObject PANELGERI; // Use this for initialization public void GeriDon() { Debug.Log("Geri"); PANELGERI.SetActive(true); } //GirişEkranı panelinin evethayırı public void HayirG() { PANELGERI.SetActive(false); } public void EvetG() { SceneManager.LoadScene("GIRIS"); Debug.Log("GERİ"); } } using UnityEngine; using System.Collections; using System.Collections.Generic;
87
public class temizle : MonoBehaviour { //Sahneyi temizle butonu kodları public void ekranitemizle() { Debug.Log("Ekranı Temizle"); GameObject[] klones = GameObject.FindGameObjectsWithTag("tem"); foreach (GameObject klon in klones) { GameObject.Destroy(klon); var pinler = klon.GetComponentsInChildren<PinComponent>(); foreach (var pin in pinler) { pin.BosCizgiyiSil(null); } } } } using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; public class GirisMenu : MonoBehaviour { //Giriş ekranı kodları void Start() { //Ekran yönü yatay olacak şekilde ayarlama Screen.orientation = ScreenOrientation.LandscapeLeft; } public void yeni() { SceneManager.LoadScene("UYG1"); Debug.Log("GİRİŞ"); } public void cikis() { Application.Quit(); Debug.Log("çıkış"); } public void yardim() { SceneManager.LoadScene("YARDIM"); Debug.Log("yardim"); } } using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; public class YardimGeri : MonoBehaviour { //Yardım ekranı geri butonu kod void Start() { //Ekran yönü yatay olacak şekilde ayarlama Screen.orientation = ScreenOrientation.LandscapeLeft; } public void Yardimgeri() { SceneManager.LoadScene("GIRIS"); } }
88
ÖZGEÇMİŞ Adı Soyadı : Ümmüşan ÇITAK Doğum Yeri ve Yılı : Isparta, 1985 Medeni Hali : Evli Yabancı Dili : İngilizce E-posta : [email protected] Eğitim Durumu Lise : Isparta Anadolu Ticaret Meslek Lisesi, 2003 Lisans : SDÜ, Teknik Eğitim Fakültesi, Bilgisayar Sistemleri
Öğretmenliği, 2007 Mesleki Deneyim Bilişim Teknolojileri Öğretmeni (MEB) 2008-…….. (halen) Yayınları Çakır, A., Çelik, Ü., 2007, "Çok Fonksiyonlu Programlanabilir Duyuru & Reklam
Panosu", SDÜ 15. Yıl Müh. Mim. Sempozyumu, 14-16 Kasım, Cilt II, Sy.70-76, Isparta.
Taranmış Fotoğraf
(3.5cm x 3cm)