Sommario:
- Passaggio 1: come costruire la propria console VGA Arduino
- Passaggio 2: giochi di altri autori
- Fase 3: Appendice 1: Maggiori dettagli su come costruire i controller
- Passaggio 4: Appendice 2: alcune considerazioni sui limiti di memoria
Video: Console VGA Arduino con cinque giochi: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
Nei miei precedenti Instructables, ho riprodotto versioni semplificate di alcuni dei giochi arcade classici più popolari, per mezzo di un Arduino nudo e pochi altri componenti. In seguito ne ho uniti cinque in un unico schizzo. Qui mostrerò come puoi costruire una semplice console in grado di giocare a Pong, Breakout, Bomber, Tetris e un giocattolo da disegno ispirato a Etch-a-Sketch. Questa console può essere utilizzata anche per giocare a Snake, e ad altri due giochi scritti da altri autori: Bit Ninja di Sandro Maffiodo aka "Smaffer" e Stacker di Nikita Kurylev.
La caratteristica principale è la generazione di un segnale VGA, grazie alla libreria VGAx, quindi la console necessita di un monitor VGA. Il mio obiettivo, come al solito, è quello di evitare qualsiasi "componente speciale" per costruirlo, quindi non hai bisogno di alcun IC di supporto o scudi! Gli unici componenti sono due potenziometri, cinque pulsanti, poche resistenze e un connettore DSUB15 (VGA). Un altoparlante piezoelettrico è opzionale. Puoi vedere come appaiono questi giochi nelle immagini in questa pagina.
La libreria VGAx consente di utilizzare quattro colori con una risoluzione di 120 x 60 pixel, non molti ma sufficienti per questa console di gioco retrò. La grafica è cruda ma, grazie all'utilizzo dei potenziometri, i giochi girano fluidamente. Sono disponibili anche semplici effetti sonori.
Passaggio 1: come costruire la propria console VGA Arduino
Prima scarica i codici ArduinoVGAgame.ino e/o Snake.ino in fondo a questa pagina e copiali sul tuo PC in una directory con lo stesso nome. Scarica la libreria VGAx da questo link su GitHub. Il modo più semplice è copiarlo nella sottocartella del software Arduino denominata "librerie", per essere immediatamente riconosciuto.
IMPORTANTE: questa libreria funziona per Arduno IDE 1.6.4 ma non è completamente compatibile con versioni precedenti o più recenti.
Carica il codice nella tua scheda Arduino (ho testato sia Uno che Nano). Un avviso per memoria disponibile insufficiente è normale. Se non hai altri errori tutto ok e puoi iniziare subito a costruire la tua console.
Per questo hai bisogno di:
- un Arduino Uno Rev. 3 o Arduino Nano 3.x (ATmega328)
- un connettore DSUB15, ovvero un connettore VGA femmina o un cavo VGA da tagliare.
- resistori: 2 x 68 Ohm e 2 x 470 Ohm e 5 x 1 a 2 kOhm
- due potenziometri lineari da 10 kOhm (va bene anche valori simili)
- cinque pulsanti
- qualche pezzo di cavo
- una o due belle scatole per mettere tutti i componenti.
Facoltativo:
- una breadboard o una strip board
- un altoparlante piezo
Lo schema è riportato all'inizio di questo passaggio, insieme ad un esempio di “console” finita.
lo schema mostra come collegare un pulsante e un potenziometro. Nello specifico, è necessario collegare cinque pulsanti rispettivamente ai pin 5, 10, 11, 12 e 13. L'azione eseguita da ciascun pulsante è descritta nella tabella in alto a destra dello schema. A sinistra è mostrato come collegare un potenziometro (sono necessari due potenziometri ai pin A1 e A2). L'altoparlante deve essere collegato al pin analogico A0.
Ho posizionato la scheda Arduino con il connettore VGA in una scatola di legno, che contiene anche il potenziometro del primo giocatore e quattro pulsanti, mentre il potenziometro del secondo giocatore e il suo pulsante di avvio sono in una scatola separata e più piccola.
Se ti piace questo giocattolo e decidi di riprodurlo, apprezzo se scrivi un commento o invii una foto nella sezione commenti qui sotto.
Passaggio 2: giochi di altri autori
Sandro Maffiodo ha recentemente pubblicato il gioco BitNinja. Puoi trovare maggiori informazioni qui e scaricare il codice qui.
Per utilizzare la mia console, devi solo rimappare il pulsante nel suo codice come segue:
#define BTN_UP 11 (invece di 13)
#define BTN_LEFT 10 (invece di 12)
#define BTN_RIGHT 12 (invece di 11)
Stacker, di Nikita Kurylev, è disponibile qui. Maggiori informazioni qui.
Di nuovo, devi rimappare un pulsante, in una parte diversa del codice: basta sostituire digitalRead(2) con digitalRead(13)
Fase 3: Appendice 1: Maggiori dettagli su come costruire i controller
Puoi realizzare il controller in molti modi diversi, a seconda del materiale disponibile e del tuo gusto.
Mi piace realizzarli con scatole di legno (vedi le foto in questa pagina). Una scatola principale per Arduino, il connettore VGA e i pulsanti del primo lettore e il potenziometro; un secondo (più piccolo) solo per il pulsante e la ruota del secondo giocatore (necessario per Pong e il giocattolo da disegno). Un'altra possibilità è quella di mettere tutto in un'unica scatola più grande.
Per prima cosa consiglio di collegare la porta VGA. Nella prima e nella seconda foto potete vedere alcuni dettagli: notare le due resistenze da 470 Ohm per Rosso e Verde collegate rispettivamente ai pin 6 e 7, e due da 68 Ohm ai pin 3 e 9 per il segnale di sincronizzazione orizzontale e verticale.
Puoi scegliere diverse combinazioni di colori a seconda dei pin che colleghi sul connettore VGA DSUB15, i pin 1, 2 e 3 rappresentano rispettivamente Rosso, Verde, Blu (RGB). Ho collegato i pin 1 e 2, quindi ho la seguente combinazione di colori: (0, 0) = nero; (1, 0) = rosso; (0, 1) = verde; (1, 1) = giallo.
Per tutte le diverse possibilità, consiglio di leggere i dettagli nella pagina dove si scaricano le librerie VGAx.
Non appena il connettore VGA è pronto, puoi preparare tutti gli altri cavi per i pulsanti, le ruote e l'altoparlante (vedi figura 2).
Ora metti tutto insieme: ricorda che ogni pin del pulsante deve essere collegato a massa tramite una resistenza da 1 o 2 kOhm, altrimenti quando il pulsante è aperto lo stato del pin potrebbe essere indefinito. Ciò significa che se il pin viene lasciato disconnesso si può avere una tensione casuale (statica) su di esso che può attivarlo. Vedi per maggiori dettagli lo schema nel secondo passaggio di questo istruibile.
L'ultimo passo è sistemare tutto a posto. Ho usato la pistola per colla a caldo, ma puoi usare il tuo metodo preferito.
Passaggio 4: Appendice 2: alcune considerazioni sui limiti di memoria
È sorprendente che un semplice Arduino sia in grado di generare un segnale VGA e tutti questi giochi insieme. Il vero collo di bottiglia è la mancanza di SRAM. Il microcontrollore AVR ha solo 2048 byte disponibili per memorizzare e manipolare le variabili e la libreria VGAx memorizza le variabili dello schermo in un framebuffer da 120x60 pixel in cui ogni pixel necessita di 2 bit (4 colori), per un totale di 1800 byte. Ciò significa che sono rimasti solo 248 byte per le variabili dello schizzo. Inoltre, secondo la mia esperienza, si dovrebbero lasciare liberi almeno 100 byte per evitare instabilità. Utilizzando oltre 1950 byte di memoria dinamica, il microcontrollore inizia a mostrare un comportamento strano e imprevedibile.
Ciò significa che tutte le variabili devono essere condivise tra i diversi giochi e questo rende il codice abbastanza illeggibile e difficile da eseguire il debug. Non si tratta solo di "aggiungere un nuovo gioco" allo sketch precedente, ma tutto il codice deve essere profondamente modificato e ottimizzato.
Inoltre dovevo utilizzare il formato di variabile minimo possibile: per esempio, per tutte le coordinate dovevo usare "byte" invece di "int" o, in altri casi, dovevo preferire "int" invece di "float".
Infine, il mio ringraziamento va a Sandro Maffiodo aka Smaffer, il creatore della libreria VGAx e del fantastico gioco BitNinja. Senza questa libreria, questo progetto non si sarebbe potuto realizzare.
Grazie anche a Nikita Kurylev per il semplice ma divertente gioco Stacker.
Consigliato:
Joystick e giochi arcade VGA ESP32: 6 passaggi (con immagini)
ESP32 VGA Arcade Games e Joystick: in questo tutorial mostrerò come riprodurre quattro giochi arcade come Tetris - Snake - Breakout - Bomber - utilizzando un ESP32, con l'uscita per un monitor VGA. La risoluzione è di 320 x 200 pixel, in 8 colori. In precedenza ho fatto una versione con
Cinque piccoli progetti puliti: 6 passaggi
Five Neat Little Projects: devo amare i circuiti che lampeggiano e fanno rumore quando mostri l'elettronica ai giovani. Questi cinque circuiti che richiedono solo pochi minuti per essere costruiti, sono facili da modificare per cambiare le velocità di lampeggio o i tempi. Il primo circuito
Come caricare giochi su Arduboy e 500 giochi su flash-cart: 8 passaggi
Come caricare giochi su Arduboy e 500 giochi su Flash-cart: ho realizzato alcuni Arduboy fatti in casa con memoria Flash seriale in grado di memorizzare un massimo di 500 giochi da giocare in viaggio. Spero di condividere come caricare i giochi su di esso, incluso come archiviare i giochi nella memoria flash seriale e creare il tuo pacchetto di gioco consolidato
Mini console di gioco Ardubaby con 500 giochi: 10 passaggi
Mini console di gioco Ardubaby con 500 giochi: grazie al creatore (Kevin Bates), l'Arduboy è una console di gioco a 8 bit di grande successo. C'erano migliaia di giochi scritti dall'hobbista che li condivideva liberamente sul forum della community di Arduboy in modo che più persone possano imparare a programmare. L'hardw
Sensore di inclinazione da cinque centesimi: 4 passaggi (con immagini)
Sensore di inclinazione da cinque centesimi: questo è un sensore di inclinazione di base ispirato ai sensori a sfera e gabbia, ma 2d anziché 3d. Un nichel catturato collega coppie di fili a seconda dell'orientamento del sensore. Questi sono veloci da costruire e piuttosto economici; Li ho ideati per un progetto con