Taula de continguts:

Joc de trets Arduino V3: 4 passos
Joc de trets Arduino V3: 4 passos

Vídeo: Joc de trets Arduino V3: 4 passos

Vídeo: Joc de trets Arduino V3: 4 passos
Vídeo: CS50 Live, серия 003 2024, Desembre
Anonim
Image
Image
Joc de trets Arduino V3
Joc de trets Arduino V3
Joc de trets Arduino V3
Joc de trets Arduino V3
Joc de trets Arduino V3
Joc de trets Arduino V3

Aquest joc és per a vosaltres que utilitzeu airsoft o co2 per disparar contra objectius. És un joc.

Per obtenir informació actualitzada sobre el joc i l'assistència:

www.facebook.com/arduinoshooting/

Per a la pàgina del meu bloc sobre el joc:

shootinggameblog.wordpress.com

Per obtenir els codis sobre el joc:

github.com/shootinggame82/Shooting-game-v3

El joc de trets consisteix en x objectius sense fil, cada objectiu té un sensor de vibració que detecta la vibració que es produeix quan es produeix un cop. Els sensors sense fils són un xip Atmega328 (xip Arduino Uno) i tenen bateria Li-Po recarregada.

El controlador principal d’aquest joc està controlat per un Arduino i es controla en sèrie des d’un Raspberry Pi.

Com funciona aquest joc? Doncs es tracta de 3 modes de joc:

Quicktime: juga X rondes i dispara tan ràpidament com puguis en cada objectiu.

Mode de temps: Dispara a tants objectius com puguis en X segons.

Rapidfire: dispara X trets en el moment més ràpid.

El sistema ens envia transmissors NRF24L01 per obtenir una bona distància del controlador principal. Funcionen a 2,6 GHz (el mateix que funciona amb WiFi)

En els meus projectes anteriors he utilitzat Piezo per a la vibració, però ara s’utilitzen els interruptors del sensor de vibració, però encara podeu utilitzar Piezo si heu creat la meva versió anterior d’aquest joc.

El joc té una pantalla tàctil Raspberry Pi de 7 que conté el sistema web que controla el joc. Una impressora de terminal imprimeix els resultats.

Subministraments

Per a transmissors:

  • X Atmega328 amb Arduino Bootloader (depèn de quants objectius)
  • Interruptor del sensor de vibració X.
  • X Led blau
  • X Led verd
  • X Led vermell
  • Bateria X 3.7v Li-Po
  • Mòdul de carregador Li-Po X FC-75 (o un altre model)
  • Condensador X 100 uF
  • X Caixes per als sensors
  • X LD1117V33 (crea un transmissor segur de 3,3 V)
  • Mòduls X NRF24L01
  • Resistors X x 3 220 Ohm (es necessiten 3 per a un objectiu)
  • Cristall X 16 MHz
  • X x 2 Condensadors no explorats 22 pF (calen 2 per a un objectiu)

Per a Arduino principal:

  • 1 Arduino (es recomana Nano o Uno, cal tenir USB)
  • 1 mòdul NRF24L01
  • 1 condensador de 10 uF

Per a gerds Pi:

  • Raspberry Pi (he utilitzat 3B)
  • Pantalla tàctil de 7"
  • ATXRaspi (opcional, però un bon mòdul de botó d'engegada)
  • RTCRaspi (Opcional, però un bon mòdul RTC per mantenir l'hora i la data)
  • Impressora tèrmica (opcional però necessària per poder imprimir)
  • Escàner de codis de barres (versió USB que funciona com un teclat, opcional)
  • Bona potència de 5V (he utilitzat un vell USB de 12v amb una potència de 2,5 A)

Altres coses:

  • Potència de 12V (en tinc un a 12 Ah)
  • Socket de xarxa (faciliteu la connexió a la xarxa)
  • Cables

Pas 1: els sensors sense fils

Els sensors sense fils
Els sensors sense fils
Els sensors sense fils
Els sensors sense fils
Els sensors sense fils
Els sensors sense fils

Comencem a fabricar els sensors: faig servir 4 sensors per a aquest joc. Però podeu afegir més sensors. Els sensors es comuniquen amb un codi de 4 números quan el sistema principal envia el codi amb quina funció s’encendrà el sensor amb el codi correcte i estarà llest per a l’objectiu. La llum blava és per informar que és aquell objectiu que voleu colpejar.

També tenim un led verd i un vermell. El verd sempre s’encén per informar que el sensor està engegat. El vermell només s’encendrà quan la bateria tingui menys de 3,1 V (utilitza la funció integrada del xip per calcular quant hi ha a la bateria.

El sensor de vibració està connectat al pin analògic i en llegeix el valor. Quan el valor s’enfonsa, el sensor produeix una vibració i és aquí on registrem el cop.

L'objectiu té una funció de seguretat a prova de fallades, que si no premeu en X segons (per defecte és de 15 segons) o si no es pot fer la transmissió, tornaran a la posició inicial.

No explicaré com es connectarà, comproveu el full elèctric per veure com ho fareu. L’única cosa que no hi és, és la bateria, l’interruptor d’alimentació i el carregador. Depèn de vosaltres decidir com ho voleu.

IMPORTÀNCIA SOBRE EL Mòdul NRF24L +:

Pot ser dolor en … aconseguir-los estables, combinats amb una bona potència i aïllament al seu voltant, i el codi que faran que funcionin. Per a mi, el condensador de 10 uF em donarà una connexió estable i bona, però si us plau intenteu primer si necessiteu, per exemple, un condensador de 100 uF. Emboliqueu-los també amb primer paper de plàstic i després amb paper d'alumini per protegir-los de la interferència

També al codi, la velocitat de dades no necessita més de 250 Kb, de manera que no serà el problema. Però el PA: myRadio.setPALevel (RF24_PA_MIN);

Al codi que he establert a MIN (això és durant la prova), és el més baix i no consumirà tanta potència, però el rang no serà tan llarg. Si teniu una potència estable i bona, podeu pujar a RF24_PA_MAX per obtenir el màxim abast, PER they per a això necessiten una potència estable de GOOOOOD. Proveu també BAIX I ALT (només canvieu el text MAX) per veure si obteniu una bona comunicació. També obtindreu un bon abast en BAIX i ALT a menys que sigueu franctirador

També mantingueu els transmissors a un metre de distància com a mínim, ja que tancar pot fer que el senyal sigui dolent

Proveu la comunicació amb algun exemple de ping a la biblioteca NRF24 (enllaç a GitHub)

Al codi, heu d’establir el número d’identificació únic per a aquest objectiu:

int targID = 3401; // Aquest és l'identificador de destinació

int sendID = 2401; // Aquest és l'identificador de resposta

També hi ha 3 funcions DEFINE:

#define DEBUG

#define BATTERY

#define SHAKE // SI EL COMMUTADOR SHAKE S’utilitza en lloc del vell PIEZO

DEBUG:

Durant la prova, és bo haver-ho definit. Però quan estigueu disponibles, no el tingueu activat.

PILA:

Si no voleu tenir un comprovador de bateria per als objectius, heu d'eliminar aquesta definició.

Sacsejar:

Si heu creat la meva versió antiga, teniu sensors piezoelèctrics i traieu-los per obtenir el codi correcte.

Xip ATMEGA328

En lloc d'un Arduino nano, vaig decidir utilitzar el xip ATMEGA328 (amb el carregador d'arrencada de Uno), són senzills de programar, només cal eliminar el xip d'un Arduino Uno i afegir aquest xip i carregar el codi. Consulteu l’esquema elèctric sobre com construir els objectius.

El codi

He escrit el codi amb PlatformIO en lloc d'Arduino IDE. És un millor programari per programar-hi. Per tant, el codi és una mica diferent. Recomano utilitzar aquest programari.

La caixa de destinació i transmissor

He connectat el sensor i el led blau a l'objectiu, i amb un cable fono de 3, 5 mm a 2 m, el connecto junt a la caixa del transmissor que conté el xip atmega, el carregador de bateria i el led verd i vermell. Això és així per protegir-lo de ser colpejat amb bales d'acer.

Pas 2: el controlador de jocs

El controlador de jocs
El controlador de jocs
El controlador de jocs
El controlador de jocs
El controlador de jocs
El controlador de jocs
El controlador de jocs
El controlador de jocs

El següent que hem de fer és fer el controlador dels sensors. És un Arduino que utilitza un mòdul NRF24L01 per comunicar-se amb els sensors. Res més. Després, Arduino es connecta amb USB al raspberry pi per funcionar.

Així funcionarà. Utilitza sèrie per saber què fer. El pi enviarà ordres en sèrie. Primer, durant la configuració, s’envia quants objectius heu afegit i els números d’identificació dels objectius. A continuació, farà la funció de prova i informarà el raspberry pi si es comuniquen entre ells.

Quan jugueu al joc, enviarà des de pi quin tipus de joc i quantes rondes / cops haureu d'utilitzar. Això és.

És possible utilitzar els mòduls NRF24L01 al raspberry pi, però per a mi l’Arduino és una opció millor, ja que no els faig servir mai al raspberry, de manera que no sé el bé que funcionen a llarg termini

Hi ha un mòdul de potència que utilitza 5 v per proporcionar una potència estable i correcta als transmissors. Els podeu utilitzar amb vosaltres Arduino (vegeu la imatge) que es diu Socket Adapter Module Board

Quan jugueu, els objectius s'activaran aleatòriament un per un. Quan un és colpejat, s'activarà un altre.

Durant la prova podeu tenir activat #DEFINE DEBUG per veure com funciona, però no quan el feu servir a l'ordinador pi, llavors no funcionarà.

Baixeu-vos el codi a la pàgina de GitHub.

Pas 3: Raspberry Pi

Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi

Ara hem arribat al Raspberry Pi.

He afegit algunes funcions addicionals per poder tenir un botó d'engegada. L’ATXRaspi 3 és un mòdul fantàstic, podeu encendre, apagar i reiniciar el pi amb un botó. També un RTCRaspi per mantenir l’hora i la data al pi. També he fet possible que només connecteu un cable de xarxa per si he de fer algunes actualitzacions del sistema. Els trobareu a Lowpowerlab

La impressora tèrmica la trobareu a sparkfun i el lector de codis de barres està disponible a Amazon.

L’ordinador Pi s’executa en mode quiosc, de manera que el navegador s’obrirà a l’inici. Primer de tot, cal tenir un servidor web amb PHP 7 i mysql a l’ordinador pi. (Hi ha moltes guies al web per això)

ATENCIÓ: si utilitzeu una impressora tèrmica amb raspberry pi que ha incorporat el bluetooth, primer heu de desactivar-la

L’escriptura python necessita pyserial i l’instal·leu: sudo apt-get install python-serial

Per fer que el mysql funcioni, instal·leu el següent:

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

suso apt-get install pymysql

Ara podeu controlar Arduino mitjançant sèrie i també actualitzar la base de dades mysql.

El següent pas és fer un script Python per connectar-se a mysql.

En els tres scripts Python canvieu la connexió a la vostra base de dades mysql.

El següent pas és fer que l’escriptura python s’executi a l’inici.

Hi ha tres python script.game.py és el més important de tots, que un té el joc function.print.py, això només és necessari si utilitzeu la impressora termal per imprimir. utilitzarà l’escàner de codis de barres.

Per fer que s'iniciïn automàticament, edito:

sudo nano /etc/rc.local

i afegiu el següent a la part inferior abans de la sortida 0:

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

Canvieu al lloc correcte per al vostre script Python i no oblideu el signe & al final

Ara hem de fer un mode de quiosc per al navegador web, primer traieu el cursor:

sudo apt-get install unclutter

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

ara en aquest fitxer, cerqueu i comenteu:

@xscreensaver -no-splash # comenta aquesta línia per desactivar el protector de pantalla

A continuació, afegiu:

@xset s off @xset -dpms @xset s noblank @ chromium-browser --noerrdialogs --force-device-scale-factor = 1,25 --kiosk https:// localhost

El següent pas per eliminar tots els textos d'arrencada i coses també afegir la vostra pròpia pantalla d'arrencada aquí és una guia ràpida:

sudo nano /boot/config.txt i a la part inferior adddisable_splash = 1

Elimina el missatge de text a la imatge de benvinguda:

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

Cerqueu i elimineu (o feu comentaris):

message_sprite = Sprite (); message_sprite. SetPosition (pantalla_amplada * 0,1, pantalla_altura * 0,9, 10000);

i:

my_image = Image. Text (text, 1, 1, 1); message_sprite. SetImage (my_image);

Ara eliminem els missatges d'arrencada:

sudo nano /boot/cmdline.txt

substituïu "consola = tty1" per "consola = tty3"

i al final de la línia afegiu:

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

I substituïu el pi splash pel vostre:

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

Ara teniu la vostra pròpia pantalla d'arrencada personalitzada per al vostre joc. El vostre ordinador pi ja està preparat per gestionar el joc, així que passeu al següent pas.

Pas 4: configureu el joc

En aquest moment, ja heu creat el joc.

Primer que heu de fer és configurar el sistema web. Pengeu la base de dades al vostre servidor mysql. El fitxer es troba a la carpeta inclou el nom database.sql

El següent pas és editar el fitxer de configuració, el trobareu al nom de carpeta inclou config.php Canvieu la informació d’inici de sessió de la base de dades perquè l’script funcioni.

El sistema web està basat en diversos idiomes i està escrit en anglès. Hi ha una traducció al suec disponible. Per fer més idioma, necessiteu un programari anomenat Poedit.

Per afegir més idioma al sistema web, heu d'editar i18n_setup.php i afegir-lo a la matriu:

retorna in_array ($ locale, ['ca_US', 'sv_SE']); (Línia 23)

També per canviar l'idioma per defecte, heu de canviar a la línia 27: $ lang = 'ca_US'; canvieu l'idioma en_US.

els fitxers d'idioma s'han de col·locar a locales / LANGCODE / LC_MESSAGES / i han de ser anomenats main.mo (canvieu el codi de llengua al vostre idioma)

per canviar el teclat del fitxer selectplayers.php canvieu l'idioma: "ca", // ca per anglès sv per disseny suec: 'qwerty', // qwerty per anglès suec-qwerty per suec

Els trobareu a les línies 218 i 219

Els idiomes disponibles es troben a la carpeta: assets / js / keyboard / languages & layouts es troben a assets / js / keyboard / layouts i afegiu els fitxers correctes a les línies 118 i 119 (substituïu el que hi trobeu ara)

Afegiu objectius

Per afegir objectius, aneu a localhost / admin / i feu clic a Afegeix objectius.

Heu d'afegir un nom per a la destinació i l'identificador de destinació únic i enviar ID, afegir tants objectius que tingueu.

Afegeix jocs

També cal afegir alguns jocs. Aneu a localhost / admin / i feu clic a Afegeix joc

Heu d’afegir un nom per al joc, una descripció, els jugadors mínims i màxims, quin tipus de joc, també la dificultat del joc entre l’1 i el 5. I com és el joc, de manera que per al joc de foc ràpid afegiu quants èxits (exemple 30) per al dibuix ràpid quantes rondes (per exemple, 8) i per quant de temps es jugarà (per exemple, 60 per un minut)

Comença el joc

Quan engegueu el joc, farà la prova de l'objectiu. Per tant, els objectius han d’estar activats abans d’iniciar el sistema principal. Si tots passen la prova, podeu utilitzar el sistema, però si no ho feu, no el podeu utilitzar. Intentarà comunicar-se fins que obtinguin resposta.

Bona sort

Bé, això és tot, per obtenir ajuda i informació sobre l'actualització del codi, si us plau, seguiu la meva pàgina de Facebook per a aquest joc, de manera que us puc donar resposta ràpidament. Aquí trobareu enllaços a la part superior.

Recomanat: