Inhoudsopgave:

Arduino VGA-console met vijf games - Ajarnpa
Arduino VGA-console met vijf games - Ajarnpa

Video: Arduino VGA-console met vijf games - Ajarnpa

Video: Arduino VGA-console met vijf games - Ajarnpa
Video: Arduino VGA game console - 8 games 2024, Juli-
Anonim
Image
Image
Arduino VGA-console met vijf spellen
Arduino VGA-console met vijf spellen
Arduino VGA-console met vijf spellen
Arduino VGA-console met vijf spellen

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?

Hoe u uw eigen Arduino VGA-console kunt bouwen
Hoe u uw eigen Arduino VGA-console kunt bouwen
Hoe u uw eigen Arduino VGA-console kunt bouwen
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

Bijlage 1: Meer details over het bouwen van de controllers
Bijlage 1: Meer details over het bouwen van de controllers
Bijlage 1: Meer details over het bouwen van de controllers
Bijlage 1: Meer details over het bouwen van de controllers
Bijlage 1: Meer details over het bouwen van de controllers
Bijlage 1: Meer details over het bouwen van de controllers
Bijlage 1: Meer details over het bouwen van de controllers
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: