Բովանդակություն:

Arduino Կրակոցներ խաղ V3: 4 քայլ
Arduino Կրակոցներ խաղ V3: 4 քայլ

Video: Arduino Կրակոցներ խաղ V3: 4 քայլ

Video: Arduino Կրակոցներ խաղ V3: 4 քայլ
Video: 1. Q Light Controller + Սկսել QLC +- ով: Արշավներ եւ գործառույթներ 2024, Հուլիսի
Anonim
Image
Image
Arduino Կրակոցներ խաղ V3
Arduino Կրակոցներ խաղ V3
Arduino Կրակոցներ խաղ V3
Arduino Կրակոցներ խաղ V3
Arduino Կրակոցներ խաղ V3
Arduino Կրակոցներ խաղ V3

Այս խաղը ձեզ համար է, ովքեր թիրախների վրա կրակելու համար օգտագործում են airsoft կամ co2: Դա խաղ է:

Խաղի և աջակցության մասին արդի տեղեկատվության համար ՝

www.facebook.com/arduinoshooting/

Խաղի մասին իմ բլոգի էջի համար.

shootinggameblog.wordpress.com

Խաղի մասին ծածկագրերի համար.

github.com/shootinggame82/Shooting-game-v3

Հրաձգության խաղը x թիրախներ են, որոնք անլար են, յուրաքանչյուր թիրախ ունի թրթռման սենսոր, որը զգում է թրթռանքը, որը ստանում է հարվածի ժամանակ: Անլար տվիչները Atmega328 չիպ է (Arduino Uno չիպ) և ունեն լիցքավորման Li-Po մարտկոց:

Այս խաղի հիմնական վերահսկիչը վերահսկվում է Arduino- ի կողմից և սերիական վերահսկվում է Raspberry Pi- ից:

Այսպիսով, ինչպես է աշխատում այս խաղը: Դե, դա 3 խաղի ռեժիմ է.

Արագ ժամանակ. Խաղացեք X փուլ և կրակեք այնքան արագ, որքան կարող եք յուրաքանչյուր թիրախի վրա:

Timամանակի ռեժիմ. Կրակեք որքան հնարավոր է շատ թիրախներ X վայրկյանների ընթացքում:

Rapidfire. Նկարահանել X կադրեր ամենաարագ ժամանակ:

Համակարգը մեզ փոխանցում է NRF24L01 հաղորդիչները ՝ հիմնական վերահսկիչից լավ հեռավորություններ ստանալու համար: Նրանք աշխատում են 2.6 ԳՀց հաճախականությամբ (նույնը, ինչ WiFi- ն աշխատում է)

Նախկին նախագծերում ես օգտագործում էի Piezo- ն թրթռման համար, բայց այժմ օգտագործվում են Vibration Sensor Switch: Բայց դուք դեռ կարող եք օգտագործել Piezo- ն, եթե պատրաստել եք այս խաղի իմ հին տարբերակը:

Խաղն ունի Raspberry Pi 7 դյույմանոց սենսորային էկրան, որը պահում է խաղը վերահսկող վեբ համակարգը: Տերմինալային տպիչը տպում է արդյունքները:

Պարագաներ

Հաղորդիչների համար

  • X Atmega328 Arduino Bootloader- ով (կախված նրանից, թե քանի թիրախ է)
  • X Vibration Sensor անջատիչ
  • X Կապույտ Led
  • X Green Led
  • X Red Led
  • X 3.7v Li-Po մարտկոց
  • X FC-75 Li-Po լիցքավորման մոդուլ (կամ այլ մոդել)
  • X 100 uF կոնդենսատոր
  • X Պատյաններ սենսորների համար
  • X LD1117V33 (ապահովում է 3.3 Վ հաղորդիչին)
  • X NRF24L01 մոդուլներ
  • X x 3 220 Օմ դիմադրություն (3 -ը անհրաժեշտ է մեկ թիրախի համար)
  • X 16 ՄՀց բյուրեղ
  • X x 2 Չպլորացված կոնդենսատորներ 22 pF (մեկ թիրախի համար անհրաժեշտ է 2)

Հիմնական Arduino- ի համար

  • 1 Arduino (խորհուրդ է տրվում Nano կամ Uno, անհրաժեշտ է ունենալ USB)
  • 1 NRF24L01 մոդուլ
  • 1 10 uF կոնդենսատոր

Ազնվամորի Pi- ի համար

  • Raspberry Pi (ես օգտագործել եմ 3 Բ)
  • 7 "դիպչող էկրան
  • ATXRaspi (կամընտիր, բայց լավ էներգիայի կոճակի մոդուլ)
  • RTCRaspi (ըստ ցանկության, բայց լավ RTC մոդուլ ՝ ժամանակը և ամսաթիվը պահելու համար)
  • Տերմալ տպիչ (ըստ ցանկության, բայց անհրաժեշտ էր, որ կարողանայի տպել)
  • Շտրիխ սկաներ (USB տարբերակ, որն աշխատում է ստեղնաշարի պես, ըստ ցանկության)
  • Լավ 5 Վ հզորություն (ես օգտագործում էի հին 12 վ USB ՝ 2,5 Ա հզորությամբ)

Այլ իրեր

  • 12 վ հզորություն (ես ունեմ մեկը 12 Ահ)
  • Networkանցի վարդակից (Հեշտացրեք ցանցին միանալը)
  • Մալուխներ

Քայլ 1: Անլար տվիչներ

Անլար սենսորներ
Անլար սենսորներ
Անլար սենսորներ
Անլար սենսորներ
Անլար սենսորներ
Անլար սենսորներ

Եկեք սկսենք սենսորների պատրաստումը: Այս խաղի համար ես օգտագործում եմ 4 տվիչ: Բայց դուք կարող եք հեշտությամբ ավելացնել ավելի շատ տվիչներ: Սենսորները հաղորդակցվում են 4 թվանշանի կոդով, երբ հիմնական համակարգն ուղարկի կոդը, թե որ գործառույթով ճիշտ կոդով սենսորը լուսավորվի և պատրաստ լինի թիրախին: Կապույտ լույսը պետք է տեղեկացնի, որ դա այն թիրախն է, որին դուք պատրաստվում եք հարվածել:

Մենք ունենք նաև կանաչ և կարմիր լեդ: Կանաչը միշտ վառվում է ՝ տեղեկացնելու, որ սենսորը միացված է: Կարմիրը կլուսավորվի միայն այն դեպքում, երբ մարտկոցը 3.1 Վ -ից պակաս է (այն չիպի մեջ ներկառուցված գործառույթն օգտագործում է ՝ հաշվարկելու, թե որքան է մարտկոցը:

Թրթռման սենսորը միացված է անալոգային քորոցին և կարդում է դրա արժեքը: Երբ արժեքը նվազում է, սենսորը թրթռում է ունենում, և դա այն է, որտեղ մենք գրանցում ենք հարվածը:

Թիրախն ունի անհաջող գործառույթ, որը չի ներառում X վայրկյանում (կանխադրվածը 15 վրկ է) կամ եթե փոխանցումը չի կարող կատարվել, նրանք կվերադառնան սկզբնական դիրքի:

Ես չեմ բացատրելու, թե ինչպես եք պատրաստվում լարել, ստուգեք էլեկտրական թերթիկը ՝ տեսնելու համար, թե ինչպես եք դա անելու: Մի բան, որ դրա վրա չկա, մարտկոցն է, հոսանքի անջատիչը և լիցքավորիչը: Դա ձեր որոշելիքն է, թե ինչպես եք դա ցանկանում:

ՆՇԱՆԱԿՈ THEԹՅՈՆ NRF24L+ մոդուլի մասին

Դա կարող է ցավ պատճառել… դրանք կայուն դարձնելու համար ՝ զուգակցված լավ ուժի և մեկուսացման շուրջ, և ծածկագիրը, որը կստիպի նրանց աշխատել: Ինձ համար 10 uF կոնդենսատորը կապահովի ինձ կայուն և լավ կապով, բայց խնդրում եմ նախ փորձեք, եթե ձեզ անհրաժեշտ է, օրինակ, 100 uF կոնդենսատոր: Նաև դրանք փաթաթեք նախ պլաստմասե փայլաթիթեղով, այնուհետև ալյումինե փայլաթիթեղով `դրանք միջամտությունից պաշտպանելու համար:

Նաև ծածկագրում ՝ տվյալների արագությունը ձեզ պետք չէ ավելի քան 250 Կբ, որպեսզի խնդիրը չլինի: Բայց PA: myRadio.setPALevel (RF24_PA_MIN);

MIN- ի (Սա փորձարկման ժամանակ է) կոդի մեջ այն ամենացածրն է և չի օգտագործի այդքան ուժ, բայց միջակայքն այդքան երկար չի լինի: Եթե դուք ստացել եք կայուն և լավ ուժ նրանց համար, կարող եք գնալ մինչև RF24_PA_MAX ՝ ամենաերկար հեռահարությունը ստանալու համար, ԲԱՅ they նրանց դրա համար անհրաժեշտ է GOOOOOD կայուն հզորություն: Փորձեք նաև LOW AND HIGH (Փոխել միայն MAX տեքստը) `տեսնելու, թե արդյոք լավ հաղորդակցություն ունեք: Նաև լավ հեռահարություն կստանաք OWԱOWՐ և ԲԱՐՁՐ, եթե մտադիր չեք դիպուկահար լինել:

Նաև հաղորդիչներն առնվազն մեկ մետր հեռավորության վրա պահեք, փակելը կարող է ազդանշանը վատացնել:

Փորձարկեք կապը որոշ պինգի օրինակով NRF24 գրադարանում (հղում GitHub- ում)

Կոդում անհրաժեշտ է սահմանել այդ թիրախի եզակի նույնականացման համարը.

int targID = 3401; // Սա թիրախային ID- ն է

int sendID = 2401; // Սա պատասխանի ID- ն է

Կա նաև 3 DEFINE գործառույթ.

#սահմանեք ԽԱԱՈԹՅՈՆԸ

#սահմանել մարտկոցը

#define SHAKE // IF SHAKE SWITCH- ը ՕԳՏԱԳՈՐՎՈՄ Է ՀԻՆ ՊԻԵZՈՅԻ ՓՈԽԱՐԵՆ

DEBUG:

Թեստի ժամանակ դա լավ է սահմանել: Բայց երբ դրանք հասանելի դարձնեք, մի ակտիվացրեք այն:

ՄԱՐՏԿՈ

Եթե չեք ցանկանում մարտկոցի ստուգիչ ունենալ թիրախների համար, ապա պետք է հեռացնեք այս սահմանումը:

ԹԱAKԵԼ:

Եթե դուք կառուցել եք իմ հին տարբերակը, ունեք պիեզո տվիչներ, ապա հեռացրեք սա ՝ դրանց համար ճիշտ կոդ ստանալու համար:

ATMEGA328 չիպ

Arduino nano- ի փոխարեն որոշեցի օգտագործել ATMEGA328 չիպը (Uno boot loader- ով), դրանք պարզ ծրագրավորելու համար պարզապես չիպը Arduino Uno- ից հանել և ավելացնել այս չիպը և վերբեռնման կոդը: Ստուգեք էլեկտրական սխեման, թե ինչպես կառուցել թիրախները:

Օրենսգիրքը

Arduino IDE- ի փոխարեն ես գրել եմ կոդը PlatformIO- ով: Դա ավելի լավ ծրագրային ապահովում է: Այսպիսով, ծածկագիրը մի փոքր այլ է: Խորհուրդ եմ տալիս դրա փոխարեն օգտագործել այս ծրագրաշարը:

Թիրախային և հաղորդիչ տուփ

Ես կցել եմ սենսորը և կապույտ լուսամփոփը թիրախի վրա, իսկ 2 մետր երկարությամբ 3,5 մմ ֆոնո մալուխով այն միացնում եմ հաղորդիչ տուփին, որը պահում է ատմեգա չիպը, մարտկոցի լիցքավորիչը և կանաչ և կարմիր լապտերը: Սա այնպես է, որ այն պաշտպանվի պողպատե փամփուշտներով հարվածներից:

Քայլ 2: Խաղի վերահսկիչ

Խաղի վերահսկիչ
Խաղի վերահսկիչ
Խաղի վերահսկիչ
Խաղի վերահսկիչ
Խաղի վերահսկիչ
Խաղի վերահսկիչ
Խաղի վերահսկիչ
Խաղի վերահսկիչ

Հաջորդ բանը, որ մենք պետք է անենք, սենսորների համար վերահսկիչ սարքելն է: Դա Arduino- ն է, որը սենսորների հետ հաղորդակցվելու համար օգտագործում է NRF24L01 մոդուլ: Ոչ մի ուրիշ բան. Այնուհետև Arduino- ն միացված է USB- ով ազնվամորու pi- ում `աշխատելու համար:

Այսպես է աշխատելու: Այն օգտագործում է սերիալ ՝ իմանալու համար, թե ինչ անել: pi- ն սերիական հրամաններ կուղարկի: Սկզբում կարգաբերման ընթացքում այն ուղարկում է, թե քանի թիրախ եք ավելացրել, և թիրախների նույնականացման համարները: Այնուհետև այն կկատարի թեստի գործառույթը և կտեղեկացնի ազնվամորու pi- ն, եթե նրանք իսկապես շփվեն միմյանց հետ:

Խաղը խաղալիս pi- ից կուղարկվի, թե ինչ տեսակի խաղ է և քանի ռաունդ/հիթ օգտագործել: Վերջ

Հնարավոր է օգտագործել NRF24L01 մոդուլները ազնվամորու pi- ում, բայց ինձ համար Arduino- ն ավելի լավ տարբերակ է: Ես երբեք դրանք ազնվամորու մեջ չեմ օգտագործում, ուստի չգիտեմ, թե որքան լավ են դրանք աշխատում երկարաժամկետ հեռանկարում:

Գոյություն ունի էներգիայի մոդուլ, որն օգտագործում է 5 վ ՝ հաղորդիչներին ճիշտ կայուն էներգիա ապահովելու համար: Դուք կարող եք դրանք օգտագործել Arduino- ի հետ (տես նկարը) անունը Socket Adapter Module Board է

Երբ խաղում եք, թիրախները պատահականորեն կակտիվացվեն մեկ առ մեկ: Երբ մեկը հարվածվում է, մյուսը կակտիվանա:

Թեստի ընթացքում կարող եք ակտիվացնել #DEFINE DEBUG- ը ՝ տեսնելու, թե ինչպես է այն աշխատում, բայց ոչ այն ժամանակ, երբ այն օգտագործում եք pi համակարգչում, այն ժամանակ չի աշխատի:

Ներբեռնեք կոդը GitHub էջում:

Քայլ 3: Ազնվամորի Պի

Ազնվամորի Պի
Ազնվամորի Պի
Ազնվամորի Պի
Ազնվամորի Պի
Ազնվամորի Պի
Ազնվամորի Պի
Ազնվամորի Պի
Ազնվամորի Պի

Այժմ մենք եկել ենք Raspberry Pi- ին:

Ես ավելացրել եմ մի քանի լրացուցիչ գործառույթներ, որպեսզի կարողանամ ունենալ հոսանքի կոճակ: ATXRaspi 3 -ը հիանալի մոդուլ է, կարող եք միացնել, անջատել և կոճակով վերագործարկել pi- ն: Նաև RTCRaspi ՝ ժամանակը և ամսաթիվը պի վրա պահելու համար: Նաև հնարավոր դարձրեց պարզապես միացնել ցանցի մալուխը, եթե ես պետք է որոշ թարմացումներ կատարեմ համակարգում: Դուք դրանք կգտնեք Lowpowerlab- ում

Theերմային տպիչը, որը դուք կգտնեք sparkfun- ում, իսկ շտրիխ կոդի ընթերցողը հասանելի է amazon- ում:

Pi համակարգիչը աշխատում է կրպակների ռեժիմում, այնպես որ զննարկիչը կբացվի սկզբից: Նախևառաջ պետք է ունենալ PHP 7 և mysql վեբ սերվեր ՝ pi համակարգչի վրա: (Համացանցում շատ ուղեցույցներ կան դրա համար)

ԽՆԴՐՈՄ ԵՆՔ Ո ifՇԱԴՐՈԹՅՈՆ. Եթե մտադիր եք օգտագործել ջերմային տպիչ `bluetooth- ով ներկառուցված ազնվամորի pi- ով, ապա նախ պետք է անջատեք այն:

Պիթոնի սցենարին անհրաժեշտ է պիզերալ և դուք տեղադրեք այն. Sudo apt-get install python-serial

Mysql- ի աշխատանքը դարձնելու համար տեղադրեք հետևյալը.

sudo apt-get տեղադրել mysql-python sudo apt-get տեղադրել python-mysql.connector

suso apt-get տեղադրել pymysql

Այժմ դուք կարող եք վերահսկել ձեր Arduino- ն սերիայի միջոցով և նաև թարմացնել mysql տվյալների բազան:

Հաջորդ քայլը mysql- ին միանալու համար պիթոնի սցենարի ստեղծումն է:

Բոլոր երեք Python սցենարներում փոխեք կապը ձեր mysql տվյալների բազայի հետ:

Հաջորդ քայլը պիթոնի սցենարի գործարկումն է սկզբում:

Գոյություն ունեն երեք python script. պատրաստվում է օգտագործել շտրիխ սկաները:

Որպեսզի դրանք ինքնաբերաբար սկսվեն, ես խմբագրում եմ.

sudo nano /etc/rc.local

և 0 -ից դուրս գալուց առաջ ներքևում ավելացրեք հետևյալը.

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

Խնդրում ենք փոխել ձեր Python սցենարի ճիշտ տեղը և վերջում մի մոռացեք & նշանը:

Այժմ մենք պետք է կրպակի ռեժիմ ստեղծենք վեբ դիտարկիչի համար, նախ հեռացրեք կուրսորը.

sudo apt-get install unclutter

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

այժմ այդ ֆայլում գտեք և մեկնաբանեք.

@xscreensaver -no -splash # մեկնաբանեք այս տողը ՝ էկրանապահիչն անջատելու համար

Ստորև ավելացրեք.

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

Հաջորդ քայլը ՝ բեռնախցիկի բոլոր տեքստերն ու իրերը հեռացնելու համար, ինչպես նաև ձեր սեփական բեռնախցիկի էկրանը ավելացնելու համար այստեղ արագ ուղեցույց է.

sudo nano /boot/config.txt և ներքևում adddisable_splash = 1

Հեռացնել տեքստային հաղորդագրությունը շաղ տալ պատկերի տակ.

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

Գտեք և հեռացրեք (կամ մեկնաբանեք)

message_sprite = Sprite (); message_sprite. SetPosition (էկրանի_այնություն * 0.1, էկրանի_բարձրություն * 0.9, 10000);

և ՝

my_image = Image. Text (տեքստ, 1, 1, 1); message_sprite. SetImage (my_image);

Այժմ մենք հեռացնում ենք բեռնման հաղորդագրությունները

sudo nano /boot/cmdline.txt

փոխարինել «մխիթարել = tty1» - ով «մխիթարել = tty3» - ով

և տողի վերջում ավելացնել

splash հանգիստ plymouth.ignore-serial-consoles logo.nologo vt.global_cursor_default = 0

Եվ փոխարինեք pi splash- ը ձեր սեփականով

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

Այժմ դուք ունեք ձեր սեփական խաղային բեռնման էկրանը: Ձեր pi համակարգիչն այժմ պատրաստ է վարել խաղը: Այսպիսով, անցեք հաջորդ քայլին:

Քայլ 4: Կարգավորեք խաղը

Այս պահին դուք այժմ ստեղծել եք խաղը:

Առաջին հերթին, դուք պետք է կարգավորեք վեբ համակարգը: Վերբեռնեք տվյալների բազան ձեր mysql սերվերի վրա: Ֆայլը ներառված թղթապանակում է և անվանվում է database.sql

Հաջորդ քայլը կազմաձևման ֆայլը խմբագրելն է, որը դուք կգտնեք ընդգրկված թղթապանակի անունում config.php Փոխեք տվյալների բազայի մուտքի տվյալները, որպեսզի սցենարը աշխատի:

Վեբ համակարգը բազմալեզու է և գրված է անգլերեն: Կա շվեդերեն թարգմանություն: Ավելի շատ լեզու ստեղծելու համար անհրաժեշտ է Poedit անունով ծրագրակազմ:

Վեբ համակարգում ավելի շատ լեզու ավելացնելու համար անհրաժեշտ է խմբագրել i18n_setup.php և զանգվածում ավելացնել ՝

վերադարձ in_array ($ locale, ['en_US', 'sv_SE']); (Տող 23)

Նաև կանխադրված լեզուն փոխելու համար հարկավոր է փոխել տող 27 -ում ՝ $ lang = 'hy_US'; en_US- ը փոխեք ձեր լեզվով:

լեզվական ֆայլերը պետք է տեղադրվեն տեղերում/LANGCODE/LC_MESSAGES/և անվանվեն main.mo (փոխել լեզվի կոդը ձեր լեզվով)

ֆայլում ստեղնաշարը փոխելու համար selectplayers.php փոխում եք լեզուն ՝ «en», // en անգլերեն sv շվեդերեն դասավորության համար ՝ «qwerty», // qwerty անգլերեն շվեդերեն-qwerty շվեդերեն

Դուք դրանք գտնում եք 218 և 219 տողերում

Առկա լեզուները թղթապանակում են. Ակտիվները/js/ստեղնաշարը/լեզուները և դասավորությունը ակտիվներում/js/ստեղնաշարի/դասավորության մեջ են և ավելացրեք ճիշտ ֆայլերը 118 և 119 տողերին (փոխարինեք այն, ինչ այժմ այնտեղ եք գտնում)

Ավելացնել թիրախներ

Թիրախներ ավելացնելու համար գնացեք localhost/ admin/ և կտտացրեք ավելացնել թիրախներ:

Դուք պետք է նշեք թիրախի անունը և եզակի թիրախային ID- ն և ուղարկեք ID, ավելացրեք այնքան թիրախ, որքան ունեք:

Ավելացնել խաղեր

Անհրաժեշտ է նաև մի քանի խաղ ավելացնել: Գնացեք localhost/ admin/ և կտտացրեք խաղ ավելացնել

Դուք պետք է ավելացնեք խաղի անվանումը, նկարագրությունը, խաղացողների նվազագույն և առավելագույն քանակը, ինչպես նաև խաղի տևողությունը 1 -ից 5 -ի միջև: Իսկ ինչպիսի՞ն է խաղը, այնպես որ quickfire խաղի համար ավելացրեք քանի հարված (օրինակ 30) արագավարտի համար քանի ռաունդ (օրինակ ՝ 8) և ժամանակի համար, թե որքան ժամանակ են նրանք խաղալու (օրինակ ՝ 60 րոպե մեկ րոպեի համար)

Սկսեք խաղը

Երբ միացնեք խաղը, այն կկատարի թիրախային թեստավորում: Այսպիսով, հիմնական համակարգը գործարկելուց առաջ թիրախները պետք է լինեն: Եթե բոլորն անցնեն թեստը, կարող եք օգտագործել համակարգը, իսկ եթե ոչ, ապա չեք կարող օգտագործել այն: Այն կփորձի շփվել, մինչև նրանք պատասխան չստանան:

Հաջողություն

Դե, դա դրա մասին է, կոդի թարմացման մասին աջակցության և տեղեկատվության համար խնդրում եմ հետևեք այս խաղի իմ Facebook էջին, որպեսզի ես արագ պատասխանեմ ձեզ: Դուք կգտնեք հղումներ վերևում այստեղ:

Խորհուրդ ենք տալիս: