„Arduino“šaudymo žaidimas V3: 4 žingsniai
„Arduino“šaudymo žaidimas V3: 4 žingsniai
Anonim
Image
Image
„Arduino“šaudymo žaidimas V3
„Arduino“šaudymo žaidimas V3
„Arduino“šaudymo žaidimas V3
„Arduino“šaudymo žaidimas V3
„Arduino“šaudymo žaidimas V3
„Arduino“šaudymo žaidimas V3

Šis žaidimas skirtas jums, naudojantiems „airsoft“ar „CO2“šaudyti į taikinius. Tai žaidimas.

Norėdami gauti naujausios informacijos apie žaidimą ir palaikymą:

www.facebook.com/arduinoshooting/

Mano dienoraščio puslapyje apie žaidimą:

shootinggameblog.wordpress.com

Žaidimo kodai:

github.com/shootinggame82/Shooting-game-v3

Šaudymo žaidimas yra x taikiniai, kurie yra belaidžiai, kiekvienas taikinys turi vibracijos jutiklį, kuris jaučia vibraciją, kuri atsiranda smūgio metu. Belaidžiai jutikliai yra „Atmega328“lustas („Arduino Uno“lustas) ir turi „Li-Po“bateriją.

Pagrindinis šio žaidimo valdiklis yra valdomas „Arduino“ir yra nuosekliai valdomas iš „Raspberry Pi“.

Taigi, kaip šis žaidimas veikia? Na, tai yra 3 žaidimo režimai:

Greitas laikas: žaiskite X raundus ir šaudykite taip greitai, kaip galite į kiekvieną taikinį.

Laiko režimas: nušaukite kuo daugiau taikinių per X sekundes.

„Rapidfire“: fotografuokite X kadrus greičiausiu metu.

Sistema yra mūsų NRF24L01 siųstuvai, kad būtų galima gerai nutolti nuo pagrindinio valdiklio. Jie veikia 2,6 GHz dažniu (tas pats, kas veikia „WiFi“)

Ankstesniuose projektuose vibracijai naudoju „Piezo“, bet dabar naudojamas vibracijos jutiklio jungiklis. Bet jūs vis tiek galite naudoti „Piezo“, jei sukūrėte seną šio žaidimo versiją.

Žaidimas turi „Raspberry Pi 7“jutiklinį ekraną, kuriame yra žiniatinklio sistema, kuria valdote žaidimą. Terminalinis spausdintuvas išspausdina rezultatus.

Prekės

Siųstuvams:

  • „X Atmega328“su „Arduino Bootloader“(priklausomai nuo tikslų skaičiaus)
  • X vibracijos jutiklio jungiklis
  • „X Blue Led“
  • „X Green Led“
  • X raudona lemputė
  • X 3,7 V Li-Po baterija
  • „X FC-75 Li-Po“įkroviklio modulis (arba kitas modelis)
  • X 100 uF kondensatorius
  • X Jutiklių dėklai
  • X LD1117V33 (užtikrina saugų 3,3 V siųstuvą)
  • X NRF24L01 moduliai
  • X x 3 220 omų rezistoriai (3 reikia vienam tikslui)
  • X 16 MHz kristalas
  • X x 2 nešvarūs kondensatoriai 22 pF (vienam tikslui reikia 2)

Pagrindiniam „Arduino“:

  • 1 „Arduino“(rekomenduojama „Nano“arba „Uno“, reikia turėti USB)
  • 1 NRF24L01 modulis
  • 1 10 uF kondensatorius

Aviečių Pi:

  • Raspberry Pi (naudojau 3B)
  • 7 "jutiklinis ekranas
  • ATXRaspi (pasirenkamas, bet geras maitinimo mygtuko modulis)
  • „RTCRaspi“(pasirenkamas, bet geras RTC modulis laiko ir datos išsaugojimui)
  • Terminalinis spausdintuvas (pasirenkamas, bet reikalingas norint spausdinti)
  • Brūkšninių kodų skaitytuvas (USB versija, kuri veikia kaip klaviatūra, pasirenkama)
  • Gera 5 V galia (aš naudoju seną 12 V USB, kurio galia yra 2,5 A)

Kiti reikalai:

  • 12v galia (aš turiu 12 Ah)
  • Tinklo lizdas (palengvinkite prisijungimą prie tinklo)
  • Kabeliai

1 žingsnis: belaidžiai jutikliai

Belaidžiai jutikliai
Belaidžiai jutikliai
Belaidžiai jutikliai
Belaidžiai jutikliai
Belaidžiai jutikliai
Belaidžiai jutikliai

Pradėkime gaminti jutiklius. Šiam žaidimui naudoju 4 jutiklius. Bet jūs galite lengvai pridėti daugiau jutiklių. Jutikliai bendrauja su 4 skaičių kodu, kai pagrindinė sistema išsiunčia kodą, su kokia funkcija jutiklis su tinkamu kodu užsidegs ir bus pasirengęs tikslui. Mėlyna šviesa informuoja, kad pataikysite į tikslą.

Taip pat turime žalią ir raudoną lemputes. Žalia spalva visada šviečia informuodama, kad jutiklis įjungtas. Raudona lemputė užsidegs tik tada, kai akumuliatoriaus įkrova bus mažesnė nei 3,1 V (ji naudoja mikroschemoje įmontuotą funkciją, kad apskaičiuotų, kiek akumuliatoriaus yra.

Vibracijos jutiklis prijungtas prie analoginio kaiščio ir nuskaito jo vertę. Kai vertė nusileidžia, jutiklis sugeria vibraciją ir ten mes užregistruojame smūgį.

Tikslas turi nesaugios funkcijos funkciją, kuri nepateikia per X sekundžių (numatytoji yra 15 sek.) Arba, jei nepavyksta perduoti, jie grįš į pradinę padėtį.

Aš neketinu paaiškinti, kaip ketinate laidą, patikrinkite elektros lakštą, kad pamatytumėte, kaip jūs tai padarysite. Vienas dalykas, kurio nėra, yra akumuliatorius, maitinimo jungiklis ir įkroviklis. Tai jūs turite nuspręsti, kaip to norite.

SVARBU APIE NRF24L+ modulį:

Gali būti skaudu… kad jie būtų stabilūs, kartu su gera galia ir izoliacija aplink juos, ir kodas, kuriuo jūs priversite juos veikti. Man 10 uF kondensatorius suteiks man stabilų ir gerą ryšį, bet pirmiausia pabandykite, jei jums reikia, pavyzdžiui, 100 uF kondensatoriaus. Taip pat apvyniokite juos plastikine folija, o po to aliuminio folija, kad apsaugotumėte nuo trukdžių

Taip pat kode, duomenų perdavimo greičiui jums nereikia daugiau nei 250 Kb, todėl tai nebus problema. Bet PA: myRadio.setPALevel (RF24_PA_MIN);

Kode, kurį nustatiau į MIN (tai yra bandymo metu), jis yra mažiausias ir nenaudos tiek energijos, tačiau diapazonas nebus toks ilgas. Jei turite stabilų ir gerą galią, galite pasiekti RF24_PA_MAX, kad gautumėte didžiausią diapazoną, BET tam jiems reikia GOOOOOD stabilios galios. Taip pat pabandykite LOW AND HIGH (keiskite tik MAX tekstą), kad sužinotumėte, ar gerai bendraujate. Taip pat gausite gerą diapazoną žemai ir aukštai, nebent būsite snaiperis

Taip pat laikykite siųstuvus bent vieno metro atstumu vienas nuo kito, nes užsidarę signalas gali būti blogas

Išbandykite ryšį naudodami tam tikrą „ping“pavyzdį NRF24 bibliotekoje (nuoroda „GitHub“)

Kodelyje turite nustatyti unikalų to tikslo identifikavimo numerį:

int targID = 3401; // Tai yra tikslinis ID

int sendID = 2401; // Tai atsakymo ID

Taip pat yra 3 DEFINE funkcijos:

#define DEBUG

#define BATTERY

#define SHAKE // JEI SHAKE SWITCH NAUDOJAMAS Vietoj SENO PIEZO

DEBUG:

Bandymo metu tai gerai apibrėžti. Bet kai juos padarysite prieinamus, neaktyvuokite jų.

BATERIJA:

Jei nenorite turėti akumuliatoriaus tikrintuvo, turite pašalinti šį apibrėžimą.

PUKRUKTI:

Jei sukūrėte mano seną versiją, turite pjezo jutiklius, tada pašalinkite juos, kad gautumėte teisingą jų kodą.

ATMEGA328 lustas

Vietoj „Arduino nano“nusprendžiau naudoti „ATMEGA328“lustą (su „Uno“įkrovos įkrovikliu), juos paprasta programuoti, tiesiog pašalinkite lustą iš „Arduino Uno“ir pridėkite šį lustą bei įkelkite kodą. Patikrinkite elektros schemą, kaip sukurti taikinius.

Kodas

Aš parašiau kodą naudodami „PlatformIO“, o ne „Arduino IDE“. Tai geresnė programavimo programinė įranga. Taigi kodas šiek tiek skiriasi. Rekomenduoju naudoti šią programinę įrangą.

Tikslinė ir siųstuvo dėžutė

Aš pritvirtinau jutiklį ir mėlyną šviesos diodą ant taikinio, o su 3, 5 mm foniniu kabeliu 2 m jungiu jį siųstuvo dėžutėje, kurioje yra „Atmega“mikroschema, akumuliatoriaus įkroviklis ir žalia ir raudona lemputės. Taip siekiama apsaugoti jį nuo smūgio plieninėmis kulkomis.

2 žingsnis: žaidimų valdiklis

Žaidimo valdiklis
Žaidimo valdiklis
Žaidimo valdiklis
Žaidimo valdiklis
Žaidimo valdiklis
Žaidimo valdiklis
Žaidimo valdiklis
Žaidimo valdiklis

Kitas dalykas, kurį turime padaryti, yra sukurti jutiklių valdiklį. Tai „Arduino“, kuris naudoja NRF24L01 modulį, kad galėtų bendrauti su jutikliais. Nieko daugiau. Tada „Arduino“yra prijungtas prie USB prie aviečių pi, kad jis veiktų.

Štai kaip tai veiks. Jis naudoja seriją, kad žinotų, ką daryti. Pi išsiųs serijines komandas. Pirmiausia sąrankos metu jis išsiunčia, kiek tikslų pridėjote, ir taikinių identifikavimo numerius. Tada jis atliks bandymo funkciją ir informuos aviečių pi, jei jie bendrauja tarpusavyje.

Kai žaidi žaidimą, jis persiunčia iš pi, kokio tipo žaidimą ir kiek raundų/smūgių naudoti. Viskas.

Galima naudoti NRF24L01 modulius aviečių pi, bet man „Arduino“yra geresnis pasirinkimas nuodėmių, kurių niekada nenaudoju avietėse, todėl nežinau, kaip jos veikia ilgą laiką

Yra maitinimo modulis, kuris naudoja 5 v, kad siųstuvams būtų suteikta teisinga stabili galia. Galite juos naudoti su savimi „Arduino“(žr. Paveikslėlį), pavadinimas yra „Socket Adapter Module Board“

Kai žaidi, taikiniai bus atsitiktinai suaktyvinami po vieną. Kai vienas nukentės, kitas bus suaktyvintas.

Bandymo metu galite suaktyvinti #DEFINE DEBUG, kad pamatytumėte, kaip jis veikia, bet ne tada, kai jį naudosite „pi“kompiuteryje, tada jis neveiks.

Atsisiųskite kodą „GitHub“puslapyje.

3 žingsnis: Raspberry Pi

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

Dabar priėjome prie Raspberry Pi.

Pridėjau keletą papildomų funkcijų, kad galėčiau turėti maitinimo mygtuką. „ATXRaspi 3“yra puikus modulis, kurį galite įjungti, išjungti ir iš naujo paleisti mygtuku. Taip pat RTCRaspi, kad laikas ir data būtų rodomi pi. Taip pat tapo įmanoma tiesiog prijungti tinklo kabelį, nes turiu atlikti tam tikrus sistemos atnaujinimus. Juos rasite „Lowpowerlab“

Šiluminį spausdintuvą rasite „sparkfun“, o brūkšninių kodų skaitytuvą - „Amazon“.

„Pi“kompiuteris veikia kiosko režimu, todėl naršyklė atsidarys paleidžiant. Visų pirma pi kompiuteryje turite turėti žiniatinklio serverį su PHP 7 ir „mysql“. (Internete yra daug vadovų)

PASTABA: jei ketinate naudoti šiluminį spausdintuvą su „Raspberry pi“, kuriame yra „Bluetooth“, pirmiausia turite jį išjungti

„Python“scenarijui reikia „pyserial“ir jūs jį įdiegiate: sudo apt-get install python-serial

Kad „mysql“veiktų, įdiekite šiuos veiksmus:

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

suso apt-get install pymysql

Dabar galite valdyti „Arduino“per seriją ir atnaujinti „mysql“duomenų bazę.

Kitas žingsnis yra sukurti „python“scenarijų, kad būtų galima prisijungti prie „mysql“.

Visuose trijuose „Python“scenarijuose pakeiskite ryšį su „mysql“duomenų baze.

Kitas žingsnis - paleisti „python“scenarijų paleidžiant.

Yra trys „python“scenarijai. „Game.py“yra pats svarbiausias iš visų, kuriame yra žaidimo funkcija. ketinate naudoti brūkšninių kodų skaitytuvą.

Norėdami juos automatiškai paleisti, redaguokite:

sudo nano /etc/rc.local

ir apačioje prieš išėjimą 0 pridėkite:

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

Prašome pakeisti į tinkamą „Python“scenarijaus vietą ir nepamirškite & ženklo pabaigoje

Dabar turime sukurti žiniatinklio naršyklės kiosko režimą, pirmiausia pašalinkite žymeklį:

sudo apt-get install unclutter

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

Dabar tame faile raskite ir komentuokite:

@xscreensaver -no -splash # komentuokite šią eilutę, kad išjungtumėte ekrano užsklandą

Žemiau pridėkite:

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

Kitas žingsnis, norint pašalinti visus įkrovos tekstus ir kitus dalykus, taip pat pridėti savo įkrovos ekraną, yra trumpas vadovas:

sudo nano /boot/config.txt ir apačioje adddisable_splash = 1

Pašalinkite tekstinį pranešimą po purslų vaizdu:

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

Raskite ir pašalinkite (arba komentuokite):

message_sprite = Sprite (); message_sprite. SetPosition (ekrano plotis * 0,1, ekrano aukštis * 0,9, 10000);

ir:

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

Dabar pašaliname įkrovos pranešimus:

sudo nano /boot/cmdline.txt

pakeiskite „console = tty1“į „console = tty3“

ir eilutės pabaigoje pridėkite:

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

Ir pakeiskite pi splash savo:

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

Dabar jūs turite savo žaidimo įkrovos ekraną. Dabar jūsų kompiuteris yra paruoštas valdyti žaidimą. Taigi pereikite prie kito žingsnio!

4 žingsnis: nustatykite žaidimą

Šiuo metu jūs sukūrėte žaidimą.

Pirmiausia turite nustatyti „webbsystem“. Įkelkite duomenų bazę į savo „mysql“serverį. Failas yra aplanke „apima“ir pavadintas „database.sql“

Kitas žingsnis yra redaguoti konfigūracijos failą, kurį rasite aplanko pavadinime config.php Pakeiskite prisijungimo prie duomenų bazės informaciją, kad scenarijus veiktų.

Žiniatinklio sistema yra pagrįsta keliomis kalbomis ir parašyta anglų kalba. Yra vertimas į švedų kalbą. Jei norite daugiau kalbų, jums reikia programinės įrangos pavadinimu Poedit.

Norėdami pridėti daugiau kalbų žiniatinklio sistemoje, turite redaguoti i18n_setup.php ir pridėti masyvą:

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

Taip pat norėdami pakeisti numatytąją kalbą turite pakeisti 27 eilutėje: $ lang = 'en_US'; pakeiskite en_US į jūsų kalbą.

kalbos failai turi būti dedami į lokalę/LANGCODE/LC_MESSAGES/ir turi būti pavadinti main.mo (pakeisti langcode į jūsų kalbą)

Norėdami pakeisti klaviatūrą rinkmenoje selectplayers.php, pakeisite kalbą: "en", // en for english sv for swedish layout: 'qwerty', // qwerty for english swedish-qwerty for swedish

Juos rasite 218 ir 219 linijose

Galimos kalbos yra aplanke: ištekliai/js/klaviatūra/kalbos ir maketai yra ištekliuose/js/klaviatūra/maketai ir pridėkite reikiamus failus prie 118 ir 119 eilučių (pakeiskite tą, kurią dabar rasite)

Pridėti taikinius

Norėdami pridėti tikslų, eikite į localhost/ admin/ ir spustelėkite pridėti tikslus.

Turite pridėti tikslo pavadinimą ir unikalų taikinio ID bei išsiųsti ID, pridėti tiek tikslų, kiek turite.

Pridėti žaidimų

Taip pat turite pridėti keletą žaidimų. Eikite į localhost/ admin/ ir spustelėkite Pridėti žaidimą

Turite pridėti žaidimo pavadinimą, aprašymą, minimalų ir maksimalų žaidėjų tipą, kokio tipo žaidimas, taip pat kaip sunkus žaidimas yra nuo 1 iki 5. Ir kaip žaidimas yra, todėl prie greitojo žaidimo pridėkite kiek pataikymų (30 pavyzdys) greitam ištraukimui, kiek raundų (pavyzdžiui, 8) ir kiek laiko jie ketina žaisti (pvz., 60 vieną minutę)

Pradėkite žaidimą

Kai įjungsite žaidimą, jis atliks tikslinį testavimą. Taigi tikslai turi būti nustatyti prieš paleidžiant pagrindinę sistemą. Jei viskas išlaikyta, galite naudoti sistemą, bet jei ne, negalėsite ja naudotis. Jis bandys bendrauti, kol jie gaus atsakymą.

Sėkmės

Viskas apie tai, norėdami gauti palaikymo ir informacijos apie kodo atnaujinimą, sekite mano šio žaidimo „Facebook“puslapį, kad galėčiau greitai atsakyti. Čia rasite nuorodas viršuje.

Rekomenduojamas: