Mündəricat:

İstifleyiciler Arcade Oyunu: 6 Adım (Şəkillərlə birlikdə)
İstifleyiciler Arcade Oyunu: 6 Adım (Şəkillərlə birlikdə)

Video: İstifleyiciler Arcade Oyunu: 6 Adım (Şəkillərlə birlikdə)

Video: İstifleyiciler Arcade Oyunu: 6 Adım (Şəkillərlə birlikdə)
Video: OLSLİFT - YARI AKÜLÜ TRANSPALET - SEMI BATTERY PALLET TRUCK 2024, Noyabr
Anonim
İstifleyiciler Arcade Oyunu
İstifleyiciler Arcade Oyunu

Salam uşaqlar, bu gün bir dəstə Ws2812b LED və mikrokontrolör/FPGA ilə edə biləcəyiniz bu heyrətamiz oyununu sizinlə bölüşmək istəyirəm. Bax Stack Overflow - klassik bir arcade oyununun hardware tətbiqimiz. Bir məktəb layihəsi olaraq başlayan şey, oyunumuzu inkişaf etdirmək və ondan daha çox şey öyrənmək üçün (və xD prosesində araşdırmalarımıza laqeyd yanaşmaq) getdikcə daha çox vaxt sərf etməyə başladığımız üçün tezliklə bir sevgi əməyinə çevrildi. Sonda, oyunumuz məktəbimiz tərəfindən o qədər yaxşı quruldu və yaxşı qarşılandı ki, müsadirə edildi (növbəti şagird qrupu üçün demo materialı olaraq). Yaxşı, həmişə ikincisini qura bilərik. Gəlin başlayaq!

Oyunun onlayn versiyası:

Addım 1: Nə lazımdır?

Nə lazımdır?
Nə lazımdır?
Nə lazımdır?
Nə lazımdır?
Nə lazımdır?
Nə lazımdır?
Nə lazımdır?
Nə lazımdır?

Materiallar:

1. Mikrokontrolör/Mikrokompüter/FPGA - FPGA oyunumuzun məntiqini həyata keçirmək üçün istifadə olunur. Lövhənizi seçin, layihəmiz üçün Mojo FPGA lövhəsini istifadə etməyimiz tələb olunur. Təcrübəsizlər üçün, kodlardan çox funksiyalarını yerinə yetirmək üçün aparatdan istifadə edən bir lövhə növüdür. Buna görə, Arduino və ya Pi istifadə etdiyinizdən daha aşağı səviyyəli və tamamilə fərqli olduğunu söyləyərdim. Digər lövhələrdən istifadə edirsinizsə, öz kodunuzu yazmalısınız, ancaq bu oyunu kodlaşdırmaq olduqca asandır və hey! İndi kodlaşdırmağı da öyrənə bilərsiniz!

2. Ws2812b LEDləri - Burada LED -lərdən oyunumuz üçün ekran qurmaq üçün istifadə edirik. Xs -dən əvvəl Ws2812b -ə toxunmasanız, istehsalçı ola bilməzsiniz. Tək LED -ləri kəsib bəyəndiyiniz hər hansı bir formaya yapışdıra biləcəyiniz tək ünvanlı bir mənadır. İstədiyiniz hər hansı bir rəng çıxara biləcəyiniz RGB deməkdir. Bundan əlavə, FastLED - Ws2812b -ni idarə etmək üçün Arduino kitabxanası çox yaxşı inkişaf etmişdir. İnsanlara FPGA yoxsa Arduino istifadə etmələrini tövsiyə edərdim. LEDləri Taobao/Amazon -dan satın ala bilərsiniz, amma biz Sinqapurdakı Sim Lim qülləsindən aldıq.

3. Ağac-Xarici korpus üçün 1 sm qalınlığında kontrplak və LED matris üçün 0,3 sm qalınlığında kontrplak istifadə etdik. Tullantı odun tədarükümüzü məktəbimizin fab laboratoriyasından tapdıq.

4. İşıq yayan akril - Ekranınız üçün fərqli akril növləri sınadıq və işığı yaymaq üçün həqiqətən yaxşı olan bu buzlu akril PL -422 tapdıq. Tam modeli tapa bilmirsinizsə, donmuş akril axtarmağa çalışın. Sinqapurdakı Dama Plastics -dən özümüzü aldıq.

5. Köpük lövhəsi - Hər bir fərdi işığın pikselini ayırmaq üçün bir şəbəkə quruluşuna ehtiyacımız var və bu köpük bunun üçün ideal materialdır. Məktəbimizin kitab mağazasından 0,5 sm qalınlığında köpük lövhə aldıq.

6. Böyük Qırmızı Düymə - Tamam, bu qədər böyük bir qırmızı düyməyə sahib olmağımıza ehtiyac yoxdur, amma insanların sıxmaq üçün düyməsinə sahib olmaq həmişə yaxşıdır! xD Sinqapurdakı Sim Lim qülləsindən aldıq.

Alətlər:

1. Taxta yapışqan

2. Havya

3. Lehim

4. Tellər. Sərt tellərə nisbətən yumşaq telləriniz varsa ən yaxşısıdır. Və çox nüvəli ilə müqayisədə tək nüvəli.

5. Tel çıxarıcı

6. Tel kəsici

7. 1 mm matkap ucları ilə qazın

8. Gediş mişarı

9. Şerit mişar

Hata Ayıklama:

1. Dəyişən Güc Təchizatı Birimi

2. Osiloskop

Addım 2: Sürətli Prototipləşdirmə

Sürətli Prototipləşdirmə
Sürətli Prototipləşdirmə
Sürətli Prototipləşdirmə
Sürətli Prototipləşdirmə
Sürətli Prototipləşdirmə
Sürətli Prototipləşdirmə
Sürətli Prototipləşdirmə
Sürətli Prototipləşdirmə

Layihəmiz üçün LED matrisimizi qurmadan və oyunumuzu proqramlaşdırmadan əvvəl sürətli prototipdən istifadə etdik. Bunun səbəbi, kodlarımızın işləmədiyini və ya oyun məntiqimizin qüsurlu olduğunu başa düşmək üçün LED matrisini qurmaq istəməməyimizdir.

Donanım tərəfində, ilk mərhələdə, işıq nümunələrini öz sadə LED matrisimizə dəyişdirmək məntiqimizi sınadıq. Məntiqin yaxşı işlədiyini sınadıqdan sonra, oyun məntiqimizi fərqli sıralarla sınamaq üçün 5 Ws2812b LED şeridini kəsməyə çıxdıq. Nəticə çıxdıqdan sonra LED matrisini tam miqyasda hazırlamağa davam edirik.

PL-422-ni ən yaxşı işıq yayıcısı olaraq həll etməzdən əvvəl LED ilə fərqli akril nümunələri də sınaqdan keçirdik. Ayrıcı quruluş üçün, LED -in tam yayılması üçün fərqli yüksəklikləri də sınadıq. Nəticədə, yayılma üçün ən yaxşısı olmaq üçün 4 sm hündürlüyə malik 3cm*3cm kvadrat həyata keçirdik. Bu optimal ölçüyə əsaslanaraq, kvadratlar arasındakı köpük üçün 0,5 sm boşluq buraxaraq 5 x 11 LED matris üçün lazım olan kontrplakın ölçüsünə də qərar verdik.

Proqram tərəfində, mümkün olduğunca modul olmağa çalışırıq - əvvəlcə shift funksiyasını əlavə etməzdən əvvəl LED -lərin yandırıla biləcəyini yoxlayırıq və bunu etməsəniz nəticələr fəlakətli ola bilər. Hata ayıklaya bilməyəcəyimizi başa düşməzdən əvvəl bütün oyunu böyük bir hissəyə kodlamağa çalışdığımız üçün bunu çətin şəkildə öyrəndik. Vay!

Addım 3: Qutunun hazırlanması

Qutunun hazırlanması
Qutunun hazırlanması
Qutunun hazırlanması
Qutunun hazırlanması
Qutunun hazırlanması
Qutunun hazırlanması
Qutunun hazırlanması
Qutunun hazırlanması

Kassamız üçün klassik arcade maşın hissləri və görünüşləri ilə getdik. Birincisi, incə kontrplak kəsmək və sınamaq daha asan və daha sürətli olduğu üçün şəkli tez bir şəkildə prototip etmək üçün bir neçə nazik kontrplak kəsdik. Ölçülərimizdən və formamızdan razı qaldıqdan sonra, korpusu qurmaq üçün daha qalın kontrplak istifadə etməyə başladıq. Daha qalın kontrplakları kəsmək üçün bant mişarından və daha incələri kəsmək üçün sürüşmə mişarından istifadə etdik. Bundan sonra, onları yapışdırmaq üçün taxta yapışqan istifadə etdik.

Kontrplakın arxa tərəfində, içərisindəki elektronikaya asanlıqla daxil olmaq istədik, buna görə də istədiyiniz zaman asanlıqla çıxara biləcəyiniz bir kilidi olan bir parça halına gətirdik.

Düyməni bağlamaq üçün əvvəlcə düymənin mikroswitch diametrinin (düymənin alt uzun hissəsi) ölçüsündə bir dairə çəkdik. Daha sonra kənarına yaxın bir delik açdıq və bir dairəni görmək üçün sürüşmə mişarını istifadə etdik. Sonra düyməni qoyduq və vidaladıq.

Daha əvvəl hesabladığımız ölçülərə görə LED matrisimizin əsası olaraq nazik bir kontrplak parçası da kəsdik.

Qeyd: Mərhələ-mərhələ olmadığına görə üzr istəyirəm. Adımları sənədləşdirməmişik və addımları sənədləşdirməli olduğumuzu başa düşdüyümüz zaman korpus artıq tamamlanmışdır. Diaqram da son ölçülər deyil.

Addım 4: LED matrisinin hazırlanması

LED matrisinin hazırlanması
LED matrisinin hazırlanması
LED matrisinin hazırlanması
LED matrisinin hazırlanması

Daha əvvəl kəsdiyimiz nazik parçanı istifadə edərək, əvvəlcə köpük quruluşumuza əsaslanan bir kvadrat çəkərək və LED -in yapışdırılması lazım olan yer olaraq meydanın ortasında bir xaç çəkərək hər LED -in mövqeyini qeyd edirik. Bundan sonra, tellərin keçməsi üçün LED -in hər tərəfində 3 kiçik delik qazırıq və hər bir LED -ə lehimləyirik.

Hər bir LED satırını Məlumat Giriş və Məlumat pinləri ilə bağlayırıq və hər GND və VCC-ni ortaq bir telə lehimləyirik. Aparıcı Data In, hər bir sıra üçün işıq nümunələri yaradacaq və biz onu mikrokontrolör/FPGA pinoutuna bağladıq. Bir satırdakı son məlumatları başqa bir cərgənin aparıcı məlumat girişinə də lehimləyə bilərsiniz. Ws2812b LED -in işləmə üsulu, hər bir LED -in lazım olan məlumatları teldən götürəcək və qalanını zəncirdən keçirəcək bir IC -nin olmasıdır. LED -inizi başqa bir fantastik Təlimata əsasladıq (Əslində tam olaraq kopyaladıq! XD)

Burada yumşaq tellərin istifadəsinin vacibliyini də vurğulamaq istərdik. Aparıcı Məlumat Girişi üçün sərt, sərt tellərdən istifadə edirsinizsə, hər dəfə teldən çəkdiyiniz zaman Ws2812b -də onu məhv edəcək mis yastığı çıxara bilər. Bu layihədə, yumşaq tellərə keçməzdən əvvəl, layihəmiz üçün lazım olan LEDlərin 1/3 hissəsi olan cəmi 40 LED -i məhv etdik.

Təlimat verilə bilər:

Addım 5: Oyun Kodlarının Yazılması və Avadanlıq Ayıklama

Oyun Kodlarının Yazılması və Avadanlıqların Hata Ayarlanması
Oyun Kodlarının Yazılması və Avadanlıqların Hata Ayarlanması
Oyun Kodlarının Yazılması və Avadanlıqların Hata Ayarlanması
Oyun Kodlarının Yazılması və Avadanlıqların Hata Ayarlanması
Oyun Kodlarının Yazılması və Avadanlıqların Hata Ayarlanması
Oyun Kodlarının Yazılması və Avadanlıqların Hata Ayarlanması

Mojo, ən populyar dil olmayan Lucid HDL üzərində işləyir. Lucid -də heç bir Ws2812b LED kitabxanası tapa bilmirik, buna görə öz kitabxanamızı yazmağa müraciət etdik, bu çox maraqlı bir təcrübədir. Bunu etmək üçün əvvəlcə Arduinonun FastLED kitabxanasından istifadə edərək ötürülən siqnalı təhlil etdik və bunu təkrarlamaq üçün kodlar yazdıq. Budur, cihaz ayıklama hiyləsi, osiloskop siqnalları təhlil etmək üçün çox faydalıdır, hətta əmin olmadığınız öz siqnalınızı düzəltmək və ya digər siqnalları yoxlamaq və kopyalamaq.

Ws2812b üçün kitabxana yazdıqdan sonra, oyunun koduna davam edirik, hər bir bloku sola və sağa köçürmək üçün Bit shift funksiyalarından istifadə etdik və Bitwise AND -a və hər cərgənin kvadratlarını əvvəlki sıraya istifadə etdik. Bunu Arduinoda tətbiq etməyi də düşünə bilərsiniz, bu o qədər də çətin olmamalıdır. Əylənmək üçün hətta oyun ekranlarını kodlaşdırdıq!

Oyunumuzun görünən yığma oyunu (Yaşıl) və ikinci səviyyəli görünməz yığma oyunu (Mavi) olan 2 səviyyəsi vardı.

İş kodlarımız və işləyən LED matrislərimiz olsa da, bəzən yenə də işıqların titrəməsi və ya olmamalı olduğu zaman işıqların yanması kimi problemlərlə qarşılaşırıq. Problem ümumiyyətlə səhv topraklama, enerji təchizatı səviyyəsi və ya müdaxilədən qaynaqlanır. Mojo/Arduino -nun enerji təchizatının kifayət qədər və ya çox yüksək olub olmadığını yoxlamaq üçün dəyişən enerji təchizatı vahidi kimi digər hardware ayıklama vasitələrinə ehtiyacınız olduğu yer budur. Təcrübəmdə, Ws2812b 2.8v - 5v arasında olduqca geniş bir işləmə gərginliyinə malikdir. Burada gücümü artırdıqdan sonra işıqların dəli olduğunu göstərən bir videom var.

Ancaq sonrakı yoxlama nəticəsində müəyyən bir lehim olduğumuz ortaya çıxdı, yenidən lehimləndikdən sonra problemimiz həll edildi. Müdaxilə və ya danışmaqla bağlı bir problem də ola bilər, amma şükürlər olsun ki, heç biri ilə qarşılaşmamışıq.

Github kodları:

Arduino Bitwise Shift:

Arduino Bitwise AND:

Addım 6: Hər şeyi bir yerə yığın

Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq

Qutusu və LED matrisi var. İndi hər şeyi bir yerə yığmağın vaxtıdır. Əvvəlcə köpüyü ön tərəfə və arxasında LED matrisini yerləşdiririk və mövqeyi düzəldirik. Köpük çox yüksək sürtünmə qabiliyyətinə malik olduğundan, LED matrisi yerində isti şəkildə yapışdırılarkən sadəcə sürtünmə quraşdırılmışdır. Bundan sonra ekranı şəbəkənin qarşısına qoyduq. Sonra hər cərgənin pinini mikrokontrolöre bağladıq və oynamağa başladıq!: D

Bu layihədə bəyəndiyim bir şey onun elastikliyidir, hər zaman başqa bir oyunun bir hissəsi olmaq üçün mikrokontrolörü yenidən proqramlaşdıra və animasiya və ya reaksiya oyunu kimi bir şey sınaya bilərsiniz. Ümid edirəm bunu etməkdən zövq alırsınız və bunu etmək üçün bir şey öyrənəcəksiniz. GgEz!

Tövsiyə: