Mundarija:

Stackers arkada o'yini: 6 qadam (rasmlar bilan)
Stackers arkada o'yini: 6 qadam (rasmlar bilan)

Video: Stackers arkada o'yini: 6 qadam (rasmlar bilan)

Video: Stackers arkada o'yini: 6 qadam (rasmlar bilan)
Video: Игровой аппарат Mega Stacker Lite 2024, Noyabr
Anonim
Stackers arkada o'yini
Stackers arkada o'yini

Salom bolalar, bugun men siz bilan Ws2812b LEDlari va mikrokontroller/FPGA yordamida qilishingiz mumkin bo'lgan ajoyib arja o'yini bilan bo'lishmoqchiman. Stack Overflow -ni ko'rib chiqing - bu bizning klassik arja o'yini. Maktab loyihasi sifatida boshlangan narsa tezda sevgi ishiga aylandi, chunki biz o'z o'yinimizni rivojlantirishga va undan ko'p narsani o'rganishga (va xD jarayonida o'qishni e'tiborsiz qoldirishga) ko'proq vaqt sarflay boshladik. Oxir-oqibat, bizning o'yinimiz maktabimiz tomonidan shunchalik yaxshi qurilgan va yaxshi qabul qilinganki, u musodara qilingan (o'quvchilarning navbatdagi partiyasi uchun demo material sifatida). Xo'sh, biz har doim ikkinchisini qura olamiz. Qani boshladik!

O'yinning onlayn versiyasi:

1 -qadam: Sizga nima kerak?

Sizga nima kerak?
Sizga nima kerak?
Sizga nima kerak?
Sizga nima kerak?
Sizga nima kerak?
Sizga nima kerak?
Sizga nima kerak?
Sizga nima kerak?

Materiallar:

1. Mikrokontroller/Mikrokompyuter/FPGA - FPGA o'yinimiz mantig'ini amalga oshirish uchun ishlatiladi. Kengashni tanlang, bizning loyihamiz uchun biz Mojo FPGA kartasidan foydalanishimiz kerak. Boshlanmaganlar uchun bu kodlardan ko'ra o'z funktsiyalarini bajarish uchun apparatdan foydalanadigan taxtaning bir turi. Shunday qilib, men Arduino yoki Pi -dan foydalanayotganingizdan past darajadagi va mutlaqo boshqacha deyman. Agar siz boshqa taxtalardan foydalansangiz, siz o'zingizning kodingizni yozishingiz kerak, lekin bu o'yinni kodlash juda oson va salom! Endi siz ham kodlashni o'rganishingiz mumkin!

2. Ws2812b svetodiodlari - Bu erda biz o'yin uchun displey yaratish uchun LEDlardan foydalanamiz. Agar siz xD -dan oldin Ws2812b -ga tegmagan bo'lsangiz, ishlab chiqaruvchi bo'la olmaysiz. Bu bitta LEDni kesib, ularni o'zingiz yoqtirgan shaklga joylashtirishingiz mumkin. Va bu RGB, ya'ni siz xohlagan rangni chiqarishingiz mumkin. Bundan tashqari, FastLED - Ws2812b ni boshqarish uchun Arduino kutubxonasi juda yaxshi ishlab chiqilgan. Agar sizda yo'q bo'lsa, men odamlarga FPGA o'rniga Arduino -dan foydalanishni tavsiya qilaman. Siz LEDlarni Taobao/Amazon -dan sotib olishingiz mumkin, lekin biz o'zimizni Singapurdagi Sim Lim minorasidan sotib oldik.

3. Yog'och-Tashqi qoplama uchun biz qalinligi 1 sm bo'lgan kontrplakni, LED matritsasi uchun esa qalinligi 0,3 sm bo'lgan kontrplakni ishlatganmiz. Biz yog'och qoldiqlarini maktabimizdagi fab laboratoriyasidan topdik.

4. Yorug'lik tarqatuvchi akril - Bizning ekranimiz uchun biz har xil akril turlarini sinab ko'rdik va biz bu yorug'likni tarqatish uchun juda yaxshi bo'lgan PL -422 deb nomlangan muzli akrilni topdik. Agar siz aniq modelni topa olmasangiz, muzli akrillarni qidirib ko'ring. Biz o'zimizni Singapurdagi Dama Plastics kompaniyasidan sotib oldik.

5. Ko'pik taxtasi - Har bir yorug'lik pikselini ajratish uchun bizga panjara tuzilishi kerak edi va bu ko'pik buning uchun ideal materialdir. Biz maktab kitob do'konidan qalinligi 0,5 sm bo'lgan ko'pikli taxta sotib oldik.

6. Katta qizil tugma - OK, bizda qizil tugma bo'lishi shart emas, lekin odamlar bosishi uchun tugmachaning bo'lishi har doim yaxshi! xD Biz uni Singapurdagi Sim Lim minorasida sotib oldik.

Asboblar:

1. Yog'och yopishtiruvchi

2. Lehimlash temir

3. Lehim

4. Simlar. Agar qattiq simlarga qaraganda yumshoq simlar bo'lsa yaxshi bo'ladi. Va bitta yadroli ko'p yadroli.

5. Simlarni ajratuvchi

6. Tel kesuvchi

7. 1 mm matkaplar yordamida burg'ulash

8. O'tkazuvchi arra

9. Tarmoqli arra

Nosozliklarni tuzatish:

1. O'zgaruvchan quvvat manbai birligi

2. Osiloskop

2 -qadam: tezkor prototiplash

Tez prototiplash
Tez prototiplash
Tez prototiplash
Tez prototiplash
Tez prototiplash
Tez prototiplash
Tez prototiplash
Tez prototiplash

Loyihamiz uchun biz LED matritsasini qurishdan va o'yinimizni dasturlashdan oldin tezkor prototipni qo'lladik. Buning sababi shundaki, biz LED matritsasini yaratishni xohlamaymiz, chunki bizning kodlarimiz ishlamaydi yoki o'yin mantig'imiz noto'g'ri.

Uskuna jihatidan, biz birinchi bosqichda yorug'lik naqshlarini o'zimizning oddiy LED matritsasiga o'zgartirish mantig'ini sinab ko'rdik. Mantiq yaxshi ishlayotganini sinab ko'rganimizdan so'ng, biz o'yin mantig'imizni turli qatorlar bilan sinab ko'rish uchun 5 ta Ws2812b LED chizig'ini kesib oldik. Bu amalga oshgandan so'ng, biz LED matritsasini to'liq hajmda ishlab chiqarishni davom ettiramiz.

Biz, shuningdek, PL-422 ni eng yaxshi yorug'lik tarqatuvchi sifatida joylashtirishdan oldin, LED yordamida turli xil akril namunalarini sinab ko'rdik. Va ajratuvchi tuzilish uchun biz LEDning to'liq tarqalishi uchun turli balandliklarni sinab ko'rdik. Oxir -oqibat, biz 4 sm balandlikdagi 3 sm*3 sm kvadratni diffuziya uchun eng yaxshi bo'lishini angladik. Ushbu optimal o'lchamga asoslanib, biz kvadratchalar orasidagi ko'pik uchun 0,5 sm bo'sh joy qoldirib, 5 x 11 LED matritsasi uchun kontrplakning o'lchamiga ham qaror qildik.

Dasturiy ta'minot tarafidan biz iloji boricha modulli bo'lishga harakat qilamiz - biz avval shiftni o'zgartirish funktsiyasini qo'shishni davom ettirishdan oldin LEDlarning yonib turishini tekshiramiz, agar buni qilmasangiz, natijalar halokatli bo'lishi mumkin. Biz buni qiyin yo'l bilan o'rgandik, chunki biz uni disk raskadrovka qila olmasligimizni anglamasdan oldin butun o'yinni katta qismda kodlashga harakat qildik. Voy!

3 -qadam: Kosonni tayyorlash

Qoplamani yasash
Qoplamani yasash
Qoplamani yasash
Qoplamani yasash
Qoplamani yasash
Qoplamani yasash
Qoplamani yasash
Qoplamani yasash

Bizning korpusimiz uchun biz klassik arja mashinasi bilan tanishdik. Birinchidan, biz ingichka kontrplakni kesib oldik, chunki shaklni tezda prototiplash uchun ingichka kontrplakni kesish va sinovdan o'tkazish osonroq va tezroq. O'lchamlarimiz va shaklimizdan qoniqqanimizdan so'ng, biz korpusni qurish uchun qalinroq kontrplakdan foydalana boshladik. Qalinroq kontrplakni kesish uchun biz tasma arra va ingichkasini kesish uchun o'ralgan arra ishlatardik. Shundan so'ng, biz ularni yopishtirish uchun yog'och elim ishlatdik.

Kontrplakning orqa tomonida biz elektronikaga osongina kirishni xohladik, shuning uchun biz uni qulflangan qismga aylantirdik, uni xohlagan vaqtda olib tashlashingiz mumkin.

Tugmani biriktirish uchun biz avval tugmachaning mikrosxemasining diametri (tugmachaning pastki uzun qismi) kattaligida aylana chizdik. Keyin biz chetiga yaqin teshik ochdik va aylanani ko'rish uchun aylantiruvchi arra ishlatdik. Keyin biz tugmachani joylashtirdik va vidalandik.

Bundan tashqari, biz ilgari hisoblagan o'lchamlarga ko'ra, LED matritsamizning asosi sifatida kontrplakning ingichka qismini kesib tashladik.

Eslatma: bosqichma-bosqich bajarilmaganligi uchun uzr so'rayman. Biz qadamlarni hujjatlashtirmaganmiz va qadamlarni hujjatlashtirishimiz kerakligini anglaganimizda, korpus allaqachon tugagan. Diagramma ham oxirgi o'lchovlar emas.

4 -qadam: LED matritsasini yaratish

LED matritsasini yaratish
LED matritsasini yaratish
LED matritsasini yaratish
LED matritsasini yaratish

Biz ilgari kesib o'tgan ingichka bo'lakdan foydalanib, biz har bir LEDning o'rnini belgilaymiz, ko'pikli tuzilishimiz asosida kvadrat chizamiz va LEDni yopishimiz kerak bo'lgan joy sifatida kvadrat o'rtasiga xoch qo'yamiz. Keyin biz simlarning o'tishi uchun LEDning har ikki tomonida 3 ta kichik teshik ochamiz va ularni har bir LEDga lehimlaymiz.

Biz LEDlarning har bir qatorini Ma'lumotlarni kiritish va Ma'lumotlarni chiqarish pinlari bilan bog'laymiz va har bir GND va VCCni umumiy simga lehimlaymiz. Etakchi Data In har bir qator uchun yorug'lik naqshlarini yaratadi va biz uni mikrokontroller/FPGA pinoutiga uladik. Siz shuningdek, oxirgi satr ma'lumotlarini boshqa qatorning etakchi ma'lumot kirishiga lehimlashingiz mumkin. Ws2812b LEDining ishlash usuli shundaki, har bir LEDda simdan kerakli ma'lumotlar olinadi va qolganlari zanjir bo'ylab o'tadi. Biz o'z LEDimizni boshqa ajoyib Instructables -ga asosladik (Aslida, biz uni aynan nusxa ko'chirdik! XD)

Bu erda biz yumshoq simlardan foydalanish muhimligini ham ta'kidlamoqchimiz. Agar siz etakchi ma'lumot uchun pin uchun qattiq va qattiq simlardan foydalansangiz, har safar simni tortganingizda nima bo'ladi, u Ws2812b -dagi mis qoplamani chiqarib yuborishi mumkin. Ushbu loyihada, biz yumshoq simlarga o'tishdan oldin, biz 40 ta LEDni yo'q qildik, bu bizning loyihamiz uchun zarur bo'lgan LEDlarning 1/3 qismi.

Ko'rsatmalar:

5 -qadam: O'yin kodlarini yozish va uskunani tuzatish

O'yin kodlarini yozish va uskunani tuzatish
O'yin kodlarini yozish va uskunani tuzatish
O'yin kodlarini yozish va uskunani tuzatish
O'yin kodlarini yozish va uskunani tuzatish
O'yin kodlarini yozish va uskunani tuzatish
O'yin kodlarini yozish va uskunani tuzatish

Mojo Lucid HDL -da ishlaydi, u eng mashhur til emas. Lucidda biz hech qanday Ws2812b LED kutubxonasini topa olmaymiz, shuning uchun biz o'z kutubxonamizni yozishga murojaat qildik, bu juda qiziq tajriba. Buning uchun biz avval Arduino FastLED kutubxonasi orqali uzatiladigan signalni tahlil qildik va uni takrorlash uchun kodlar yozdik. Bu erda apparat nosozliklarini tuzatishning hiylasi, osiloskop signallarni tahlil qilish uchun juda foydali bo'ladi, o'zingizga ishonchingiz komil bo'lmagan signalni tuzatish yoki boshqa signallarni tekshirish va nusxalash.

Ws2812b kutubxonasini yozganimizdan so'ng, biz o'yin kodiga o'tamiz, biz har bir blokni chapga va o'ngga siljitish uchun Bit shift funktsiyasidan foydalanganmiz va Bitwise AND to AND kvadratchalaridan oldingi qatorga o'tkazganmiz. Siz buni Arduino -da amalga oshirish haqida o'ylashingiz mumkin, bu unchalik qiyin bo'lmasligi kerak. Biz hatto o'yin -kulgi uchun o'yin ekranlarini kodladik!

Bizning o'yinimiz 2 darajadan iborat edi, bu ko'rinadigan stacking o'yini (Yashil) va ikkinchi darajali ko'rinmas istifleme o'yini (Moviy).

Bizda ishchi kodlar va ishlayotgan LED matritsasi bo'lganidan keyin ham, ba'zida biz hali ham chiroqlar miltillashi yoki kerak bo'lmagan paytda yonib turishi kabi muammolarga duch kelamiz. Muammo odatda noto'g'ri topraklama, elektr ta'minoti darajasi yoki shovqin tufayli yuzaga keladi. Bu erda sizga Mojo/Arduino -ning quvvat manbai etarli yoki juda yuqori ekanligini tekshirish uchun o'zgarmaydigan quvvat manbai birligi kabi boshqa apparat nosozliklarini tuzatish vositalari kerak bo'ladi. Mening tajribamga ko'ra, Ws2812b 2,8v - 5v ish kuchlanishining juda keng diapazoniga ega. Bu erda menda quvvatni oshirgandan keyin chiroqlar aqldan ozganini ko'rsatadigan video bor.

Ammo, yana bir bor tekshirib ko'rdikki, bizda noto'g'ri lehim bor edi, ularni qayta lehimlaganimizdan keyin muammomiz hal qilindi. Shuningdek, aralashish yoki o'zaro gaplashish bilan bog'liq muammo bo'lishi mumkin, lekin shukurki, biz hech qachon ularning hech biriga duch kelmaganmiz.

Github kodlari:

Arduino Bitwise Shift:

Arduino Bitwise AND:

6 -qadam: Hammasini bir joyga to'plash

Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash

Sizda korpus va LED matritsasi bor. Endi hamma narsani birlashtirish vaqti keldi. Avval biz ko'pikni old tomoniga va uning orqasida LED matritsasini joylashtiramiz va o'rnini rostladik. Ko'pikning ishqalanishi juda yuqori bo'lgani uchun, faqat ishqalanish o'rnatildi, LED matritsasi esa issiq yopishtirildi. Shundan so'ng biz ekranni panjara oldiga qo'ydik. Keyin biz har bir qatorning pinini mikrokontrolerga uladik va o'ynay boshladik!: D

Bu loyihada menga yoqadigan narsa bu uning egiluvchanligi, siz har doim mikrokontrollerni boshqa o'yinning bir qismi bo'lish uchun qayta dasturlashingiz va animatsiya yoki reaktsiya o'yini kabi narsalarni sinab ko'rishingiz mumkin. Umid qilamanki, bolalar buni qilishni yoqtirishadi va buning uchun biror narsa o'rganishadi. GgEz!

Tavsiya: