İçindekiler:

Arduino Atış Oyunu V3: 4 Adım
Arduino Atış Oyunu V3: 4 Adım

Video: Arduino Atış Oyunu V3: 4 Adım

Video: Arduino Atış Oyunu V3: 4 Adım
Video: ChatGPT with Arduino Nano #arduino #chatgpt #technology #openAI #electronic 2024, Temmuz
Anonim
Image
Image
Arduino Atış Oyunu V3
Arduino Atış Oyunu V3
Arduino Atış Oyunu V3
Arduino Atış Oyunu V3
Arduino Atış Oyunu V3
Arduino Atış Oyunu V3

Bu oyun, hedeflere ateş etmek için airsoft veya co2 kullanan sizin için. Bu bir oyun.

Oyun ve destek hakkında güncel bilgiler için:

www.facebook.com/arduinoshooting/

Oyunla ilgili blog sayfam için:

shootinggameblog.wordpress.com

Oyunla ilgili kodlar için:

github.com/shootinggame82/Shooting-game-v3

Atış oyunu kablosuz olan x hedeftir, her hedef bir vuruş yapıldığında oluşan titreşimi algılayan bir titreşim sensörüne sahiptir. Kablosuz sensörler bir Atmega328 yongasıdır (Arduino Uno yongası) ve şarjlı Li-Po pile sahiptir.

Bu oyunun Ana denetleyicisi bir Arduino tarafından kontrol edilir ve bir Raspberry Pi'den Seri olarak kontrol edilir.

Peki bu oyun nasıl çalışıyor? 3 oyun modu var:

Quicktime: X tur oynayın ve her hedefte yapabileceğiniz kadar hızlı ateş edin.

Zaman Modu: X saniyede vurabildiğiniz kadar çok hedef vurun.

Rapidfire: En hızlı zamanda X atış yapın.

Sistem, ana kontrolörden iyi bir mesafe almak için NRF24L01 vericileri kullanır. 2,6 GHz'de çalışırlar (WiFi'nin çalıştığı ile aynı)

Geçmiş projelerimde titreşim için Piezo kullanıyordum ama şimdi Titreşim Sensör Anahtarı kullanılıyor. Ama bu oyunun eski versiyonunu yaptıysanız yine Piezo kullanabilirsiniz.

Oyun, oyunu kontrol ettiğiniz web sistemini tutan bir Raspberry Pi 7 dokunmatik ekrana sahiptir. Bir terminal yazıcısı sonuçları yazdırır.

Gereçler

Vericiler için:

  • Arduino Bootloader ile X Atmega328 (Kaç hedef olduğuna bağlı olarak)
  • X Titreşim Sensör Anahtarı
  • X Mavi Led
  • X Yeşil Led
  • X Kırmızı Led
  • X 3.7v Li-Po pil
  • X FC-75 Li-Po Şarj Modülü (Veya başka bir model)
  • X 100 uF Kondansatör
  • Sensörler için X Kılıflar
  • X LD1117V33 (Vericiye 3,3 V güvenli yapar)
  • X NRF24L01 Modülleri
  • X x 3 220 Ohm Dirençler (bir hedef için 3 adet gereklidir)
  • X 16 MHz Kristal
  • X x 2 Unplorized Capacitors 22 pF (bir hedef için 2 gereklidir)

Ana Arduino için:

  • 1 Arduino (Nano veya Uno önerilir, USB olması gerekir)
  • 1 NRF24L01 Modülü
  • 1 10 uF kapasitör

Ahududu Pi için:

  • Raspberry Pi (3B kullandım)
  • 7" Dokunmatik Ekran
  • ATXRaspi (İsteğe bağlı ancak iyi bir güç düğmesi modülü)
  • RTCRaspi (Opsiyonel ancak tarih ve saati tutmak için iyi bir RTC modülü)
  • Termal yazıcı (Opsiyonel ancak çıktı alabilmek için gerekli)
  • Barkod tarayıcı (Klavye gibi çalışan USB versiyonu, Opsiyonel)
  • İyi 5V güç (2,5 A gücünde eski bir 12v USB kullandım)

Diğer şey:

  • 12v güç (12 Ah'de bir tane var)
  • Ağ soketi (Ağa bağlanmayı kolaylaştırın)
  • kablolar

Adım 1: Kablosuz Sensörler

Kablosuz Sensörler
Kablosuz Sensörler
Kablosuz Sensörler
Kablosuz Sensörler
Kablosuz Sensörler
Kablosuz Sensörler

Sensörleri yapmaya başlayalım. Bu oyun için 4 sensör kullanıyorum. Ancak daha fazla sensör ekleyebilirsiniz. Ana sistem kodu gönderdiğinde sensörler 4 haneli kod ile haberleşir ve doğru koda sahip sensörün hangi fonksiyonla yanacağını ve hedefe hazır olmasını sağlar. Mavi ışık, vuracağınız hedefin bu olduğunu bildirmektir.

Ayrıca yeşil ve kırmızı ledimiz var. Yeşil, sensörün açık olduğunu bildirmek için her zaman yanar. Kırmızı, yalnızca pil 3,1V'nin altında olduğunda yanar (pilde ne kadar olduğunu hesaplamak için çipteki yerleşik işlevi kullanır.

Titreşim sensörü analog pine bağlanır ve değerini okur. Değer düşerken, sensör bir titreşim algılar ve isabeti burada kaydederiz.

Hedef, X saniye içinde (varsayılan 15 saniyedir) vurmazsanız veya iletim yapılamazsa, başlangıç pozisyonuna geri dönecek bir failsafe işlevine sahiptir.

Kablolamayı nasıl yapacağınızı anlatmayacağım, bunu nasıl yapacağınızı görmek için elektrik levhasını kontrol edin. Üzerinde olmayan tek şey pil, güç düğmesi ve şarj cihazıdır. Nasıl istediğinize karar vermek size kalmış.

NRF24L+ Modülü HAKKINDA ÖNEMLİ:

Onları istikrarlı hale getirmek, etrafındaki iyi güç ve izolasyonla ve onları çalıştıracağınız kodla birleştirmek acı olabilir. Benim için 10 uF kapasitör bana sağlam ve iyi bir bağlantı sağlayacaktır, ancak örneğin 100 uF kapasitöre ihtiyacınız varsa lütfen önce deneyin. Ayrıca karışmalarını önlemek için önce plastik folyo ve ardından Alüminyum folyo ile sarın

Ayrıca kodda veri hızının 250 Kb'dan fazla olmaması sorun olmayacak. Ama PA: myRadio.setPALevel(RF24_PA_MIN);

MIN olarak belirlediğim kodda (Bu test sırasındadır), en düşük değerdir ve çok fazla güç kullanmaz, ancak menzil çok uzun olmaz. Onlara sağlam ve iyi bir gücünüz varsa, en uzun menzili elde etmek için RF24_PA_MAX'a kadar çıkabilirsiniz, ancak bunun için GOOOOOD kararlı güce ihtiyaçları vardır. İyi bir iletişim kurup kurmadığınızı görmek için DÜŞÜK VE YÜKSEK (yalnızca MAX metnini değiştirin) deneyin. Ayrıca, keskin nişancı olmayacaksanız, DÜŞÜK ve YÜKSEK'te iyi bir menzil elde edeceksiniz

Ayrıca vericileri birbirinden en az bir metre uzakta tutun, kapatmak sinyali kötüleştirebilir

NRF24 Kitaplığındaki bazı ping örnekleriyle iletişimi test edin (GitHub'daki Bağlantı)

Kodda, o hedef için benzersiz kimlik numarasını ayarlamanız gerekir:

int hedefID = 3401; //Bu, hedef kimliğidir

int sendID = 2401; //Bu, yanıt kimliğidir

Ayrıca 3 DEFINE işlevi vardır:

#define HATA AYIKLAMA

#define BATARYA

#define SHAKE //ESKİ PIEZO'NUN YERİNE SHAKE ANAHTARI KULLANILIYOR

HATA AYIKLAMA:

Test sırasında bunun tanımlanmış olması iyidir. Ama onları kullanılabilir hale getirdiğinizde, etkinleştirmeyin.

BATARYA:

Hedefler için bir pil denetleyicisine sahip olmak istemiyorsanız, bu tanımı kaldırmanız gerekir.

SALLAMAK:

Eski sürümümü oluşturduysanız, piezo sensörleriniz var, ardından onlar için doğru kodu almak için bunu kaldırın.

ATMEGA328 Çip

Arduino nano yerine ATMEGA328 çipini (Uno önyükleyicili) kullanmaya karar verdim, programlaması basit, çipi Arduino Uno'dan çıkarın ve bu çipi ekleyin ve kodu yükleyin. Hedeflerin nasıl oluşturulacağına ilişkin elektrik şemasını kontrol edin.

kod

Kodu Arduino IDE yerine PlatformIO ile yazdım. Programlamak için daha iyi bir yazılım. Yani kod biraz farklı. Bunun yerine bu yazılımı kullanmanızı tavsiye ederim.

Hedef ve Verici Kutusu

Sensörü ve mavi led'i hedefe taktım ve 2 m'de 3,5 mm fono kablosu ile atmega çipini, pil şarj cihazını ve yeşil & kırmızı led'i tutan verici kutusunda birbirine bağlıyorum. Bu, çelik mermilerle vurulmasını önlemek içindir.

2. Adım: Oyun Denetleyicisi

Oyun Denetleyicisi
Oyun Denetleyicisi
Oyun Denetleyicisi
Oyun Denetleyicisi
Oyun Denetleyicisi
Oyun Denetleyicisi
Oyun Denetleyicisi
Oyun Denetleyicisi

Yapmamız gereken bir sonraki şey, sensörler için kontrolör yapmak. Sensörlerle iletişim kurmak için NRF24L01 modülünü kullanan bir Arduino'dur. Başka hiçbir şey. Arduino daha sonra çalışması için ahududu pi'deki USB ile bağlanır.

Bu şekilde çalışacak. Ne yapacağını bilmek için seri kullanır. Pi, seri komutlar gönderir. Öncelikle kurulum sırasında kaç tane hedef eklediğinizi ve hedef tanımlama numaralarını gönderir. Daha sonra test işlevini yapacak ve birbirleriyle iletişim kurarlarsa ahududu pi'yi bilgilendirecektir.

Oyunu oynadığınız zaman, pi'den ne tür bir oyun ve kaç tur/vuruş kullanılacağını gönderecektir. Bu kadar.

Raspberry pi'de NRF24L01 modüllerini kullanmak mümkün ama benim için Arduino daha iyi bir seçenek, onları ahudududa asla kullanmam, bu yüzden uzun vadede ne kadar iyi çalıştıklarını bilmiyorum

Vericilere doğru kararlı gücü sağlamak için 5 v kullanan bir güç modülü vardır. Bunları Arduino ile birlikte kullanabilirsiniz (resme bakın) adı Soket Adaptör Modül Kartıdır

Oynadığınız zaman hedefler rastgele birer birer etkinleştirilecektir. Biri vurulduğunda, diğeri etkinleştirilecektir.

Test sırasında nasıl çalıştığını görmek için #DEFINE DEBUG'ı etkinleştirebilirsiniz, ancak pi bilgisayarında kullandığınızda çalışmaz.

Kodu GitHub sayfasından indirin.

3. Adım: Ahududu Pi

Ahududu Pi
Ahududu Pi
Ahududu Pi
Ahududu Pi
Ahududu Pi
Ahududu Pi
Ahududu Pi
Ahududu Pi

Artık Raspberry Pi'ye geldik.

Bir güç düğmesine sahip olabilmem için bazı ekstra işlevler ekledim. ATXRaspi 3 harika bir modüldür, pi'yi bir düğme ile açıp kapatabilir ve yeniden başlatabilirsiniz. Ayrıca pi üzerinde saat ve tarihi tutmak için bir RTCRaspi. Ayrıca sistemde bazı güncellemeler yapmam gerektiğinde bir ağ kablosu takmayı da mümkün kıldı. Onları Lowpowerlab'da bulacaksınız

Sparkfun'da bulacağınız Termal yazıcı ve barkod okuyucu amazon'da mevcuttur.

Pi bilgisayarı kiosk modunda çalışır, bu nedenle tarayıcı başlangıçta açılacaktır. Öncelikle pi bilgisayarında PHP 7 ve mysql ile bir web sunucunuz olması gerekir. (Bunun için internette birçok rehber var)

LÜTFEN DİKKAT: Dahili bluetooth'lu ahududu pi ile termal yazıcı kullanacaksanız, önce onu devre dışı bırakmanız gerekir

Python betiğinin pyserial'e ihtiyacı var ve onu kuruyorsunuz: sudo apt-get install python-serial

MySQL'in çalışmasını sağlamak için aşağıdakileri yükleyin:

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

suso apt-get install pymysql

Artık Arduino'nuzu seri üzerinden kontrol edebilir ve ayrıca mysql veritabanını güncelleyebilirsiniz.

Sonraki adım, mysql'e bağlanmak için python betiği yapmaktır.

Her üç python betiğinde, mysql veritabanınızla olan bağlantıyı değiştirin.

Sonraki adım, python betiğini başlangıçta çalıştırmaktır.

Üç tane python script.game.py vardır, hepsinden önemlisi, biri oyun function.print.py'yi barındırır, bu sadece yazdırmak için termal yazıcı kullanacaksanız gereklidir.ean.py yalnızca barkod tarayıcıyı kullanacak.

Otomatik başlatmalarını sağlamak için şunları düzenlerim:

sudo nano /etc/rc.local

ve 0 çıkışından önce aşağıdakileri ekleyin:

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

Lütfen python betiğiniz için doğru yeri değiştirin ve sonundaki & işaretini unutmayın

Şimdi web tarayıcısı için bir kiosk modu yapmamız gerekiyor, önce imleci kaldırın:

sudo apt-get kurulum dağınıklığı

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

şimdi bu dosyada bulun ve yorum yapın:

@xscreensaver -no-splash # ekran koruyucuyu devre dışı bırakmak için bu satırı yorumlayın

Bunun altına ekleyin:

@xset s kapalı @xset -dpms @xset s noblank @chromium-browser --noerrdialogs --force-device-scale-factor=1.25 --kiosk

Tüm önyükleme metinlerini ve diğer öğeleri kaldırmak için bir sonraki adım, burada kendi önyükleme ekranınızı da eklemek için hızlı bir kılavuzdur:

sudo nano /boot/config.txt ve altta adddisable_splash=1

Açılış resminin altındaki metin mesajını kaldırın:

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

Bul ve kaldır (veya yorum yap):

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

ve:

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

Şimdi önyükleme mesajlarını kaldırıyoruz:

sudo nano /boot/cmdline.txt

“console=tty1”i “console=tty3” ile değiştirin

ve satırın sonuna şunu ekleyin:

sıçrama sessiz plymouth.ignore-serial-consoles logo.nologo vt.global_cursor_default=0

Ve pi sıçramasını kendinizle değiştirin:

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

Artık oyununuz için kendi özel açılış ekranınız var. Pi bilgisayarınız artık oyunu yönetmeye hazır. Öyleyse bir sonraki adıma geçin!

Adım 4: Oyunu Kurun

Bu noktada artık oyunu yarattınız.

İlk yapmanız gereken webbsystem'ı kurmaktır. Veritabanını mysql sunucunuza yükleyin. Dosya, include klasöründedir ve database.sql olarak adlandırılır.

Sonraki adım, yapılandırma dosyasını düzenlemektir, onu config.phpiçeren klasör adında bulursunuz, komut dosyasının çalışması için veritabanı oturum açma bilgilerini değiştirin.

Web sistemi çoklu dil tabanlıdır ve İngilizce olarak yazılmıştır. İsveççe çevirisi mevcuttur. Daha fazla dil yapabilmek için Poedit adlı bir yazılıma ihtiyacınız var.

Web sistemine daha fazla dil eklemek için i18n_setup.php dosyasını düzenlemeniz ve diziye eklemeniz gerekir:

return in_array($locale, ['tr_US', 'sv_SE']); (Satır 23)

Ayrıca varsayılan dili değiştirmek için 27. satırda değiştirmeniz gerekir: $lang = 'en_US'; en_US'yi kendi dilinize değiştirin.

dil dosyaları locales/LANGCODE/LC_MESSAGES/ dizinine yerleştirilmeli ve main.mo olarak adlandırılmalıdır (Dil kodunu kendi dilinize göre değiştirin)

selectplayers.php dosyasındaki klavyeyi değiştirmek için dili değiştirirsiniz: "en", // İsveç düzeni için ingilizce sv için: 'qwerty', // ingilizce İsveççe için qwerty-İsveççe için qwerty

Onları 218 ve 219. satırda bulabilirsiniz.

Mevcut diller klasördedir: varlıklar/js/klavye/diller ve düzenler varlıklar/js/klavye/düzenlerdedir ve 118 ve 119. satıra doğru dosyaları ekleyin (şimdi orada bulduğunuzla değiştirin)

Hedef ekle

Hedef eklemek için localhost/admin/'e gidin ve hedef ekle'ye tıklayın.

Hedef için bir ad ve benzersiz hedef kimliği ve gönderme kimliği eklemeniz, sahip olduğunuz kadar çok hedef eklemeniz gerekir.

Oyun ekle

Ayrıca bazı oyunlar eklemeniz gerekiyor. localhost/admin/ adresine gidin ve oyun ekle'yi tıklayın

Oyun için bir isim, bir açıklama, minimum ve maksimum oyuncular ne tür bir oyun olduğunu, ayrıca oyunun 1 ile 5 arasında ne kadar zor olduğunu ve oyunun nasıl olduğunu, yani hızlı ateş oyunu için kaç vuruş eklediğinizi eklemeniz gerekiyor (örnek 30) hızlı çekiliş için kaç tur (örneğin 8) ve ne kadar süre oynayacakları zamanlanmış için (örneğin bir dakika için 60)

Oyunu başlat

Oyunu açtığınızda hedef testi yapacak. Bu yüzden ana sistemi başlatmadan önce hedeflerin açık olması gerekir. Hepsi testi geçerse sistemi kullanabilirsiniz, geçemezlerse kullanamazsınız. Cevap alana kadar iletişim kurmaya çalışacaktır.

İyi şanlar

İşte bu kadar, koddaki güncelleme hakkında destek ve bilgi için lütfen bu oyun için Facebook sayfamı takip edin, böylece size hızlı yanıt verebilirim. Linkleri burada en üstte bulacaksınız.

Önerilen: