İçindekiler:
- Adım 1: Neye İhtiyacınız Var?
- Adım 2: Hızlı Prototipleme
- Adım 3: Muhafazanın Yapılması
- Adım 4: LED Matrisinin Yapılması
- Adım 5: Oyun Kodlarının Yazılması ve Donanımın Hata Ayıklanması
- Adım 6: Her Şeyi Bir Araya Getirmek
Video: Stackers Arcade Oyunu: 6 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Merhaba arkadaşlar, bugün sizlerle bir sürü Ws2812b LED ve bir mikrodenetleyici/FPGA ile yapabileceğiniz bu muhteşem atari oyununu paylaşmak istiyorum. İşte Stack Overflow - klasik bir arcade oyununun donanım uygulamamız. Bir okul projesi olarak başlayan şey, oyunumuzu geliştirmek ve ondan daha fazla şey öğrenmek için daha fazla zaman harcamaya başladığımızda (ve bu süreçte çalışmalarımızı ihmal ettiğimizde xD) hızla bir aşk emeği haline geldi. Sonunda, oyunumuz o kadar iyi inşa edildi ve okulumuz tarafından iyi karşılandı ki, el konuldu (bir sonraki öğrenci grubu için demo materyali olarak). Her zaman ikinci bir tane inşa edebiliriz. Başlayalım!
Oyunun çevrimiçi versiyonu:
Adım 1: Neye İhtiyacınız Var?
Malzemeler:
1. a Mikrodenetleyici/Mikrobilgisayar/FPGA - FPGA, oyunumuzun mantığını uygulamak için kullanılır. Tahtanızı seçin, projemiz için Mojo FPGA kartını kullanmamız gerekiyor. Yeni başlayanlar için, kodlardan ziyade işlevlerini uygulamak için donanımı kullanan bir kart türüdür. Bu nedenle, Arduino veya Pi kullanmaktan oldukça düşük ve tamamen farklı olduğunu söyleyebilirim. Başka tahtalar kullanıyorsanız, kendi kodunuzu yazmanız gerekir, ancak bu oyunun kodlanması oldukça kolaydır ve hey! Artık kodlamayı da öğrenebilirsiniz!
2. Ws2812b LED'leri - Burada oyunumuzun ekranını oluşturmak için LED'leri kullanıyoruz. xD'den önce Ws2812b'lere dokunmadıysanız, yapıcı olamazsınız. Tek adreslenebilir yani tek ledleri kesip istediğiniz formasyona yapıştırabilirsiniz. Ve RGB, istediğiniz herhangi bir rengi çıkarabileceğiniz anlamına gelir. Ayrıca FastLED - Ws2812b'yi kontrol etmek için Arduino kütüphanesi çok iyi geliştirilmiştir. Elinizde yoksa FPGA yerine Arduino kullanmalarını tavsiye ederim. LED'leri Taobao/Amazon'dan satın alabilirsiniz, ancak bizimkileri Singapur'daki Sim Lim kulesinden aldık.
3. Ahşap - Dış kasa için 1cm kalınlığında kontrplak ve LED matrisi için 0.3cm kalınlığında kontrplak kullandık. Okulumuzun muhteşem laboratuarından hurda odun tedarikimizi bulduk.
4. Işık Yayıcı Akrilik - Ekranımız için farklı akrilik türleri denedik ve ışığı yaymak için gerçekten iyi olan PL-422 adlı bu buzlu akriliği bulduk. Tam modeli bulamıyorsanız, buzlu akriliklere bakmayı deneyin. Bizimkini Singapur'daki Dama Plastics'ten aldık.
5. Köpük Pano - Her bir ışık pikselini ayırmak için bir ızgara yapısına ihtiyacımız vardı ve bu köpük bunu yapmak için ideal malzeme. Okul kitapçımızdan 0,5 cm kalınlığında köpük tahta aldık.
6. Büyük Kırmızı Düğme - Tamam, bizim için bu kadar büyük bir kırmızı düğmeye sahip olmamıza gerek yok ama insanların çarpması için bir düğmeye sahip olmak her zaman iyidir! xD Singapur'daki Sim Lim kulesinden aldık.
Aletler:
1. Ahşap Tutkalı
2. Havya
3. Lehim
4. Teller. Sert olanlara kıyasla yumuşak telleriniz varsa en iyisidir. Ve çok çekirdekli ile karşılaştırıldığında tek çekirdek.
5. Tel striptizci
6. Tel kesici
7. 1 mm'lik matkap uçları ile delin
8. Kaydırma testeresi
9. Şerit testere
Hata ayıklama:
1. Değişken Güç Kaynağı Ünitesi
2. Osiloskop
Adım 2: Hızlı Prototipleme
Projemiz için LED matrisimizi oluşturmadan ve oyunumuzu programlamadan önce hızlı prototipleme kullandık. Bunu yapmamızın nedeni, sadece kodlarımızın çalışmadığını veya oyun mantığımızın kusurlu olduğunu anlamak için LED matrisi oluşturmak istemememizdir.
Donanım tarafında, ilk aşamada, kendi basit LED matrisimiz üzerinde ışık düzenlerini değiştirme mantığımızı test ettik. Mantığın iyi çalıştığını test ettikten sonra, sadece oyun mantığımızı farklı satırlarla test etmek için 5 Ws2812b LED şeritlerini kesmeye gittik. Bu işe yaradığında, LED matrisini tam ölçekte üretmeye devam ediyoruz.
PL-422'nin en iyi ışık difüzörü olduğuna karar vermeden önce LED ile farklı akrilik numunelerini de test ettik. Ayırıcı yapı için, LED'in tamamen dağılması için farklı yükseklikleri de test ettik. Sonunda difüzyon için en iyisinin 4cm yüksekliğinde 3cm*3cm kare olduğunu fark ettik. Bu optimal ölçüye dayanarak, kareler arasında köpük için 0,5 cm boşluk bırakarak 5 x 11 LED matris için gereken kontrplak boyutunun ne olduğuna da karar verdik..
Yazılım tarafında, mümkün olduğu kadar modüler olmaya çalışıyoruz - ilk olarak vites değiştirme işlevini eklemeye geçmeden önce LED'lerin yanıp yanmadığını test ediyoruz ve ardından diğerlerini test ediyoruz. Bunu yapmazsanız sonuçlar felaket olabilir. Hata ayıklayamayacağımızı fark etmeden önce tüm oyunu büyük bir yığın halinde kodlamaya çalışırken bunu zor yoldan öğrendik. Ah!
Adım 3: Muhafazanın Yapılması
Kasamız için klasik atari makinesi hisleri ve görünümleri ile gittik. İlk olarak, ince kontrplak kesmek ve test etmek daha kolay ve daha hızlı olduğu için şekli hızlı bir şekilde prototiplemek için biraz ince kontrplak kestik. Boyutlarımızdan ve şeklimizden memnun kaldığımızda, kasayı oluşturmak için daha kalın kontrplak kullanmaya başladık. Daha kalın kontrplakları kesmek için şerit testere ve daha ince olanları kesmek için bir kaydırma testeresi kullandık. Daha sonra bunları birbirine yapıştırmak için ahşap tutkalı kullandık.
Kontrplakın arkası için, içindeki elektronik aksama kolayca erişmek istedik, bu nedenle istediğiniz zaman kolayca çıkarabileceğiniz yerine kilitlenen bir parça haline getirdik.
Düğmeyi takmak için önce düğmenin mikro şalter çapı büyüklüğünde (düğmenin alt uzun kısmı) bir daire çizdik. Daha sonra kenara yakın bir delik açtık ve daire testereyi kullanarak daireyi geçtik. Sonra düğmeyi yerleştirdik ve vidaladık.
Ayrıca daha önce hesapladığımız ölçülere göre LED matrisimizin tabanı olarak ince bir parça kontrplak kestik.
Not: Adım adım işlem eksikliği için özür dilerim. Adımları tam olarak belgelemedik ve adımları belgelememiz gerektiğini anladığımızda, kaplama zaten yapıldı. Diyagram ayrıca nihai boyutlar değildir.
Adım 4: LED Matrisinin Yapılması
Daha önce kestiğimiz ince parçayı kullanarak, köpük yapımıza göre bir kare çizerek ve LED'i yapıştırmamız gereken yer olarak karenin ortasına bir haç çizerek önce her bir LED'in konumunu işaretliyoruz. Daha sonra kabloların geçmesi için LED'in her iki tarafına da 3 küçük delik açıp her bir LED'e lehimliyoruz.
Her bir LED sırasını Data In ve Data Out pinleri ile zincirleme bağlarız ve her GND ve VCC'yi ortak bir kabloya lehimleriz. Önde gelen Veri Girişi, her sıra için ışık desenleri üretecek ve biz bunu mikrodenetleyici/FPGA'nın pin çıkışına bağladık. Ayrıca bir satırın son Veri Çıkışını başka bir satırın önde gelen Veri Girişine lehimleyebilirsiniz. Ws2812b LED'inin çalışma şekli, her LED'in gerekli verileri telden alacak ve geri kalanını zincire iletecek bir IC içermesidir. LED'imizi başka bir fantastik Instructables'a dayandırdık (Aslında, tam olarak kopyaladık! xD)
Burada yumuşak tel kullanmanın önemini de vurgulamak istiyoruz. Önde gelen Data In pini için sert, sert teller kullanırsanız, kabloyu her çektiğinizde Ws2812b'nizdeki bakır dolguyu çekip onu yok edebilir. Bu projede soft kablolara geçmeden önce projemiz için gerekli olan ledlerin 1/3'ü olan toplam 40 led'i imha ettik.
Eğitilebilir:
Adım 5: Oyun Kodlarının Yazılması ve Donanımın Hata Ayıklanması
Mojo, orada en popüler dil olmayan Lucid HDL'de çalışır. Lucid'de herhangi bir Ws2812b LED kitaplığı bulamıyoruz, bu nedenle kendi kitaplığımızı yazmaya başvurduk, bu çok ilginç bir deneyim. Bunu yapmak için önce Arduino'nun FastLED kütüphanesini kullanarak iletilen sinyali analiz ettik ve bunu kopyalamak için kodlar yazdık. İşte bir donanım hata ayıklama hilesi, osiloskop, ister emin olmadığınız kendi sinyalinizde hata ayıklamak isterse diğer sinyalleri kontrol edip kopyalamak olsun, sinyalleri analiz etmek için çok, çok kullanışlıdır.
Ws2812b için kütüphaneyi yazdıktan sonra oyunun koduna geçiyoruz, her bloğu sola ve sağa hareket ettirmek için Bit shift fonksiyonlarını kullandık ve her satırın karelerini bir önceki satıra Bitwise AND to AND ile kullandık. Bunu Arduino'da uygulamayı da düşünebilirsiniz, ki bu o kadar da zor olmamalı. Hatta eğlenmek için oyun ekranlarını bile kodladık!
Oyunumuz, görünen istifleme oyunu (Yeşil) ve ikinci seviye görünmez istifleme oyunu (Mavi) olmak üzere 2 seviyelidir.
Çalışan kodlarımız ve çalışan LED matrisimiz olmasına rağmen, bazen ışıkların titremesi veya olmaması gerektiği halde ışıkların yanması gibi sorunlarla karşılaşıyoruz. Sorun genellikle yanlış topraklama, güç kaynağı seviyesi veya parazitten kaynaklanır. Mojo/Arduino'nun güç kaynağının yeterli veya çok yüksek olup olmadığını kontrol etmek için değişken güç kaynağı ünitesi gibi diğer donanım hata ayıklama araçlarına ihtiyaç duyacağınız yer burasıdır. Tecrübelerime göre, Ws2812b, 2.8v - 5v arasında oldukça geniş bir çalışma voltajı aralığına sahiptir. Burada gücü artırdıktan sonra ışıkların tamamen çılgına döndüğünü gösteren bir videom var.
Ancak, daha fazla kontrol, bazı uygun olmayan lehimlerimiz olduğunu ortaya çıkardı, onları bir kez daha lehimledikten sonra sorunumuz çözüldü. Parazit veya karşılıklı konuşma ile ilgili bir sorun da olabilir, ama neyse ki hiçbiriyle karşılaşmadık.
Github kodları:
Arduino Bitwise Shift:
Arduino Bitwise VE:
Adım 6: Her Şeyi Bir Araya Getirmek
Kasaya ve LED matrisine sahipsiniz. Artık her şeyi bir araya getirme zamanı. Önce köpüğü öne, arkasına da LED matrisi yerleştirip konumunu ayarlıyoruz. Köpüğün çok yüksek sürtünmesi olduğundan, LED matrisi yerine sıcak yapıştırılırken sadece sürtünmeyle monte edilmiştir. Bundan sonra ekranı ızgaranın önüne yerleştirdik. Daha sonra her satırın pinini mikrodenetleyiciye taktık ve oynamaya başladık!:NS
Bu projeyle ilgili sevdiğim bir şey esnekliğidir, mikrodenetleyiciyi her zaman başka bir oyunun parçası olacak şekilde yeniden programlayabilir ve animasyon veya reaksiyon oyunu yapmak gibi bir şey deneyebilirsiniz. Umarım bunu yapmaktan zevk alırsınız ve bunu yapmak için bir şeyler öğrenirsiniz. GgEz!
Önerilen:
BBC Micro:bit ve Scratch - Etkileşimli Direksiyon & Sürüş Oyunu: 5 Adım (Resimlerle)
BBC Micro:bit ve Scratch - Etkileşimli Direksiyon Simidi ve Sürüş Oyunu: Bu haftaki sınıf ödevlerimden biri, yazdığımız bir Scratch programıyla arayüz oluşturmak için BBC Micro:bit'i kullanmak. Bunun, ThreadBoard'umu gömülü bir sistem oluşturmak için kullanmak için mükemmel bir fırsat olduğunu düşündüm! Scratch p için ilham kaynağım
Arduino Kullanarak 3 Boyutlu Labirent Oyunu: 8 Adım (Resimlerle)
Arduino ile 3d Labirent Oyunu: Merhaba arkadaşlar bugün ARDUINO UNO kullanarak bir labirent oyunu yapacağız.Arduino Uno en çok kullanılan tahta olduğu için onunla oyun yapmak çok güzel. Bu Eğitilebilir Kitapta, joystickler kullanılarak kontrol edilen labirent oyununu yapalım. Unutma
Executive Par 3 Golf Oyunu için Otomatik Puanlama: 12 Adım (Resimlerle)
Executive Par 3 Golf Oyunu için Otomatik Puanlama: Geçenlerde taşınabilir ve hem içeride hem de dışarıda oynanabilen eğlenceli bir oyun oynama hakkında bir Talimat yayınladım. Buna “Executive Par 3 Golf Oyunu” denir. Her oyuncunun 9 "delik" puanını kaydetmek için bir kopya puan kartı tasarladım. De olduğu gibi
Arduino Sorta Sudoku Oyunu: 3 Adım (Resimlerle)
Arduino Sorta Sudoku Oyunu: Birçok insan Sudoku oynamayı sever ve torunlar tahmin oyunlarını sever, ben de taşınabilir bir “Sorta Sudoku” oyunu yapmaya karar verdim. Benim versiyonumda oyun bir 4x4 ızgaradır ancak yalnızca bir numara verilmiştir. Buradaki fikir, inci içindeki sayıların geri kalanını tahmin etmektir
Cyclone LED Arcade Oyunu: 4 Adım
Cyclone LED Arcade Game: Bu projenin amacı, Arduino kullanarak çocuklar için etkileşimli ve eğlenceli olacak basit bir oyun yaratmaktı. Cyclone atari oyununun gençken en sevdiğim atari oyunlarından biri olduğunu hatırlıyorum, bu yüzden onu kopyalamaya karar verdim. T