Mündəricat:

Arduino Atışma Oyunu V3: 4 addım
Arduino Atışma Oyunu V3: 4 addım

Video: Arduino Atışma Oyunu V3: 4 addım

Video: Arduino Atışma Oyunu V3: 4 addım
Video: REZİL EDEN TEHLİKELİ MASA OYUNU ! #3 w/@TolunayOren @MesutCanTomay 2024, Iyul
Anonim
Image
Image
Arduino Atışma Oyunu V3
Arduino Atışma Oyunu V3
Arduino Atışma Oyunu V3
Arduino Atışma Oyunu V3
Arduino Atışma Oyunu V3
Arduino Atışma Oyunu V3

Bu oyun, hədəflərə atəş açmaq üçün airsoft və ya co2 istifadə edənlər üçündür. Bu bir oyundur.

Oyun və dəstək haqqında ən son məlumat üçün:

www.facebook.com/arduinoshooting/

Oyun haqqında blog səhifəm üçün:

shootinggameblog.wordpress.com

Oyunla bağlı kodlar üçün:

github.com/shootinggame82/Shooting-game-v3

Atışma oyunu simsiz olan x hədəflərdir, hər bir hədəf vurulduqda titrəməni hiss edən bir titrəmə sensoru var. Simsiz sensorlar bir Atmega328 çipidir (Arduino Uno çipi) və Li-Po batareyasına malikdir.

Bu oyunun əsas nəzarətçisi bir Arduino tərəfindən idarə olunur və Serial Raspberry Pi -dən idarə olunur.

Yaxşı, bu oyun necə işləyir? Yaxşı 3 oyun rejimi:

Quicktime: X tur oynayın və hər hədəfi vura biləcəyiniz qədər sürətli vurun.

Zaman rejimi: X saniyədə bacardığınız qədər çox vur.

Rapidfire: X çəkilişlərini ən sürətli zamanda vurun.

Sistem bizə NRF24L01 ötürücüsünü əsas nəzarətçidən yaxşı bir şəkildə uzaqlaşdırır. 2.6 GHz tezliyində işləyirlər (WiFi işlədiyi kimi)

Keçmiş proyektlərimdə vibrasiya üçün Piezodan istifadə edirdim, amma indi Vibrasiya Sensor Anahtarı istifadə olunur, amma bu oyunun köhnə versiyasını hazırlamısınızsa yenə də Piezodan istifadə edə bilərsiniz.

Oyunda, oyunu idarə etdiyiniz veb sistemi tutan bir Raspberry Pi 7 toxunma ekranı var. Bir terminal printeri nəticələri çap edir.

Təchizat

Vericilər üçün:

  • Arduino Bootloader ilə X Atmega328 (Neçə hədəfdən asılı olaraq)
  • X Titrəmə Sensoru Açarı
  • X Mavi Led
  • X Yaşıl Led
  • X Qırmızı Led
  • X 3.7v Li-Po batareyası
  • X FC-75 Li-Po şarj cihazı modulu (və ya başqa bir model)
  • X 100 uF kondansatör
  • X Sensorlar üçün qutular
  • X LD1117V33 (Verici üçün təhlükəsiz 3.3 V edir)
  • X NRF24L01 Modulları
  • X x 3 220 Ohm Rezistorlar (bir hədəf üçün 3 lazımdır)
  • X 16 MHz Kristal
  • X x 2 Təmizlənməmiş Kondansatörler 22 pF (bir hədəf üçün 2 lazımdır)

Əsas Arduino üçün:

  • 1 Arduino (Nano və ya Uno tövsiyə olunur, USB olmalıdır)
  • 1 NRF24L01 Modulu
  • 1 uF kondansatör

Moruq Pi üçün:

  • Raspberry Pi (3B istifadə etdim)
  • 7 "Dokunmatik Ekran
  • ATXRaspi (İsteğe bağlı, lakin yaxşı bir güc düyməsi modulu)
  • RTCRaspi (İsteğe bağlı, lakin vaxtı və tarixi saxlamaq üçün yaxşı bir RTC modulu)
  • Termal printer (İsteğe bağlı, lakin çap edə bilmək üçün lazımdır)
  • Barkod skaneri (klaviatura kimi işləyən USB versiyası, İsteğe bağlı)
  • Yaxşı 5V güc (2.5 A gücündə köhnə 12v USB istifadə etdim)

Başqa şeylər:

  • 12v güc (12 Ah -da bir var)
  • Şəbəkə yuvası (Şəbəkəyə qoşulmağı asanlaşdırın)
  • Kabellər

Addım 1: Simsiz Sensorlar

Simsiz Sensorlar
Simsiz Sensorlar
Simsiz Sensorlar
Simsiz Sensorlar
Simsiz Sensorlar
Simsiz Sensorlar

Sensorları hazırlamağa başlayaq. Bu oyun üçün 4 sensordan istifadə edirəm. Ancaq daha çox sensoru əlavə edə bilərsiniz. Əsas sistem, doğru kodlu sensoru hansı funksiyanı yandıracaq və hədəfə hazır olanda kodu göndərdikdə sensorlar 4 rəqəm kodu ilə əlaqə qurur. Mavi işıq, vuracağınız hədəfin olduğunu bildirməkdir.

Həm də yaşıl və qırmızı bir ledimiz var. Sensorun açıq olduğunu bildirmək üçün yaşıl işıq həmişə yanır. Qırmızı rəng yalnız batareya 3.1V -dən aşağı olduqda yanacaq (batareyada nə qədər olduğunu hesablamaq üçün çipdə quraşdırılmış funksiyanı istifadə edir.

Titrəmə sensoru analoq pininə qoşulur və onun dəyərini oxuyur. Dəyər batdıqda, sensorun titrəməsi var və vuruşu qeyd etdiyimiz yer budur.

Hədəfin, X saniyədə vurmadığınız (defolt 15 saniyə) və ya ötürülməsi mümkün olmadıqda, başlanğıc mövqeyinə qayıdacaq bir uğursuz funksiyası var.

Necə tel bağlayacağınızı izah etməyəcəyəm, bunu necə edəcəyinizi bilmək üçün elektrik vərəqini yoxlayın. Üzərində olmayan bir şey batareya, güc açarı və şarj cihazıdır. Bunu necə istədiyinizə qərar vermək sizə bağlıdır.

NRF24L+ Modulu HAQQINDA ƏMƏLİYYAT:

Ətrafında yaxşı bir güc və təcrid ilə birlikdə onları sabit hala gətirmək və onları işə salacaq kod … ağrı ola bilər. Mənim üçün 10 uF kondansatör mənə sabit və yaxşı bir əlaqə verəcək, ancaq əvvəlcə ehtiyacınız olan 100 uF kondansatörü sınayın. Müdaxilə etməmək üçün əvvəlcə plastik folqa və sonra alüminium folqa ilə sarın

Həm də kodda 250 Kb -dən çox ehtiyacınız olmayan məlumat sürətinə ehtiyac yoxdur ki, bu problem olmayacaq. Amma PA: myRadio.setPALevel (RF24_PA_MIN);

MIN olaraq təyin etdiyim kodda (Bu test zamanıdır), ən aşağıdır və bu qədər güc istifadə etməyəcək, amma aralıq o qədər də uzun olmayacaq. Onlara sabit və yaxşı bir gücünüz varsa, ən uzun məsafəni əldə etmək üçün RF24_PA_MAX -a gedə bilərsiniz, AMMA bunun üçün GOOOOOD sabit gücə ehtiyacı var. Yaxşı ünsiyyət qurduğunuzu görmək üçün LOW AND HIGH (Yalnız MAX mətnini dəyişdirin) cəhd edin. Snayper olmayacağınız təqdirdə, LOW və HIGH -da yaxşı bir sıra əldə edəcəksiniz

Həm də ötürücüləri ən azı bir metr aralıda saxlayın, bağlamaq siqnalı pisləşdirə bilər

NRF24 Kitabxanasında bir ping nümunəsi ilə əlaqəni sınayın (GitHubdakı bağlantı)

Kodda bu hədəf üçün unikal identifikasiya nömrəsini təyin etməlisiniz:

int targID = 3401; // Bu hədəf ID -dir

int sendID = 2401; // Bu cavab identifikatorudur

3 DEFINE funksiyası da var:

#DEBUG təyin edin

#BATARYA təyin edin

#define SHAKE // QƏDİM PIEZO ƏRSƏSİNDƏ SİLK SÖZÜ İSTİFADƏ EDİLİR

DEBUG:

Test zamanı bunu müəyyən etmək yaxşıdır. Ancaq onları istifadəyə verdiyiniz zaman onu aktivləşdirməyin.

BATARYA:

Hədəflər üçün batareya yoxlayıcısına sahib olmaq istəmirsinizsə, bu tərifi aradan qaldırmalısınız.

Sarsıt:

Köhnə versiyamı qurmusunuzsa, piezo sensorlarınız var, sonra onlar üçün düzgün kodu əldə etmək üçün bunu çıxarın.

ATMEGA328 çipi

Bir Arduino nano əvəzinə ATMEGA328 çipindən istifadə etmək qərarına gəldim (Uno yükləyicisi ilə), çipi bir Arduino Uno -dan çıxarmaq və bu çipi əlavə etmək və kod yükləmək çox sadədir. Hədəflərin necə qurulacağına dair elektrik sxemini yoxlayın.

Kod

Kodu Arduino IDE əvəzinə PlatformIO ilə yazdım. Proqramlaşdırmaq daha yaxşı bir proqramdır. Yəni kod bir az fərqlidir. Bunun əvəzinə bu proqramı istifadə etməyi məsləhət görürəm.

Hədəf və ötürücü qutusu

Sensoru və mavi ledi hədəfə bağladım və 2 m -də 3, 5 mm -lik bir fono kabeli ilə atmega çipi, batareya şarj cihazı və yaşıl və qırmızı led tutan ötürücü qutusuna bağlayıram. Bu, onu polad güllə ilə vurulmamaq üçün edir.

Addım 2: Oyun Nəzarətçisi

Oyun nəzarətçisi
Oyun nəzarətçisi
Oyun nəzarətçisi
Oyun nəzarətçisi
Oyun nəzarətçisi
Oyun nəzarətçisi
Oyun nəzarətçisi
Oyun nəzarətçisi

Etməli olduğumuz növbəti şey sensorlar üçün nəzarətçi etməkdir. Sensorlar ilə ünsiyyət qurmaq üçün NRF24L01 modulundan istifadə edən bir Arduino. Başqa heçnə. Arduino daha sonra işləmək üçün moruq pi -də USB ilə bağlanır.

Bu necə işləyəcək. Nə edəcəyini bilmək üçün serial istifadə edir. Pi serial əmrləri göndərəcək. Əvvəlcə quraşdırma zamanı əlavə etdiyiniz neçə hədəfi və hədəf nömrələrini göndərir. Sonra test funksiyasını yerinə yetirəcək və bir -biri ilə ünsiyyət qurduqları halda moruq pi -yə məlumat verəcəkdir.

Oyunu oynadığınız zaman pi -dən hansı növ oyun və neçə tur/vuruş istifadə ediləcəyini göndərəcək. Bu belədir.

NRF24L01 modullarını moruq pi -də istifadə etmək mümkündür, amma mənim üçün Arduino, moruqda heç istifadə etmədiyim günahlar üçün daha yaxşı bir seçimdir, buna görə də uzun müddətdə nə qədər yaxşı işlədiklərini bilmirəm

Vericilərə düzgün sabit güc vermək üçün 5 v istifadə edən bir güc modulu var. Onlardan istifadə edə bilərsiniz Arduino (Şəkilə baxın) adı Socket Adapter Module Boarddur

Oynadığınız zaman hədəflər bir -bir təsadüfi olaraq aktivləşdiriləcək. Biri vurulduqda, digəri aktiv olacaq.

Test zamanı #DEFINE DEBUG -un necə işlədiyini görmək üçün aktivləşdirə bilərsiniz, ancaq pi kompüterdə istifadə etdiyiniz zaman işləməyəcək.

Kodu GitHub səhifəsində yükləyin.

Addım 3: Raspberry Pi

Moruq Pi
Moruq Pi
Moruq Pi
Moruq Pi
Moruq Pi
Moruq Pi
Moruq Pi
Moruq Pi

İndi Raspberry Pi -yə gəldik.

Güc düyməsinə sahib olmaq üçün bəzi əlavə funksiyalar əlavə etdim. ATXRaspi 3 əla bir moduldur, pi düyməsini yandırıb söndürə və yenidən başladın. Saat və tarixi pi -də saxlamaq üçün bir RTCRaspi. Sistemdə bəzi yeniləmələr etməyim lazım olduğu halda, sadəcə bir şəbəkə kabelini bağlamağı mümkün etdi. Onları Lowpowerlab -da tapa bilərsiniz

Sparkfun -da tapa biləcəyiniz Termal printer və barkod oxuyucusu Amazon -da mövcuddur.

Pi kompüteri kiosk rejimində işləyir, beləliklə brauzer açılır. Əvvəlcə pi kompüterdə PHP 7 və mysql ilə bir veb serveriniz olmalıdır. (Bunun üçün İnternetdə bir çox bələdçi var)

DİQQƏT: bluetooth quraşdırılmış moruq pi ilə termal printer istifadə edəcəksinizsə, əvvəlcə onu deaktiv etməlisiniz

Python skriptinin pyseriala ehtiyacı var və siz onu quraşdırırsınız: sudo apt-get install python-serial

MySQL işini qurmaq üçün aşağıdakıları edin:

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

suso apt-get pymysql quraşdırın

İndi Arduino -nu serial vasitəsilə idarə edə və həmçinin mysql verilənlər bazasını yeniləyə bilərsiniz.

Növbəti addım, mysql -ə qoşulmaq üçün python skriptini hazırlamaqdır.

Hər üç python skriptində mysql verilənlər bazanızla əlaqəni dəyişdirin.

Növbəti addım, python skriptini başlanğıcda işə salmaqdır.

Üç python script.game.py, oyun funksiyasına sahib olan ən vacib şeydir.print.py, bu yalnız print.ean.py üçün termal printer istifadə edəcəksinizsə lazımdır. barkod skanerindən istifadə edəcək.

Onları avtomatik işə salmaq üçün redaktə edirəm:

sudo nano /etc/rc.local

və 0 çıxışından əvvəl aşağıya aşağıdakıları əlavə edin:

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

Zəhmət olmasa python skriptinizin yerini dəyişdirin və sonundakı & işarəsini unutmayın

İndi veb brauzer üçün bir köşk rejimi yaratmalıyıq, əvvəlcə kursoru silin:

sudo apt-get unclutter quraşdırın

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

İndi bu faylda tapın və şərh edin:

@xscreensaver -no -splash # ekran qoruyucusunu deaktiv etmək üçün bu sətiri şərh edin

Bunun altına əlavə edin:

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

Bütün açılış mətnlərini və əşyalarını silmək üçün növbəti addım, öz açılış ekranınızı da bura əlavə etməkdir:

sudo nano /boot/config.txt və altda adddisable_splash = 1

Şəkil altında mətn mesajını silin:

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

Tapın və silin (və ya şərh edin):

message_sprite = Sprite (); message_sprite. SetPosition (ekran genişliyi * 0.1, ekran yüksəkliyi * 0.9, 10000);

və:

my_image = Image. Text (mətn, 1, 1, 1); message_sprite. SetImage (my_image);

İndi açılış mesajlarını silirik:

sudo nano /boot/cmdline.txt

"konsol = tty1" i "konsol = tty3" ilə əvəz edin

və sətrin sonuna əlavə edin:

sıçrayış sakit plymouth.ignore-serial-konsolları logo.nologo vt.global_cursor_default = 0

Və pi sıçramasını özünüzlə əvəz edin:

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

İndi oyununuz üçün öz xüsusi açılış ekranınız var. Pi kompüteriniz indi oyunu idarə etməyə hazırdır. Növbəti mərhələyə keçin!

Addım 4: Oyunu qurun

Bu nöqtədə indi oyunu yaratdınız.

Əvvəlcə veb sistemini qurmalısınız. Verilənlər bazasını mysql serverinizə yükləyin. Fayl daxil qovluğundadır və database.sql adlanır

Növbəti addım, konfiqurasiya faylını redaktə etməkdir, onu daxil olan qovluqda tapırsınız config.phpScriptin işləyəcəyi üçün verilənlər bazasına giriş məlumatlarını dəyişdirin.

Veb sistemi çox dildədir və ingilis dilində yazılmışdır. Daha çox dil yaratmaq üçün Poedit adlı bir proqrama ehtiyacınız var.

Veb sisteminə daha çox dil əlavə etmək üçün i18n_setup.php faylını redaktə etməli və massivə əlavə etməlisiniz:

in_array qayıt ($ localale, ['en_US', 'sv_SE']); (23 -cü sətir)

Varsayılan dili dəyişdirmək üçün 27 -ci sətirdə dəyişdirməlisiniz: $ lang = 'en_US'; en_US dilini dəyişdirin.

dil faylları locales/LANGCODE/LC_MESSAGES/-ə yerləşdirilməli və main.mo adlandırılmalıdır (Dil kodunuzu dilinizə dəyişdirin)

selectplayers.php faylındakı klaviaturanı dəyişdirmək üçün dili dəyişdirirsiniz: "en", // en isveç dili üçün sv: "qwerty", // ingilis dili üçün qwerty-isveç dili üçün qwerty

Onları 218 və 219 xəttində tapa bilərsiniz

Mövcud dillər qovluqdadır: varlıqlar/js/klaviatura/dillər və düzənlər aktivlər/js/klaviatura/düzənlərdədir və doğru faylları 118 və 119 sətirinə əlavə edin (indi orada tapdığınızı əvəz edin)

Hədəflər əlavə edin

Hədəflər əlavə etmək üçün localhost/ admin/ saytına daxil olun və hədəf əlavə et düyməsini vurun.

Hədəfə və unikal hədəf kimliyinə bir ad əlavə etməlisiniz və şəxsiyyət vəsiqəsi göndərməlisiniz, bir çox hədəfi əlavə etməlisiniz.

Oyunlar əlavə edin

Bəzi oyunlar əlavə etməlisiniz. Localhost/ admin/ bölməsinə gedin və Oyun əlavə et düyməsini basın

Oyun üçün bir ad, bir təsvir, min və maksimum oyunçular hansı oyun növünü, həmçinin oyunun 1 ilə 5 arasında nə qədər çətin olduğunu əlavə etməlisiniz. Oyun necədir, buna görə də fastfire oyunu üçün neçə vuruş əlavə edirsiniz (nümunə 30) neçə turda (məsələn 8) və nə qədər oynayacaqlarını vaxtında çəkmək üçün (məsələn, bir dəqiqə üçün 60)

Oyuna başlayın

Oyunu gücləndirdiyiniz zaman hədəf testini edəcək. Beləliklə, əsas sistemi işə salmadan əvvəl hədəflər olmalıdır. Hamısı testdən keçərsə, sistemdən istifadə edə bilərsiniz, amma keçməsə istifadə edə bilməzsiniz. Cavab alana qədər ünsiyyət qurmağa çalışacaq.

Uğurlar

Budur, kodun yenilənməsi ilə əlaqədar dəstək və məlumat üçün bu oyun üçün Facebook səhifəmi izləyin, buna görə sizə tez cavab verə bilərəm. Burada yuxarıdakı bağlantıları tapa bilərsiniz.

Tövsiyə: