Inhoudsopgave:

Stackers Arcade Game - Ajarnpa
Stackers Arcade Game - Ajarnpa

Video: Stackers Arcade Game - Ajarnpa

Video: Stackers Arcade Game - Ajarnpa
Video: How To Win On The Stacker Arcade Machine | Arcade Games Tips & Tricks 2024, November
Anonim
Stackers Arcade-spel
Stackers Arcade-spel

Hallo allemaal, vandaag wil ik dit geweldige arcadespel met jullie delen dat je kunt maken met een heleboel Ws2812b-LED's en een microcontroller/FPGA. Zie Stack Overflow - onze hardware-implementatie van een klassiek arcadespel. Wat begon als een schoolproject werd al snel een liefdeswerk toen we meer en meer tijd begonnen te besteden aan het ontwikkelen van ons spel en er meer van leerden (en daarbij onze studies verwaarloosden xD). Uiteindelijk was ons spel zo goed gebouwd en goed ontvangen door onze school dat het in beslag werd genomen (als demomateriaal voor de volgende lichting studenten). We kunnen altijd een tweede bouwen. Laten we beginnen!

Online versie van het spel:

Stap 1: Wat heb je nodig?

Wat heb je nodig?
Wat heb je nodig?
Wat heb je nodig?
Wat heb je nodig?
Wat heb je nodig?
Wat heb je nodig?
Wat heb je nodig?
Wat heb je nodig?

Materialen:

1. een Microcontroller/Microcomputer/FPGA - De FPGA wordt gebruikt om de logica van ons spel te implementeren. Kies je board, voor ons project zijn we verplicht het Mojo FPGA board te gebruiken. Voor niet-ingewijden is het een type bord dat hardware gebruikt om zijn functies te implementeren in plaats van codes. Daarom zou ik zeggen dat het een vrij laag niveau is en compleet anders dan wanneer je Arduino of Pi gebruikt. Als je andere borden gebruikt, moet je je eigen code schrijven, maar dit spel is vrij eenvoudig te coderen en hé! Nu kunt u ook leren coderen!

2. Ws2812b-LED's - Hier gebruiken we de LED's om het display voor onze game te bouwen. Je kunt geen maker zijn als je die van Ws2812b niet eerder hebt aangeraakt dan xD. Het is enkel adresseerbaar, wat betekent dat u enkele LED's kunt afsnijden en in elke gewenste formatie kunt plakken. En het is RGB, wat betekent dat je elke gewenste kleur kunt uitvoeren. Verder is FastLED - de Arduino-bibliotheek voor het aansturen van Ws2812b zeer goed ontwikkeld. Ik zou mensen aanraden om Arduino te gebruiken in plaats van de FPGA als je er geen hebt. U kunt de LED's kopen bij Taobao/Amazon, maar wij kochten de onze bij de Sim Lim-toren in Singapore.

3. Hout - Voor de externe behuizing gebruikten we multiplex van 1 cm dik en voor de LED-matrix gebruikten we triplex van 0,3 cm dik. We hebben onze voorraad sloophout gevonden in het fablab van onze school.

4. Lichtverstrooiend acryl - Voor ons scherm hebben we verschillende soorten acryl geprobeerd en we vonden dit matte acryl genaamd PL-422, dat echt goed is voor het verspreiden van licht. Als je het exacte model niet kunt vinden, kijk dan eens naar matte acrylverf. Die van ons kochten we bij Dama Plastics in Singapore.

5. Foamboard - Om elke afzonderlijke lichtpixel te scheiden, hadden we een rasterstructuur nodig en dit schuim is het ideale materiaal om dit te doen. We kochten foamboard van 0,5 cm dik in onze schoolboekhandel.

6. Grote rode knop - Oké, het is niet nodig voor ons om zo'n grote rode knop te hebben, maar het is altijd goed om een knop te hebben waarop mensen kunnen dichtslaan! xD We hebben hem gekocht bij Sim Lim tower in Singapore.

Gereedschap:

1. Houtlijm

2. Soldeerbout

3. Soldeer

4. Draden. Het is het beste als je zachte draden hebt in vergelijking met de stijvere. En single core vergeleken met multicore.

5. Draadstripper

6. Draadknipper

7. Boor met boren van 1 mm

8. Figuurzagen

9. Lintzaag

Debuggen:

1. Variabele voedingseenheid

2. Oscilloscoop

Stap 2: Snelle prototypen

Snelle prototypen
Snelle prototypen
Snelle prototypen
Snelle prototypen
Snelle prototypen
Snelle prototypen
Snelle prototypen
Snelle prototypen

Voor ons project hebben we rapid prototyping toegepast voordat we onze LED-matrix bouwden en onze game programmeerden. De reden hiervoor is dat we de LED-matrix niet willen bouwen om te beseffen dat onze codes niet werken of dat onze spellogica op de een of andere manier gebrekkig is.

Aan de hardwarekant hebben we in de eerste fase zojuist onze logica getest op het verschuiven van de lichtpatronen op onze eigen eenvoudige LED-matrix. Nadat we hadden getest dat de logica goed werkt, gingen we erop uit om strips van 5 Ws2812b-LED's uit te knippen om onze spellogica met verschillende rijen te testen. Als dat lukt, gaan we verder met het fabriceren van de LED-matrix op ware grootte.

We hebben ook verschillende acrylstalen getest met de LED voordat we genoegen namen met PL-422 als de beste lichtverspreider. En voor de scheidingsstructuur hebben we ook verschillende hoogtes getest om de LED volledig te laten diffunderen. Uiteindelijk realiseerden we een vierkant van 3 cm * 3 cm met een hoogte van 4 cm om het beste te zijn voor diffusie. Op basis van deze optimale maat hebben we ook besloten wat de maat is van multiplex die nodig is voor een 5 x 11 LED-matrix door een opening van 0,5 cm voor het schuim tussen de vierkanten te laten.

Aan de softwarekant proberen we zo modulair mogelijk te zijn - we testen eerst of de LED's kunnen branden voordat we doorgaan met het toevoegen van de shift-functie, en dan andere. De resultaten kunnen catastrofaal zijn als je dit niet doet. We hebben dit op de harde manier geleerd toen we probeerden het hele spel in een groot deel te coderen voordat we ons realiseerden dat we het niet konden debuggen. Au!

Stap 3: Het maken van de behuizing

De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken

Voor onze behuizing gingen we voor het klassieke gevoel en uiterlijk van een arcade-machine. Eerst snijden we wat dun triplex om snel een prototype van de vorm te maken, omdat het gemakkelijker en sneller is om dun triplex te snijden en te testen. Toen we eenmaal tevreden waren met onze afmetingen en vorm, begonnen we dikker multiplex te gebruiken om de behuizing te bouwen. We gebruikten een lintzaag om door het dikkere triplex te snijden en een figuurzaag om door de dunnere te snijden. Daarna hebben we ze met houtlijm aan elkaar gelijmd.

Voor de achterkant van het triplex wilden we gemakkelijk toegang hebben tot de elektronica binnenin, daarom hebben we er een lock-in-place-stuk van gemaakt dat je gemakkelijk kunt verwijderen wanneer je maar wilt.

Om de knop te bevestigen, hebben we eerst een cirkel getekend ter grootte van de diameter van de microschakelaar van de knop (het onderste lange deel van de knop). Vervolgens boorden we een gat in de buurt van de rand en gebruikten de figuurzaag om een cirkel door te zagen. Daarna hebben we de knop geplaatst en erin geschroefd.

We snijden ook een dun stuk multiplex als basis voor onze LED-matrix volgens de maten die we eerder hebben berekend.

Opmerking: mijn excuses voor het ontbreken van een stapsgewijs proces. We hebben de stappen niet helemaal gedocumenteerd en tegen de tijd dat we ons realiseerden dat we de stappen moesten documenteren, was de behuizing al klaar. Het diagram is ook niet de uiteindelijke afmetingen.

Stap 4: De LED-matrix maken

De LED-matrix maken
De LED-matrix maken
De LED-matrix maken
De LED-matrix maken

Met behulp van het dunne stuk dat we eerder hebben uitgesneden, markeren we eerst de positie van elke LED door een vierkant te tekenen op basis van onze schuimstructuur en een kruis in het midden van het vierkant als de plaats waar we de LED moeten plakken. Dan boren we ook 3 kleine gaatjes aan elke kant van de LED om de draden door te laten komen en solderen ze aan elke LED.

We verbinden elke rij LED's met hun Data In- en Data Out-pinnen en we solderen elke GND en VCC aan een gemeenschappelijke draad. De leidende Data In genereert de lichtpatronen voor elke rij en we hebben deze verbonden met de pinout van de microcontroller/FPGA. U kunt ook de laatste Data Out van een rij solderen aan de leidende Data In van een andere rij. De manier waarop de Ws2812b LED werkt, is dat elke LED een IC bevat die de vereiste gegevens van de draad haalt en de rest door de keten stuurt. We hebben onze LED gebaseerd op een andere fantastische Instructables (we hebben het zelfs precies gekopieerd! xD)

Hier willen we ook wijzen op het belang van het gebruik van zachte draden. Als u starre, harde draden gebruikt voor de leidende Data In-pin, kan het gebeuren dat elke keer dat u aan de draad trekt, de koperen bekleding op uw Ws2812b wordt verwijderd, waardoor deze wordt vernietigd. In dit project hebben we, voordat we overgingen op zachte draden, in totaal 40 LED's vernietigd, wat 1/3 is van de LED's die nodig zijn voor ons project.

Instructable:

Stap 5: Spelcodes schrijven en hardware debuggen

De spelcodes schrijven en hardware debuggen
De spelcodes schrijven en hardware debuggen
De spelcodes schrijven en hardware debuggen
De spelcodes schrijven en hardware debuggen
De spelcodes schrijven en hardware debuggen
De spelcodes schrijven en hardware debuggen

Mojo draait op Lucid HDL, wat niet de meest populaire taal is die er is. We kunnen geen Ws2812b LED-bibliotheken vinden in Lucid, daarom hebben we onze toevlucht genomen tot het schrijven van onze eigen bibliotheek, wat een zeer interessante ervaring is. Om dat te doen, hebben we eerst het signaal geanalyseerd dat wordt doorgegeven met behulp van Arduino's FastLED-bibliotheek en hebben we codes geschreven om dat te repliceren. Hier is een trucje voor het debuggen van hardware, de oscilloscoop is heel erg handig om signalen te analyseren, of het nu gaat om het debuggen van je eigen signaal waarvan je niet zeker bent of het controleren en kopiëren van andere signalen.

Nadat we de bibliotheek voor de Ws2812b hebben geschreven, gaan we verder met coderen voor het spel, we gebruikten de Bit shift-functies om elk blok naar links en naar rechts te verplaatsen en gebruikten Bitwise AND om de vierkanten van elke rij naar de vorige rij te EN. Je kunt er ook aan denken om dat in Arduino te implementeren, wat niet zo moeilijk hoeft te zijn. We hebben zelfs spelschermen gecodeerd voor de lol!

Ons spel had 2 niveaus, namelijk het zichtbare stapelspel (groen) en het tweede niveau onzichtbare stapelspel (blauw).

Zelfs nadat we een werkende codes en werkende LED-matrix hadden, worden we soms nog steeds geconfronteerd met problemen zoals flikkerende lichten of lichten die oplichten wanneer ze dat niet zouden moeten doen. Het probleem is meestal te wijten aan onjuiste aarding, stroomvoorzieningsniveau of interferentie. Hier heb je andere hardware debugging tools nodig, zoals een variabele voeding om te controleren of de Mojo/Arduino's voeding voldoende of te hoog is. In mijn ervaring heeft de Ws2812b een behoorlijk breed scala aan werkspanningen van 2,8v - 5v. Hier heb ik een video die laat zien dat de lichten helemaal gek worden nadat ik het vermogen heb verhoogd.

Bij verdere controle bleek echter dat we wat verkeerd soldeer hadden, nadat we ze opnieuw hadden gesoldeerd, was ons probleem opgelost. Er kan ook een probleem zijn met interferentie of overspraak, maar gelukkig hebben we daar nooit mee te maken gehad.

Github-codes:

Arduino Bitwise Shift:

Arduino Bitwise EN:

Stap 6: Alles samenbrengen

Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten
Alles bij elkaar zetten

Je hebt de behuizing en de LED-matrix. Het is nu tijd om alles op een rijtje te zetten. Eerst plaatsen we het schuim op de voorkant en de LED-matrix erachter en verstellen we de positie. Omdat schuim een zeer hoge wrijving heeft, werd het gewoon op wrijving gemonteerd terwijl de LED-matrix heet op zijn plaats is gelijmd. Daarna hebben we het scherm voor het raster geplaatst. We hebben toen de pin van elke rij op de microcontroller aangesloten en begonnen te spelen!:NS

Een ding dat ik leuk vind aan dit project is de flexibiliteit, je kunt de microcontroller altijd herprogrammeren om deel uit te maken van een ander spel en iets proberen zoals het maken van een animatie of een reactiespel. Ik hoop dat jullie het leuk vinden om dit te maken en iets te leren om dit te maken. GgEz!

Aanbevolen: