INHOUDSOPGAWE:

Arduino -skietspel V3: 4 stappe
Arduino -skietspel V3: 4 stappe

Video: Arduino -skietspel V3: 4 stappe

Video: Arduino -skietspel V3: 4 stappe
Video: Использование драйвера шагового двигателя L298N Для управления 4-проводным шаговым двигателем 2024, Julie
Anonim
Image
Image
Arduino -skietspel V3
Arduino -skietspel V3
Arduino -skietspel V3
Arduino -skietspel V3
Arduino -skietspel V3
Arduino -skietspel V3

Hierdie speletjie is vir u wat airsoft of co2 gebruik om op teikens te skiet. Dit is 'n spel.

Vir die nuutste inligting oor die spel en ondersteuning:

www.facebook.com/arduinoshooting/

Vir my blogblad oor die spel:

shootinggameblog.wordpress.com

Vir die kodes oor die spel:

github.com/shootinggame82/Shooting-game-v3

Skietwedstryd is x teikens wat draadloos is; elke teiken het 'n vibrasiesensor wat trillings waarneem wanneer 'n treffer gemaak word. Die draadlose sensors is 'n Atmega328-chip (Arduino Uno-chip) en het 'n herlaaide Li-Po-battery.

Die hoofbeheerder vir hierdie speletjie word beheer deur 'n Arduino en word seriële beheer vanaf 'n Framboos Pi.

So, hoe werk hierdie speletjie? Wel, dit is drie spelmetodes:

QuickTime: Speel X -rondtes en skiet so vinnig dat jy kan op elke teiken.

Tydsmodus: skiet soveel teikens as moontlik op X sekondes.

Rapidfire: Skiet X -skote op die vinnigste tyd.

Die stelsel gebruik ons NRF24L01 senders om 'n goeie afstand van die hoofbeheerder te kry. Hulle werk op 2,6 GHz (dieselfde as wat WiFi gebruik)

In my vorige projekte gebruik ek Piezo vir die vibrasie, maar nou word die vibrasiesensor skakelaar gebruik, maar u kan steeds Piezo gebruik as u my ou weergawe van hierdie speletjie gemaak het.

Die spel het 'n Raspberry Pi 7 -skerm wat die webstelsel waarmee u die spel beheer, kan hou. 'N Terminale drukker druk die resultate af.

Voorrade

Vir senders:

  • X Atmega328 met Arduino Bootloader (Afhangend van hoeveel teikens)
  • X Skakelaar vir trillingsensor
  • X Blou Led
  • X Groen Led
  • X Rooi Led
  • X 3.7v Li-Po battery
  • X FC-75 Li-Po Charger module (of 'n ander model)
  • X 100 uF kondensator
  • X Omhulsels vir die sensors
  • X LD1117V33 (maak 'n veilige 3,3 V -sender)
  • X NRF24L01 modules
  • X x 3 220 Ohm weerstande (3 is nodig vir een teiken)
  • X 16 MHz kristal
  • X x 2 Ongepaste kondensators 22 pF (2 is nodig vir een teiken)

Vir die belangrikste Arduino:

  • 1 Arduino (Nano of Uno word aanbeveel, moet USB hê)
  • 1 NRF24L01 -module
  • 1 10 uF kapasitor

Vir framboos Pi:

  • Framboos Pi (ek het 3B gebruik)
  • 7 "raakskerm
  • ATXRaspi (opsioneel, maar 'n goeie aan / uit -knoppie -module)
  • RTCRaspi (opsioneel, maar 'n goeie RTC -module om tyd en datum te hou)
  • Termiese drukker (opsioneel, maar nodig om te kan druk)
  • Strepieskodeskandeerder (USB -weergawe wat soos 'n sleutelbord werk, opsioneel)
  • Goeie 5V -krag (ek het 'n ou 12V USB met 'n 2,5 A -krag gebruik)

Ander goed:

  • 12V krag (ek het een by 12 Ah)
  • Netwerksok (maak dit maklik om aan te sluit op netwerk)
  • Kabels

Stap 1: Die draadlose sensors

Die draadlose sensors
Die draadlose sensors
Die draadlose sensors
Die draadlose sensors
Die draadlose sensors
Die draadlose sensors

Laat ons begin om die sensors te maak. Ek gebruik 4 sensors vir hierdie speletjie. Maar u kan maklik meer sensors byvoeg. Die blou lig is om in te lig dat dit die teiken is wat u gaan bereik.

Ons het ook 'n groen en 'n rooi LED. Die groen brand altyd om aan te dui dat die sensor aan is. Die rooi sal slegs brand as die battery minder as 3.1V is (dit gebruik die ingeboude funksie in die skyfie om te bereken hoeveel daar in die battery is.

Die vibrasiesensor is gekoppel aan die analoog pen en lees die waarde daarvan. As die waarde daal, het die sensor 'n vibrasie, en dit is waar ons die treffer registreer.

Die doelwit het 'n mislukte funksie, as u nie binne X sekondes slaan nie (standaard is 15 sekondes), of as u nie kan stuur nie, gaan hulle terug na die beginposisie.

Ek gaan nie verduidelik hoe u met draad gaan nie, kyk na die elektriese plaat om te sien hoe u dit gaan doen. Dit is aan u om te besluit hoe u dit wil hê.

BELANGRIK OOR DIE NRF24L+ -module:

Dit kan pyn in die … wees om dit stabiel te kry, gekombineer met goeie krag en isolasie daar rondom, en die kode waarmee u dit kan laat werk. Vir my gee 10 uF -kondensator my 'n stabiele en goeie verbinding, maar probeer eers as u 'n 100 uF -kondensator benodig. Omhul dit ook met eers plastiekfoelie en dan aluminiumfoelie om dit te voorkom dat dit inmeng

Ook in die kode het die datatempo wat u nie meer as 250 Kb nodig het nie, so dit is nie die probleem nie. Maar die PA: myRadio.setPALevel (RF24_PA_MIN);

In die kode wat ek op MIN gestel het (dit is tydens die toets), is dit die laagste en gebruik dit nie soveel krag nie, maar die reikafstand is nie so lank nie. As u 'n stabiele en goeie krag vir hulle het, kan u na RF24_PA_MAX gaan om die langste reikafstand te kry, maar hulle benodig GOOOOOD stabiele krag daarvoor. Probeer ook LAAG EN HOOG (verander slegs MAX -teks) om te sien of u goeie kommunikasie kry. U kry ook 'n goeie bereik op LAAG en HOOG, tensy u 'n sluipskutter gaan wees

Hou ook die senders minstens een meter uitmekaar, want as u dit sluit, kan die sein sleg wees

Toets die kommunikasie met 'n paar ping -voorbeelde in die NRF24 -biblioteek (skakel op GitHub)

In die kode moet u die unieke identifikasienommer vir die teiken stel:

int targID = 3401; // Dit is die teiken -ID

int sendID = 2401; // Dit is die antwoord -ID

Daar is ook 3 DEFINE funksies:

#define DEBUG

#definieer BATTERY

#define SHAKE // AS SHAKE SWITCH GEBRUIK WORD PLEK VAN DIE OU PIEZO

DEBUG:

Tydens die toets is dit goed om dit te definieer. Maar as u dit beskikbaar stel, moet u dit nie aktiveer nie.

BATTERY:

As u nie 'n batterykontroleerder vir die doelwitte wil hê nie, moet u hierdie definisie verwyder.

SKUD:

As u my ou weergawe gebou het, het u piëzo -sensors, en verwyder dit om die regte kode daarvoor te kry.

ATMEGA328 Chip

In plaas van 'n Arduino -nano, het ek besluit om die ATMEGA328 -chip te gebruik (met Uno -laaier), dit is eenvoudig om te programmeer, maar verwyder die chip uit 'n Arduino Uno en voeg die chip by en laai kode op. Gaan die elektriese skema na oor hoe om die teikens te bou.

Die kode

Ek het die kode met PlatformIO in plaas van Arduino IDE geskryf. Dit is 'n beter sagteware om in te programmeer. Die kode is dus 'n bietjie anders. Ek beveel aan dat u hierdie sagteware eerder gebruik.

Die doel- en senderkas

Ek het die sensor en die blou led op die teiken aangebring, en met 'n 3, 5 mm -fonokabel op 2 m kan ek dit aanmekaar koppel in die senderkas wat die atmega -chip, batterylaaier en die groen en rooi led bevat. Dit is bedoel om te voorkom dat dit met staalkoeëls getref word.

Stap 2: Die spelbeheerder

Die spelbeheerder
Die spelbeheerder
Die spelbeheerder
Die spelbeheerder
Die spelbeheerder
Die spelbeheerder
Die spelbeheerder
Die spelbeheerder

Die volgende ding wat ons moet doen, is om die kontroleerder vir die sensors te maak. Dit is 'n Arduino wat 'n NRF24L01 -module gebruik om met die sensors te kommunikeer. Niks anders nie. Die Arduino word dan met die USB in die framboos -pi verbind om te werk.

Dit is hoe dit sal werk. Dit gebruik reeks om te weet wat om te doen. Die pi sal reeksopdragte stuur. Tydens die opstelling stuur dit eers hoeveel teikens u bygevoeg het, en die teikens se identifikasienommers. Dan sal dit die toetsfunksie verrig en die framboospi in kennis stel as hulle wel met mekaar kommunikeer.

As u die speletjie speel, stuur dit van pi watter tipe spel en hoeveel rondes/treffers u moet gebruik. Dis dit.

Dit is moontlik om die NRF24L01 modules in die framboos pi te gebruik, maar vir my is die Arduino 'n beter opsie, maar ek gebruik dit nooit in framboos nie, so ek weet nie hoe goed dit op lang termyn werk nie

Daar is 'n kragmodule wat 5 v gebruik om die stabiele krag van die senders korrek te maak. U kan dit saam met u gebruik Arduino (sien die prentjie), die naam is Socket Adapter Module Board

As u speel, word die teikens willekeurig een vir een geaktiveer. As een getref word, sal 'n ander een geaktiveer word.

Tydens die toets kan u #DEFINE DEBUG laat aktiveer om te sien hoe dit werk, maar nie as u dit op die pi -rekenaar gebruik nie; dit werk dan nie.

Laai die kode af op die GitHub -bladsy.

Stap 3: Framboos Pi

Framboos Pi
Framboos Pi
Framboos Pi
Framboos Pi
Framboos Pi
Framboos Pi
Framboos Pi
Framboos Pi

Ons het nou by die Raspberry Pi gekom.

Ek het 'n paar ekstra funksies bygevoeg sodat ek 'n aan / uit -knoppie kan hê. Die ATXRaspi 3 is 'n uitstekende module; u kan die pi met 'n knoppie aan, afskakel en herlaai. Ook 'n RTCRaspi om die tyd en datum op die pi te hou. Dit het dit ook moontlik gemaak om net 'n netwerkkabel aan te sluit, want ek moet 'n paar opdaterings aan die stelsel doen. U vind hulle op Lowpowerlab

Die termiese drukker vind u op sparkfun en die strepieskode -leser is op Amazon beskikbaar.

Die Pi -rekenaar werk in die kiosk -modus, sodat die blaaier by die begin oopmaak. Eerstens moet u 'n webserver met PHP 7 en mysql op die pi -rekenaar hê. (Daar is baie gidse op die internet hiervoor)

LET WEL: as u 'n termiese drukker gaan gebruik met framboospi wat ingeboude bluetooth het, moet u die een eers deaktiveer

Die python-skrip benodig pyserial en u installeer dit: sudo apt-get install python-serial

Om die mysql te laat werk, moet u die volgende installeer:

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

Soek apt-get installeer pymysql

Nou kan u u Arduino deur middel van die reeks beheer en ook die mysql -databasis opdateer.

Die volgende stap is om 'n python -script te maak om aan te sluit op mysql.

In al drie die python -skrif verander die verbinding met u mysql -databasis.

Die volgende stap is om die python -skrip aan die begin te laat loop.

Daar is drie python script.game.py is die belangrikste prentjie van almal, die een wat die spelfunksie bevat.print.py Dit is slegs nodig as u 'n termdrukker gaan gebruik om te print.ean.py is slegs nodig as u gaan die strepieskodeskandeerder gebruik.

Om hulle outomaties te begin, wysig ek:

sudo nano /etc/rc.local

en voeg die volgende onderaan by voor afrit 0:

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

Verander asseblief die regte plek vir u python -script en vergeet nie die & teken aan die einde nie

Nou moet ons 'n kioskmodus vir die webblaaier maak, eers die wyser verwyder:

sudo apt-get install unclutter

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

vind en lewer kommentaar in die lêer:

@xscreensaver -no -splash # lewer kommentaar op hierdie lyn om screensaver uit te skakel

Hieronder voeg dit by:

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

Die volgende stap om alle opstarttekste en ander dinge te verwyder, voeg ook u eie opstartskerm by, hier is 'n vinnige gids:

sudo nano /boot/config.txt en onderaan adddisable_splash = 1

Verwyder teksboodskap onder die spatprent:

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

Soek en verwyder (of lewer kommentaar):

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

en:

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

Nou verwyder ons opstartboodskappe:

sudo nano /boot/cmdline.txt

vervang “console = tty1” deur “console = tty3”

en voeg aan die einde van die reël by:

spat stil plymouth.ignore-serial-consoles logo.nologo vt.global_cursor_default = 0

En vervang die pi -spat deur u eie:

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

Nou het u u eie opstartskerm vir u spel. U pi -rekenaar is nou gereed om die spel te hanteer, dus gaan na die volgende stap!

Stap 4: Stel die spel op

Op hierdie stadium het u die spel nou geskep.

Eerstens moet u die websisteem instel. Laai die databasis op na u mysql -bediener. Die lêer is in die map met die naam database.sql

Die volgende stap is om die config -lêer te wysig; u kan dit vind in die mapnaam config.php Verander die aanmeldinligting van die databasis sodat die script sal werk.

Die webstelsel is in meer tale gebaseer en is in Engels geskryf. Daar is 'n Sweedse vertaling beskikbaar. Om meer taal te maak, benodig u 'n sagteware met die naam Poedit.

Om meer taal by die webstelsel te voeg, moet u i18n_setup.php wysig en in die skikking voeg:

gee terug in_array ($ locale, ['en_US', 'sv_SE']); (Reël 23)

Om die standaardtaal te verander, moet u ook in reël 27 verander: $ lang = 'en_US'; verander die en_US na u taal.

die taallêers moet in locales/LANGCODE/LC_MESSAGES/geplaas word en main.mo genoem word (Verander langcode in u taal)

om die sleutelbord in lêer selectplayers.php te verander, verander u taal: "en", // en vir Engels sv vir Sweedse uitleg: 'qwerty', // qwerty vir Engels swedish-qwerty vir Sweeds

U vind dit op lyn 218 en 219

Die beskikbare tale is in die vouer: bates/js/sleutelbord/tale en uitlegte is in bates/js/sleutelbord/uitlegte en voeg die korrekte lêers by reël 118 en 119 (vervang die een wat u nou daar vind)

Voeg teikens by

Om doelwitte by te voeg, gaan u na localhost/ admin/ en klik op voeg teikens by.

U moet 'n naam vir die teiken en die unieke teiken -ID byvoeg en ID stuur, soveel doelwitte as wat u het, byvoeg.

Voeg speletjies by

U moet ook 'n paar speletjies byvoeg. Gaan na localhost/ admin/ en klik op Voeg speletjie by

U moet 'n naam vir die spel, 'n beskrywing, min en maksimum spelers byvoeg, watter tipe spel, ook hoe moeilik die spel is tussen 1 en 5. En hoe die spel is, sodat u vir die quickfire -spel hoeveel treffers kan byvoeg (voorbeeld 30) vir die vinnige trek hoeveel rondes (byvoorbeeld 8) en vir tydsduur hoe lank hulle gaan speel (byvoorbeeld 60 vir een minuut)

Begin die spel

As u die spel aanskakel, sal dit die teikentoetsing doen. Die teikens moet dus wees voordat u met die hoofstelsel begin. As almal die toets slaag, kan u die stelsel gebruik, maar as dit nie die geval is nie, kan u dit nie gebruik nie. Dit sal probeer kommunikeer totdat hulle reaksie kry.

Sterkte

Wel, dit is omtrent dit; volg my Facebook -bladsy vir hierdie speletjie vir ondersteuning en inligting oor die opdatering van die kode, sodat ek u vinnig kan reageer. Hier vind u skakels bo -aan.

Aanbeveel: