İçindekiler:
- Gereçler
- Adım 1: Kablosuz Sensörler
- 2. Adım: Oyun Denetleyicisi
- 3. Adım: Ahududu Pi
- Adım 4: Oyunu Kurun
Video: Arduino Atış Oyunu V3: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-31 10:26
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
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
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
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:
ARDUINO + SCRATCH Atış Oyunu: 6 Adım
ARDUINO + SCRATCH Atış Oyunu: Pastanı kurtar !!!Tehlikede. Yaklaşan dört sinek var. Sinekleri vurmak ve pastanızı kurtarmak için sadece 30 saniyeniz var
Lazer Atış Oyunu (Yıldız Savaşları): 5 Adım
Laser Shooting Game (Star Wars): Bu yazımda sizlere bütçenize göre yapabileceğiniz arduino tabanlı star wars projesini paylaşacağım. Bu proje ev yapımı bir ürün olarak size çok yakışacak bir lazer atış oyunudur. Bu proje 2 alt projeden oluşmaktadır: kartondan blaster yapmak
Zwift Ambilight ve Kalp Atış Hızı Bölgesi Smartbulb Lambası: 4 Adım
Zwift Ambilight ve Kalp Atış Hızı Bölgesi Smartbulb Lambası: Burada Zwift için BÜYÜK bir iyileştirme yapıyoruz. Sonunda karanlıkta daha fazla sürüş keyfi için bir ambilight var. Ve kalp atış hızı bölgeleriniz için bir lambanız (Yeelight) var. Burada 2 Ahududu PI kullanıyorum, eğer sadece Yeelight istiyorsanız, sadece 1 PI'ye ihtiyacınız var, eğer
Kalp Atış Hızınızı Ölçmek Parmağınızın Ucunda: Kalp Atış Hızını Belirlemede Fotopletismografi Yaklaşımı: 7 Adım
Kalp Atış Hızınızı Ölçmek Parmağınızın Ucunda: Kalp Atış Hızını Belirlemeye Fotopletismografi Yaklaşımı: Bir fotopletismograf (PPG), mikrovasküler bir doku yatağındaki kan hacmindeki değişiklikleri saptamak için sıklıkla kullanılan basit ve düşük maliyetli bir optik tekniktir. Çoğunlukla cilt yüzeyinde ölçüm yapmak için non-invaziv olarak kullanılır, tipik olarak
Lazer Kesim Nerf Top Atış Lego EV3 Tank: 4 Adım
Lazer Kesim Nerf Topu Atış Lego EV3 Tankı: Waterloo Üniversitesi'ndeki Mekatronik Mühendisliği bölümündeki 1A dönemimin son projesi için, Lego EV3 kitiyle (bu gerekliydi) Nerf toplarını vuran bir lazer kesim tankı oluşturduk. Bu talimat, hiçbir şekilde eksiksiz bir tasarım raporu değildir. Eğer sen