Cuprins:

Joc Arduino Shooting V3: 4 pași
Joc Arduino Shooting V3: 4 pași
Anonim
Image
Image
Joc Arduino Shooting V3
Joc Arduino Shooting V3
Joc Arduino Shooting V3
Joc Arduino Shooting V3
Joc Arduino Shooting V3
Joc Arduino Shooting V3

Acest joc este pentru tine care folosește airsoft sau CO2 pentru a trage la ținte. Este un joc.

Pentru informații actualizate despre joc și asistență:

www.facebook.com/arduinoshooting/

Pentru pagina mea de blog despre joc:

shootinggameblog.wordpress.com

Pentru codurile despre joc:

github.com/shootinggame82/Shooting-game-v3

Jocul de fotografiere are x ținte fără fir, fiecare țintă are un senzor de vibrații care detectează vibrația care se obține atunci când se face o lovitură. Senzorii wireless sunt un cip Atmega328 (cip Arduino Uno) și au baterie Li-Po reîncărcată.

Controlerul principal pentru acest joc este controlat de un Arduino și este controlat în serie de pe un Raspberry Pi.

Deci, cum funcționează acest joc? Ei bine, sunt 3 moduri de joc:

Quicktime: Joacă runde X și trage atât de repede încât poți pe fiecare țintă.

Timemode: Trageți cât mai multe ținte pe X secunde.

Rapidfire: Trageți X fotografii în cel mai rapid timp.

Sistemul ne transmite NRF24L01 pentru a obține o distanță bună de la controlerul principal. Funcționează la 2,6 GHz (la fel ca și WiFi-ul)

În proiectele mele din trecut am folosit Piezo pentru vibrații, dar acum sunt folosite comutatorul senzorului de vibrație. Dar puteți folosi Piezo în continuare dacă ați creat versiunea mea veche a acestui joc.

Jocul are un ecran tactil Raspberry Pi de 7 care reține sistemul web pe care îl controlați prin joc. O imprimantă terminal imprimă rezultatele.

Provizii

Pentru emițătoare:

  • X Atmega328 cu Arduino Bootloader (În funcție de câte ținte)
  • Comutator senzor de vibrație X
  • X Blue Led
  • X Led verde
  • X Led roșu
  • Baterie X 3.7v Li-Po
  • Modulul încărcător Li-Po X FC-75 (sau un alt model)
  • Condensator X 100 uF
  • X Carcase pentru senzori
  • X LD1117V33 (Creează un transmițător sigur de 3,3 V)
  • Module X NRF24L01
  • Rezistoare X x 3 220 Ohm (3 sunt necesare pentru o țintă)
  • Cristal X 16 MHz
  • X x 2 Condensatoare neexplorate 22 pF (este nevoie de 2 pentru o țintă)

Pentru Arduino principal:

  • 1 Arduino (se recomandă Nano sau Uno, trebuie să aveți USB)
  • 1 Modul NRF24L01
  • 1 10 uF condensator

Pentru zmeura Pi:

  • Raspberry Pi (am folosit 3B)
  • Ecran tactil de 7"
  • ATXRaspi (Opțional, dar un modul de buton de alimentare bun)
  • RTCRaspi (Opțional, dar un modul RTC bun pentru a păstra data și ora)
  • Imprimantă termică (opțională, dar necesară pentru a putea imprima)
  • Scanner de coduri de bare (versiune USB care funcționează ca o tastatură, opțional)
  • Putere bună de 5V (am folosit un USB vechi de 12v cu putere de 2,5 A)

Alte lucruri:

  • Putere 12v (am una la 12 Ah)
  • Soclu de rețea (faceți mai ușor conectarea la rețea)
  • Cabluri

Pasul 1: senzorii wireless

Senzorii wireless
Senzorii wireless
Senzorii wireless
Senzorii wireless
Senzorii wireless
Senzorii wireless

Să începem să facem senzorii. Folosesc 4 senzori pentru acest joc. Dar puteți adăuga cu ușurință mai mulți senzori. Senzorii comunică cu un cod de 4 numere atunci când sistemul principal trimite codul cu ce funcție senzorul cu codul potrivit se va aprinde și va fi gata pentru țintă. Lumina albastră este pentru a informa că este acea țintă pe care urmează să o atingeți.

De asemenea, avem un led verde și un roșu. Verde se aprinde întotdeauna pentru a informa că senzorul este pornit. Roșul se va aprinde numai atunci când bateria este mai mică de 3,1 V (folosește funcția încorporată din cip pentru a calcula cât este în baterie.

Senzorul de vibrații este conectat la pinul analogic și citește valoarea acestuia. Când valoarea scade, senzorul are o vibrație și acolo înregistrăm lovitura.

Ținta are o funcție failsafe, în cazul în care nu atingeți în X secunde (implicit este de 15 sec) sau dacă transmisia nu poate fi realizată, acestea vor reveni la poziția de pornire.

Nu voi explica cum veți conecta cablul, verificați foaia electrică pentru a vedea cum veți face acest lucru. Singurul lucru care nu este pe el este bateria, întrerupătorul de alimentare și încărcătorul. Depinde de dvs. să decideți cum doriți.

IMPORTANȚĂ DESPRE MODULUL NRF24L +:

Poate fi durere în … pentru a le stabiliza, combinate cu o bună putere și izolare în jurul său, și codul pe care îi veți face să funcționeze. Pentru mine condensatorul de 10 uF îmi va oferi o conexiune stabilă și bună, dar vă rugăm să încercați mai întâi dacă aveți nevoie, de exemplu, de condensator de 100 uF. De asemenea, înfășurați-le cu mai întâi folie de plastic și apoi folie de aluminiu pentru a le proteja de interferențe

De asemenea, în cod, rata de date nu aveți nevoie de mai mult de 250 Kb, astfel încât nu va fi problema. Dar PA: myRadio.setPALevel (RF24_PA_MIN);

În codul pe care l-am setat la MIN (Acest lucru este în timpul testului), este cel mai mic și nu va folosi atât de multă putere, dar intervalul nu va fi atât de lung. Dacă aveți o putere stabilă și bună pentru ei, puteți merge la RF24_PA_MAX pentru a obține cea mai lungă autonomie, DAR au nevoie de o putere stabilă GOOOOOD pentru asta. Încercați și LOW AND HIGH (Schimbați doar textul MAX) pentru a vedea dacă obțineți o comunicare bună. De asemenea, veți obține o autonomie bună pe LOW și HIGH, cu excepția cazului în care veți fi lunetist

De asemenea, păstrați emițătoarele la cel puțin un metru distanță, pentru a închide poate face ca semnalul să fie rău

Testați comunicarea cu un exemplu de ping în Biblioteca NRF24 (Link pe GitHub)

În cod, trebuie să setați numărul unic de identificare pentru ținta respectivă:

int targID = 3401; // Acesta este ID-ul țintă

int sendID = 2401; // Acesta este ID-ul de răspuns

Există, de asemenea, 3 funcții DEFINE:

#define DEBUG

#define BATERIE

#define SHAKE // IF SHAKE SWITCH ESTE FOLOSIT ÎN LOCUL BĂTRÂNII PIEZO

DEBUG:

În timpul testului este bine să fi definit acest lucru. Dar când le puneți la dispoziție, nu îl aveți activat.

BATERIE:

Dacă nu doriți să aveți o verificare a bateriei pentru ținte, trebuie să eliminați această definire.

SCUTURA:

Dacă ați construit versiunea mea veche, aveți senzori piezo, apoi eliminați acest lucru pentru a obține codul corect pentru acestea.

Cip ATMEGA328

În loc de un Arduino nano, am decis să folosesc cipul ATMEGA328 (cu încărcător Uno), sunt simplu de programat, doar scoateți cipul de pe un Arduino Uno și adăugați acest cip și încărcați codul. Verificați schema electrică despre cum să construiți țintele.

Codul

Am scris codul cu PlatformIO în loc de Arduino IDE. Este un software mai bun de programat. Deci, codul este puțin diferit. Vă recomand să utilizați în schimb acest software.

Cutia țintă și emițător

Am atașat senzorul și ledul albastru pe țintă și, cu un cablu fono de 3, 5 mm pe 2 m, îl conectez împreună în cutia transmițătorului care conține cipul atmega, încărcătorul de baterii și ledul verde și roșu. Acest lucru este pentru a-l proteja de lovirea cu gloanțe de oțel.

Pasul 2: Controlerul jocului

Controlerul jocului
Controlerul jocului
Controlerul jocului
Controlerul jocului
Controlerul jocului
Controlerul jocului
Controlerul jocului
Controlerul jocului

Următorul lucru pe care trebuie să-l facem este să facem controlerul pentru senzori. Este un Arduino care folosește un modul NRF24L01 pentru a comunica cu senzorii. Nimic altceva. Arduino este apoi conectat cu USB în raspberry pi pentru a funcționa.

Așa va funcționa. Folosește serialul pentru a ști ce să facă. Pi va trimite comenzi seriale. Mai întâi în timpul configurării, trimite câte ținte ați adăugat și numerele de identificare ale țintelor. Apoi va face funcția de testare și va informa raspberry pi dacă comunică între ei.

Când jucați jocul, acesta va trimite de la pi ce tip de joc și câte runde / lovituri să utilizați. Asta e.

Este posibil să folosesc modulele NRF24L01 în raspberry pi, dar pentru mine Arduino este o opțiune mai bună păcate Nu le folosesc niciodată în zmeură, așa că nu știu cât de bine funcționează pe termen lung

Există un modul de alimentare care utilizează 5 v pentru a asigura o putere stabilă corectă la emițătoare. Le puteți folosi cu dvs. Arduino (Vedeți imaginea) numele este Socket Adapter Module Board

Când jucați, țintele vor fi activate aleator, una câte una. Când unul este lovit, altul va fi activat.

În timpul testului poți avea activat #DEFINE DEBUG pentru a vedea cum funcționează, dar nu atunci când îl folosești în computerul pi, atunci nu va funcționa.

Descărcați codul de pe pagina GitHub.

Pasul 3: Raspberry Pi

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

Am ajuns acum la Raspberry Pi.

Am adăugat câteva funcții suplimentare, astfel încât să pot avea un buton de alimentare. ATXRaspi 3 este un modul excelent, puteți porni, opri și reporni pi cu un buton. De asemenea, un RTCRaspi pentru a păstra ora și data pe pi. De asemenea, a făcut posibilă doar conectarea unui cablu de rețea în cazul în care trebuie să fac câteva actualizări ale sistemului. Le veți găsi pe Lowpowerlab

Imprimanta termică pe care o veți găsi pe sparkfun și cititorul de coduri de bare este disponibil pe Amazon.

Computerul Pi rulează în modul chioșc, astfel încât browserul se va deschide la început. În primul rând trebuie să aveți un server web cu PHP 7 și mysql pe computerul pi. (Există o mulțime de ghiduri pe web pentru acest lucru)

Vă rugăm să rețineți: dacă doriți să utilizați o imprimantă termică cu raspberry pi care a încorporat bluetooth, trebuie mai întâi să o dezactivați

Scriptul python are nevoie de pyserial și îl instalați: sudo apt-get install python-serial

Pentru ca mysql să funcționeze, instalați următoarele:

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

suso apt-get install pymysql

Acum vă puteți controla Arduino prin serial și, de asemenea, puteți actualiza baza de date mysql.

Următorul pas este de a crea un script python pentru a vă conecta la mysql.

În toate cele trei scripturi Python schimbați conexiunea la baza de date MySQL.

Următorul pas este de a face scriptul Python să ruleze la început.

Există trei python script.game.py este cel mai important dintre toate, că unul deține funcția de joc.print.py, acest lucru este necesar numai dacă utilizați o imprimantă termală pentru a print.ean.py este necesar doar dacă sunteți urmează să folosesc scanerul de coduri de bare.

Pentru a le face să pornească automat, le editez:

sudo nano /etc/rc.local

și adăugați următoarele în partea de jos înainte de ieșirea 0:

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

Vă rugăm să schimbați locul corect pentru scriptul dvs. Python și nu uitați de semnul & de la sfârșit

Acum trebuie să creăm un mod chioșc pentru browserul web, mai întâi scoateți cursorul:

sudo apt-get install unclutter

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

acum în acel fișier găsiți și comentați:

@xscreensaver -no-splash # comentează această linie pentru a dezactiva economizorul de ecran

Sub această adăugare:

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

Următorul pas pentru a elimina toate textele de încărcare și alte lucruri, de asemenea, adăugați propriul ecran de încărcare, iată un ghid rapid:

sudo nano /boot/config.txt și în partea de jos adddisable_splash = 1

Eliminați mesajul text sub imaginea splash:

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

Găsiți și eliminați (sau comentați):

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

și:

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

Acum eliminăm mesajele de încărcare:

sudo nano /boot/cmdline.txt

înlocuiți „consolă = tty1” cu „consolă = tty3”

iar la sfârșitul rândului adăugați:

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

Și înlocuiți splash-ul pi cu al vostru:

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

Acum aveți propriul ecran de boot personalizat pentru joc. Computerul dvs. pi este acum gata să gestioneze jocul. Deci, treceți la pasul următor!

Pasul 4: Configurați jocul

În acest moment ați creat jocul.

Mai întâi trebuie să configurați sistemul web. Încărcați baza de date pe serverul dvs. mysql. Fișierul se află în folderul include și denumit database.sql

Următorul pas este să editați fișierul de configurare, îl găsiți în numele folderului include config.php Schimbați informațiile de conectare la baza de date, astfel încât scriptul să funcționeze.

Sistemul web este bazat pe mai multe limbi și este scris în engleză. Există o traducere suedeză disponibilă. Pentru a face mai multe limbi, aveți nevoie de un software numit Poedit.

Pentru a adăuga mai multe limbi la sistemul web, trebuie să editați i18n_setup.php și să adăugați în matrice:

returnează în_array ($ locale, ['en_US', 'sv_SE']); (Linia 23)

De asemenea, pentru a schimba limba implicită, trebuie să schimbați în linia 27: $ lang = 'en_US'; schimbați en_US la limba dvs.

fișierele de limbă trebuie plasate în locale / LANGCODE / LC_MESSAGES / și să fie denumite main.mo (Schimbați codul de limbă în limba dvs.)

pentru a schimba tastatura în fișierul selectplayers.php schimbați limba: "en", // en pentru engleză sv pentru aspect suedez: 'qwerty', // qwerty pentru engleză suedez-qwerty pentru suedez

Le găsiți pe linia 218 și 219

Limbile disponibile sunt în folder: assets / js / keyboard / languages & layouts sunt în assets / js / keyboard / layouts și adăugați fișierele corecte la rândul 118 și 119 (înlocuiți-l pe cel pe care îl găsiți acum)

Adăugați ținte

Pentru a adăuga ținte, accesați localhost / admin / și faceți clic pe adăugați ținte.

Trebuie să adăugați un nume pentru țintă și ID-ul țintă unic și să trimiteți ID, adăugați cât mai multe ținte pe care le aveți.

Adăugați jocuri

De asemenea, trebuie să adăugați câteva jocuri. Accesați localhost / admin / și faceți clic pe add game

Trebuie să adăugați un nume pentru joc, o descriere, jucătorii min și max ce tip de joc, de asemenea cât de greu este jocul între 1 și 5. Și cum este jocul, astfel încât pentru jocul cu foc rapid adăugați câte hituri (exemplu 30) pentru tragere rapidă câte runde (de exemplu 8) și pentru timp cât timp vor juca (de exemplu 60 pentru un minut)

Incepe jocul

Când porniți jocul, acesta va face testarea țintei. Deci, obiectivele trebuie să fie activate înainte de a porni sistemul principal. Dacă toate trec testul, puteți folosi sistemul, dar dacă nu, nu îl puteți folosi. Se va încerca să comunice până când vor primi răspuns.

Noroc

Ei bine, cam asta e, pentru asistență și informații despre actualizarea codului, vă rugăm să urmați pagina mea de Facebook pentru acest joc, astfel încât să vă pot răspunde rapid. Aici veți găsi link-uri în partea de sus.

Recomandat: