Sommario:

Arduino Shooting Game V3: 4 passaggi
Arduino Shooting Game V3: 4 passaggi

Video: Arduino Shooting Game V3: 4 passaggi

Video: Arduino Shooting Game V3: 4 passaggi
Video: Can AI code Flappy Bird? Watch ChatGPT try 2024, Dicembre
Anonim
Image
Image
Arduino Shooting Game V3
Arduino Shooting Game V3
Arduino Shooting Game V3
Arduino Shooting Game V3
Arduino Shooting Game V3
Arduino Shooting Game V3

Questo gioco è per te che usi softair o co2 per sparare ai bersagli. È un gioco.

Per informazioni aggiornate sul gioco e sul supporto:

www.facebook.com/arduinoshooting/

Per la pagina del mio blog sul gioco:

shootinggameblog.wordpress.com

Per i codici sul gioco:

github.com/shootinggame82/Shooting-game-v3

Il gioco di tiro è composto da x bersagli wireless, ogni bersaglio ha un sensore di vibrazione che rileva la vibrazione che si ottiene quando viene effettuato un colpo. I sensori wireless sono un chip Atmega328 (chip Arduino Uno) e hanno una batteria Li-Po di ricarica.

Il controller principale di questo gioco è controllato da un Arduino ed è controllato in serie da un Raspberry Pi.

Allora, come funziona questo gioco? Beh, ci sono 3 modalità di gioco:

Quicktime: gioca X round e spara così velocemente che puoi su ogni bersaglio.

Modalità tempo: spara a più bersagli che puoi in X secondi.

Rapidfire: spara X colpi nel minor tempo possibile.

Il sistema utilizza trasmettitori NRF24L01 per ottenere una buona distanza dal controller principale. Funzionano a 2,6 GHz (lo stesso del WiFi)

Nei miei progetti passati ho usato Piezo per la vibrazione, ma ora vengono utilizzati gli interruttori del sensore di vibrazione. Ma puoi ancora usare Piezo se hai creato la mia vecchia versione di questo gioco.

Il gioco ha un touch screen Raspberry Pi 7 che contiene il sistema web attraverso il quale controlli il gioco. Una stampante terminale stampa i risultati.

Forniture

Per i trasmettitori:

  • X Atmega328 con Arduino Bootloader (a seconda di quanti target)
  • X Interruttore del sensore di vibrazioni
  • X LED blu
  • X LED verde
  • X LED rosso
  • Batteria Li-Po X 3.7v
  • Modulo caricabatterie Li-Po X FC-75 (o un altro modello)
  • Condensatore X 100 uF
  • X Custodie per i sensori
  • X LD1117V33 (Fa un 3,3 V sicuro al trasmettitore)
  • X Moduli NRF24L01
  • X x 3 resistori da 220 Ohm (3 è necessario per un target)
  • X 16 MHz Cristallo
  • X x 2 Condensatori non analizzati 22 pF (2 è necessario per un bersaglio)

Per Arduino principale:

  • 1 Arduino (si consiglia Nano o Uno, è necessario disporre di USB)
  • 1 modulo NRF24L01
  • 1 condensatore da 10 uF

Per il lampone Pi:

  • Raspberry Pi (ho usato 3B)
  • Schermo tattile da 7"
  • ATXRaspi (opzionale ma un buon modulo pulsante di accensione)
  • RTCRaspi (opzionale ma un buon modulo RTC per mantenere l'ora e la data)
  • Stampante termica (opzionale ma necessaria per poter stampare)
  • Scanner di codici a barre (versione USB che funziona come una tastiera, opzionale)
  • Buona potenza a 5 V (ho usato una vecchia USB da 12 V con alimentazione da 2,5 A)

Altre cose:

  • Potenza 12v (ne ho una a 12 Ah)
  • Presa di rete (semplifica la connessione alla rete)
  • Cavi

Passaggio 1: i sensori wireless

I sensori wireless
I sensori wireless
I sensori wireless
I sensori wireless
I sensori wireless
I sensori wireless

Iniziamo a creare i sensori. Io uso 4 sensori per questo gioco. Ma puoi facilmente aggiungere più sensori. I sensori comunicano con un codice a 4 numeri quando il sistema principale invia il codice con quale funzione il sensore con il codice giusto si accenderà e sarà pronto per il bersaglio. La luce blu serve per informare che è quel bersaglio che stai per colpire.

Abbiamo anche un led verde e uno rosso. Il verde si accende sempre per informare che il sensore è acceso. Il rosso si accenderà solo quando la batteria è inferiore a 3,1 V (utilizza la funzione integrata nel chip per calcolare quanto c'è nella batteria.

Il sensore di vibrazione è collegato al pin analogico e ne legge il valore. Quando il valore sta scendendo, il sensore ha rilevato una vibrazione ed è lì che abbiamo registrato il colpo.

Il bersaglio ha una funzione di sicurezza, che nel caso in cui non si colpisca entro X secondi (l'impostazione predefinita è 15 secondi) o se la trasmissione non può essere eseguita, tornerà alla posizione iniziale.

Non ho intenzione di spiegare come cablare, controllare il foglio elettrico per vedere come lo farai. L'unica cosa che non è su di esso, è la batteria, l'interruttore di alimentazione e il caricabatterie. Sta a te decidere come lo vuoi.

IMPORTANTE SUL Modulo NRF24L+:

Può essere doloroso… renderli stabili, combinati con una buona potenza e isolamento attorno ad esso, e il codice li farà funzionare. Per me un condensatore da 10 uF mi darà una connessione stabile e buona, ma per favore prova prima nel caso ti serva, ad esempio, un condensatore da 100 uF. Avvolgili anche prima con un foglio di plastica e poi con un foglio di alluminio per proteggerli dall'interferenza

Anche nel codice, la velocità dati non è necessaria più di 250 Kb, quindi non sarà questo il problema. Ma la PA: myRadio.setPALevel(RF24_PA_MIN);

Nel codice che ho impostato su MIN (questo è durante il test), è il più basso e non utilizzerà così tanta potenza, ma l'intervallo non sarà così lungo. Se hai una potenza stabile e buona per loro, puoi andare fino a RF24_PA_MAX per ottenere il raggio più lungo, MA hanno bisogno di una potenza stabile GOOOOOD per questo. Prova anche BASSO E ALTO (Cambia solo testo MAX) per vedere se ottieni una buona comunicazione. Inoltre otterrai una buona portata su LOW e HIGH a meno che tu non diventi un cecchino

Inoltre tenete i trasmettitori ad almeno un metro di distanza, la chiusura può rendere cattivo il segnale

Testare la comunicazione con alcuni esempi di ping nella libreria NRF24 (Link su GitHub)

Nel codice è necessario impostare il numero identificativo univoco per quel target:

int IDtarg = 3401; //Questo è l'ID di destinazione

int sendID = 2401; //Questo è l'ID della risposta

Sono inoltre disponibili 3 funzioni DEFINE:

#define DEBUG

#define BATTERIA

#define SHAKE //SE SI USA LO SHAKE SWITCH INVECE DEL VECCHIO PIEZO

DEBUG:

Durante il test questo è bene averlo definito. Ma quando li rendi disponibili, non averlo attivato.

BATTERIA:

Se non vuoi avere un controllo della batteria per i target, devi rimuovere questa definizione.

SCUOTERE:

Se hai creato la mia vecchia versione, hai sensori piezoelettrici, quindi rimuovili per ottenere il codice corretto per loro.

Chip ATMEGA328

Invece di un Arduino nano ho deciso di usare il chip ATMEGA328 (con boot loader Uno), sono semplici da programmare basta rimuovere il chip da un Arduino Uno e aggiungere questo chip e caricare il codice. Controlla lo schema elettrico su come costruire i bersagli.

Il codice

Ho scritto il codice con PlatformIO invece di Arduino IDE. È un software migliore da programmare. Quindi il codice è leggermente diverso. Consiglio invece di utilizzare questo software.

La scatola del bersaglio e del trasmettitore

Ho attaccato il sensore e il led blu sul target, e con un cavo phono da 3, 5 mm su 2 m lo collego insieme nella scatola del trasmettitore che contiene il chip atmega, il caricabatteria e il led verde e rosso. Questo è così per proteggerlo dall'essere colpito da proiettili d'acciaio.

Passaggio 2: il controller di gioco

Il controller di gioco
Il controller di gioco
Il controller di gioco
Il controller di gioco
Il controller di gioco
Il controller di gioco
Il controller di gioco
Il controller di gioco

La prossima cosa che dobbiamo fare è creare il controller per i sensori. È un Arduino che utilizza un modulo NRF24L01 per comunicare con i sensori. Nient'altro. L'Arduino viene quindi collegato con USB nel raspberry pi per funzionare.

Ecco come funzionerà. Usa seriale per sapere cosa fare. Il pi invierà comandi seriali. Innanzitutto durante l'installazione invia quanti bersagli hai aggiunto e i numeri di identificazione dei bersagli. Quindi eseguirà la funzione di test e informerà il raspberry pi se comunicano tra loro.

Quando giochi, invierà da pi che tipo di gioco e quanti round/hit usare. Questo è tutto.

È possibile utilizzare i moduli NRF24L01 nel raspberry pi, ma per me Arduino è un'opzione migliore, peccato che non li uso mai in raspberry quindi non so quanto funzionino a lungo termine

C'è un modulo di alimentazione che utilizza 5 v per fornire una corretta alimentazione stabile ai trasmettitori. Puoi usarli con te Arduino (vedi l'immagine) il nome è Socket Adapter Module Board

Quando giochi, i bersagli verranno attivati casualmente uno per uno. Quando uno viene colpito, ne verrà attivato un altro.

Durante il test puoi avere #DEFINE DEBUG attivato per vedere come funziona, ma non quando lo usi nel computer pi, non funzionerà quindi.

Scarica il codice dalla pagina GitHub.

Passaggio 3: Raspberry Pi

Lampone Pi
Lampone Pi
Lampone Pi
Lampone Pi
Lampone Pi
Lampone Pi
Lampone Pi
Lampone Pi

Ora siamo arrivati al Raspberry Pi.

Ho aggiunto alcune funzioni extra in modo da poter avere un pulsante di accensione. L'ATXRaspi 3 è un ottimo modulo, puoi accendere, spegnere e riavviare il pi con un pulsante. Anche un RTCRaspi per mantenere l'ora e la data sul pi. Ha anche permesso di collegare solo un cavo di rete nel caso avessi bisogno di fare alcuni aggiornamenti sul sistema. Li troverai su Lowpowerlab

La stampante termica che trovi su sparkfun e il lettore di codici a barre è disponibile su amazon.

Il computer Pi funziona in modalità kiosk, quindi il browser si aprirà all'avvio. Prima di tutto è necessario disporre di un server web con PHP 7 e mysql sul computer pi. (Ci sono molte guide sul web per questo)

NOTA BENE: se hai intenzione di utilizzare una stampante termica con raspberry pi che ha il bluetooth integrato, devi prima disabilitarlo

Lo script python ha bisogno di pyserial e lo installi: sudo apt-get install python-serial

Per far funzionare mysql, installa quanto segue:

sudo apt-get install mysql-python sudo apt-get install python-mysql.connector

suso apt-get install pymysql

Ora puoi controllare Arduino tramite seriale e anche aggiornare il database mysql.

Il prossimo passo è creare uno script python per connettersi a mysql.

In tutti e tre gli script Python cambia la connessione al tuo database mysql.

Il prossimo passo è fare in modo che lo script python venga eseguito all'inizio.

Ci sono tre python script.game.py è il più importante di tutti, quello contiene la funzione di gioco.print.py questo è necessario solo se utilizzerai una stampante termica per stampare.ean.py è necessario solo se lo sei intenzione di utilizzare lo scanner di codici a barre.

Per farli avviare automaticamente modifico:

sudo nano /etc/rc.local

e aggiungi quanto segue in fondo prima dell'uscita 0:

sudo python /home/pi/Gamefiles/game.py &sudo python /home/pi/Gamefiles/print.py &sudo python /home/pi/Gamefiles/ean.py &

Per favore cambia nel posto corretto per il tuo script Python e non dimenticare il segno & alla fine

Ora dobbiamo creare una modalità kiosk per il browser web, prima rimuovi il cursore:

sudo apt-get install unclutter

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart

ora in quel file trova e commenta:

@xscreensaver -no-splash # commenta questa riga per disabilitare lo screensaver

Sotto che aggiungi:

@xset s off @xset -dpms @xset s noblank @chromium-browser --noerrdialogs --force-device-scale-factor=1.25 --kiosk

Il prossimo passo per rimuovere tutti i testi di avvio e altre cose aggiungi anche la tua schermata di avvio ecco una guida rapida:

sudo nano /boot/config.txt e in basso adddisable_splash=1

Rimuovi il messaggio di testo sotto l'immagine splash:

sudo nano /usr/share/plymouth/themes/pix/pix.script

Trova e rimuovi (o commenta):

message_sprite = Sprite();message_sprite. SetPosition(screen_width * 0.1, screen_height * 0.9, 10000);

e:

mia_immagine = Image. Text(testo, 1, 1, 1);message_sprite. SetImage(mia_immagine);

Ora rimuoviamo i messaggi di avvio:

sudo nano /boot/cmdline.txt

sostituire "console=tty1" con "console=tty3"

e alla fine della riga aggiungi:

splash quiet plymouth.ignore-serial-consoles logo.nologo vt.global_cursor_default=0

E sostituisci il pi splash con il tuo:

sudo cp ~/my_splash-p.webp" />

Ora hai la tua schermata di avvio personalizzata per il tuo gioco. Il tuo computer pi è ora pronto per gestire il gioco. Quindi vai al passaggio successivo!

Passaggio 4: imposta il gioco

A questo punto hai creato il gioco.

La prima cosa che devi fare è configurare il webbsystem. Carica il database sul tuo server mysql. Il file si trova nella cartella include e denominato database.sql

Il prossimo passo è modificare il file di configurazione, lo trovi nel nome della cartella include config.phpCambia le informazioni di accesso al database in modo che lo script funzioni.

Il sistema web è multilingua ed è scritto in inglese. È disponibile una traduzione svedese. Per creare più lingue è necessario un software chiamato Poedit.

Per aggiungere più lingua al sistema web è necessario modificare i18n_setup.php e aggiungere nell'array:

return in_array($locale, ['en_US', 'sv_SE']); (Riga 23)

Anche per cambiare la lingua di default è necessario cambiare nella riga 27: $lang = 'en_US'; cambia l'en_US nella tua lingua.

i file della lingua devono essere inseriti in locales/LANGCODE/LC_MESSAGES/ ed essere nominati main.mo (Cambia langcode nella tua lingua)

per cambiare la tastiera nel file selectplayers.php cambia la lingua: "en", //en per l'inglese sv per il layout svedese: 'qwerty', //qwerty per l'inglese swedish-qwerty per lo svedese

Li trovi sulla linea 218 e 219

Le lingue disponibili sono nella cartella: asset/js/keyboard/languages & layouts sono in asset/js/keyboard/layouts e aggiungi i file corretti alla riga 118 e 119 (sostituisci quello che trovi lì ora)

Aggiungi obiettivi

Per aggiungere obiettivi vai su localhost/admin/ e fai clic su aggiungi obiettivi.

Devi aggiungere un nome per il target e l'ID target univoco e inviare l'ID, aggiungere tutti i target che hai.

Aggiungi giochi

Devi anche aggiungere alcuni giochi. Vai su localhost/admin/ e fai clic su aggiungi gioco

Devi aggiungere un nome per il gioco, una descrizione, giocatori minimi e massimi che tipo di gioco, anche quanto è difficile il gioco tra 1 e 5. E come è il gioco, quindi per il gioco Rapidfire aggiungi quanti colpi (esempio 30) per il rinvio quanti giri (ad esempio 8) e per quanto tempo andranno a giocare (ad esempio 60 per un minuto)

Inizia il gioco

Quando accendi il gioco, eseguirà il test di destinazione. Quindi gli obiettivi devono essere attivi prima di avviare il sistema principale. Se tutti superano il test puoi usare il sistema, ma se non lo fanno non puoi usarlo. Cercherà di comunicare fino a quando non riceveranno risposta.

Buona fortuna

Bene, questo è tutto, per supporto e informazioni sull'aggiornamento del codice segui la mia pagina Facebook per questo gioco, così posso darti una risposta veloce. Troverai i link in alto qui.

Consigliato: