Sommario:
- Forniture
- Passaggio 1: i sensori wireless
- Passaggio 2: il controller di gioco
- Passaggio 3: Raspberry Pi
- Passaggio 4: imposta il gioco
Video: Arduino Shooting Game V3: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-31 10:21
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
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
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
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:
Fai da te 37 LED Arduino Roulette Game: 3 passaggi (con immagini)
Fai da te 37 LED Arduino Roulette Game: Roulette è un gioco da casinò che prende il nome dalla parola francese che significa piccola ruota
ARDUINO + SCRATCH Shooting Game: 6 passaggi
ARDUINO + SCRATCH Shooting Game: Salva la tua torta !!!È in pericolo. Ci sono quattro mosche che si avvicinano. Hai solo 30 secondi per sparare alle mosche e salvare la tua torta
Arduino Flappy Bird - Arduino 2.4" TFT Touchscreen SPFD5408 Progetto Bird Game: 3 passaggi
Arduino Flappy Bird | Arduino 2.4" TFT Touchscreen SPFD5408 Bird Game Project: Flappy Bird era un gioco troppo popolare lì in pochi anni e molte persone lo hanno creato a modo loro, così come io, ho creato la mia versione di flappy bird con Arduino e l'economico TFT da 2,4 pollici Touchscreen SPFD5408, quindi cominciamo
Carro armato Lego EV3 con taglio laser Nerf Ball Shooting: 4 passaggi
Carro armato Lego EV3 di tiro con la palla Nerf tagliata al laser: Per il progetto finale del mio semestre 1A in Ingegneria meccatronica presso l'Università di Waterloo, abbiamo creato un carro armato tagliato al laser con il kit Lego EV3 (era necessario) che sparava palle Nerf. in alcun modo una relazione di progettazione completa. Se tu
The Shooting ArteFact: 4 passaggi (con immagini)
The Shooting ArteFact: The Shooting ArteFact è un pezzo di design speculativo. Il suo scopo è quello di aumentare la consapevolezza sul numero di sparatorie che avvengono negli Stati Uniti ogni anno. Ogni volta che una persona viene dichiarata morta su http://www.gunviolencearchive.org/, Shooting