Inhoudsopgave:
- Stap 1: Hoe u uw eigen Arduino VGA-console kunt bouwen?
- Stap 2: Games van andere auteurs
- Stap 3: Bijlage 1: Meer details over het bouwen van de controllers
- Stap 4: Bijlage 2: Enkele overwegingen over de geheugenlimieten
Video: Arduino VGA-console met vijf games - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
In mijn vorige Instructables heb ik vereenvoudigde versies van enkele van de meest populaire klassieke arcadespellen gereproduceerd door middel van een kale Arduino en enkele andere componenten. Later heb ik er vijf samengevoegd tot één schets. Hier zal ik laten zien hoe je een eenvoudige console kunt bouwen die Pong, Breakout, Bomber, Tetris en een tekenspeelgoed geïnspireerd op Etch-a-Sketch kan spelen. Deze console kan ook worden gebruikt om Snake te spelen, en nog twee andere games die zijn geschreven door andere auteurs: Bit Ninja van Sandro Maffiodo aka "Smaffer" en Stacker van Nikita Kurylev.
Het belangrijkste kenmerk is het genereren van een VGA-signaal, dankzij de VGAx-bibliotheek, dus de console heeft een VGA-monitor nodig. Mijn doel is, zoals gewoonlijk, om elke "speciale component" te vermijden om het te bouwen, je hebt dan geen ondersteunende IC of schilden nodig! De enige componenten zijn twee potmeters, vijf knoppen, enkele weerstanden en een DSUB15 (VGA) connector. Een piëzo-luidspreker is optioneel. Je kunt zien hoe deze spellen eruit zien in de afbeeldingen op deze pagina.
De VGAx-bibliotheek maakt het mogelijk om vier kleuren te gebruiken met een resolutie van 120 x 60 pixels, niet veel maar genoeg voor deze retro-gameconsole. De graphic is rauw, maar dankzij het gebruik van de potmeters lopen de games soepel. Er zijn ook eenvoudige geluidseffecten beschikbaar.
Stap 1: Hoe u uw eigen Arduino VGA-console kunt bouwen?
Download eerst de ArduinoVGAgame.ino- en/of Snake.ino-codes onderaan deze pagina en kopieer ze naar uw pc in een map met dezelfde naam. Download de VGAx-bibliotheek via deze link op GitHub. De eenvoudigste manier is om het te kopiëren naar de submap van de Arduino-software met de naam "bibliotheken", zodat het onmiddellijk wordt herkend.
BELANGRIJK: deze bibliotheek werkt voor Arduno IDE 1.6.4 maar is niet volledig compatibel met oudere of nieuwere versies.
Upload de code in je Arduino-bord (ik heb zowel Uno als Nano getest). Een waarschuwing voor weinig beschikbaar geheugen is normaal. Als je geen andere fouten hebt, is alles in orde en kun je meteen beginnen met het bouwen van je eigen console.
Hiervoor heb je nodig:
- een Arduino Uno Rev. 3 of Arduino Nano 3.x (ATmega328)
- een DSUB15-connector, d.w.z. een vrouwelijke VGA-connector of een VGA-kabel die moet worden doorgeknipt.
- weerstanden: 2 x 68 Ohm en 2 x 470 Ohm en 5 x 1 tot 2 kOhm
- twee 10 kOhm lineaire potentiometers (vergelijkbare waarden zijn ook goed)
- vijf knoppen
- een stuk kabel
- een of twee mooie dozen om alle componenten in te doen.
Facultatief:
- een breadboard of een stripboard
- een piëzo-luidspreker
Het schema wordt bovenaan deze stap gerapporteerd, samen met een voorbeeld van een afgewerkte "console".
het schema laat zien hoe je een knop en een potentiometer aansluit. Meer specifiek moet u vijf knoppen aansluiten op respectievelijk pinnen 5, 10, 11, 12 en 13. De actie die door elke knop wordt uitgevoerd, wordt beschreven in de tabel rechtsboven in het schema. Links wordt getoond hoe je een potentiometer aansluit (je hebt twee potentiometers nodig op pinnen A1 en A2). De luidspreker moet worden aangesloten op analoge pin A0.
Ik plaatste het Arduino-bord met de VGA-connector in een houten doos, die ook de potentiometer van de eerste speler en vier knoppen bevat, terwijl de potentiometer van de tweede speler en zijn startknop zich in een aparte en kleinere doos bevinden.
Als je dit speelgoed leuk vindt en je besluit het te reproduceren, stel ik het op prijs als je een opmerking schrijft of een foto stuurt in het commentaargedeelte hieronder.
Stap 2: Games van andere auteurs
Sandro Maffiodo heeft onlangs het spel BitNinja uitgebracht. U kunt hier meer informatie vinden en de code hier downloaden.
Om mijn console te gebruiken, moet je de knop in zijn code als volgt opnieuw toewijzen:
#define BTN_UP 11 (in plaats van 13)
#define BTN_LEFT 10 (in plaats van 12)
#define BTN_RIGHT 12 (in plaats van 11)
Stacker, van Nikita Kurylev, is hier verkrijgbaar. Meer informatie hier.
Nogmaals, je moet één knop opnieuw toewijzen, in een ander deel van de code: vervang gewoon digitalRead(2) door digitalRead(13)
Stap 3: Bijlage 1: Meer details over het bouwen van de controllers
Afhankelijk van het beschikbare materiaal en uw smaak kunt u de controller op veel verschillende manieren realiseren.
Ik realiseer ze graag met houten kisten (zie de foto's op deze pagina). Een hoofddoos voor de Arduino, de VGA-connector en de eerste spelerknoppen en potenziometer; een tweede (kleinere) alleen voor de knop en het wiel van de tweede speler (nodig voor Pong en het tekenspeelgoed). Een andere mogelijkheid is om alles in één grotere doos te doen.
Eerst raad ik aan om de VGA-poort aan te sluiten. In de eerste en tweede foto kun je wat details zien: let op de twee weerstanden van 470 Ohm voor Rood en Groen aangesloten op respectievelijk pinnen 6 en 7, en twee 68 Ohm op pinnen 3 en 9 voor het horizontale en verticale synchronisatiesignaal.
U kunt verschillende kleurencombinaties kiezen, afhankelijk van de pinnen die u aansluit op de VGA DSUB15-connector, de pinnen 1, 2 en 3 vertegenwoordigen respectievelijk Rood, Groen, Blauw (RGB). Ik heb de pinnen 1 en 2 aangesloten, dus ik heb de volgende kleurencombinatie: (0, 0) = zwart; (1, 0) = rood; (0, 1) = groen; (1, 1) = geel.
Voor alle verschillende mogelijkheden raad ik aan om de details te lezen op de pagina waar u de VGAx-bibliotheken downloadt.
Zodra de VGA-connector klaar is, kun je alle andere kabels voorbereiden voor de knoppen, wielen en luidspreker (zie afbeelding 2).
Zet nu alles bij elkaar: onthoud dat elke knoppen met aarde moet worden verbonden via een weerstand van 1 of 2 kOhm, anders kan de status van de pin ongedefinieerd zijn als de knop open is. Dit betekent dat als de pin losgekoppeld blijft, er een willekeurige (statische) spanning op kan staan die deze kan activeren. Zie voor meer details het schema in de tweede stap van dit instructable.
De laatste stap is om alles op zijn plaats te bevestigen. Ik heb het hete-lijmpistool gebruikt, maar je kunt je favoriete methode gebruiken.
Stap 4: Bijlage 2: Enkele overwegingen over de geheugenlimieten
Het is verbazingwekkend dat een eenvoudige Arduino in staat is om een VGA-signaal en al deze spellen samen te genereren. Het echte knelpunt is het ontbreken van SRAM. De AVR-microcontroller heeft slechts 2048 bytes beschikbaar om de variabelen op te slaan en te manipuleren, en de VGAx-bibliotheek slaat de schermvariabelen op in een 120x60 pixels framebuffer waarbij elke pixel 2 bits (4 kleuren) nodig heeft, voor een totaal van 1800 bytes. Dit betekent dat er nog maar 248 bytes over zijn voor de schetsvariabelen. Bovendien moet men naar mijn ervaring ten minste 100 bytes vrij laten om instabiliteit te voorkomen. Met meer dan 1950 bytes dynamisch geheugen begint de microcontroller vreemd en onvoorspelbaar gedrag te vertonen.
Dit betekent dat alle variabelen tussen de verschillende spellen moeten worden gedeeld, en dit maakt de code behoorlijk onleesbaar en moeilijk te debuggen. Het is niet alleen een kwestie van "een nieuw spel toevoegen" aan de vorige schets, maar alle code moet grondig worden gewijzigd en geoptimaliseerd.
Verder moest ik het minimaal mogelijke variabele formaat gebruiken: voor alle coördinaten moest ik bijvoorbeeld "byte" gebruiken in plaats van "int" of in andere gevallen moest ik de voorkeur geven aan "int" in plaats van "float".
Ten slotte gaat mijn dank uit naar Sandro Maffiodo aka Smaffer, de maker van de VGAx-bibliotheek en het geweldige spel BitNinja. Zonder deze bibliotheek had dit project niet gerealiseerd kunnen worden.
Dank ook aan Nikita Kurylev voor het eenvoudige maar grappige spel Stacker.
Aanbevolen:
Speel Nintendo-games op het Idevice met een gratis Wiimote!: 6 stappen
Speel Nintendo-spellen op het Idevice met een gratis Wiimote!: Ben je ooit naar de app store gegaan om een Super Nintendo-spel te kopen, maar je kunt er geen vinden om te spelen. Welnu, je kunt deze nintendo-spellen nu spelen met de snes-emulator van cydia. Met deze emulator kun je Nintendo-games spelen op je idevice, zelfs m
Vijf nette kleine projecten: 6 stappen
Vijf nette kleine projecten: Ik moet dol zijn op circuits die flitsen en geluiden maken wanneer je elektronica aan jonge mensen laat zien. Deze vijf circuits die slechts enkele minuten in beslag nemen, zijn eenvoudig aan te passen om de knippersnelheden of -tijden te wijzigen. Het eerste circuit
Hoge Vijf! - een robothand: 5 stappen
Hoge Vijf! - een robothand: op een dag gingen we in onze cursus Principles of Engineering aan de slag om samengestelde machines te bouwen uit VEX-onderdelen. Toen we begonnen met het bouwen van de mechanismen, hadden we moeite om meerdere complexe componenten te beheren die samen moesten worden gemonteerd. Als maar iemand
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino - Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter - RC Helikopter - RC-vliegtuig met Arduino: 5 stappen (met afbeeldingen)
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino | Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter | RC Helikopter | Rc-vliegtuig met Arduino: een Rc-auto besturen | Quadcopter | Drone | RC vliegtuig | RC-boot, we hebben altijd een ontvanger en zender nodig, stel dat we voor RC QUADCOPTER een 6-kanaals zender en ontvanger nodig hebben en dat type TX en RX is te duur, dus we gaan er een maken op onze
Games uploaden naar Arduboy en 500 games naar Flash-cart: 8 stappen
Spellen uploaden naar Arduboy en 500 spellen naar Flash-cart: Ik heb een zelfgemaakte Arduboy gemaakt met serieel Flash-geheugen dat maximaal 500 spellen kan opslaan om onderweg te spelen. Ik hoop te delen hoe je games kunt laden, inclusief hoe je games opslaat in het seriële flash-geheugen en je eigen geconsolideerde gamepakket kunt maken