Isi kandungan:

Arduino Shooting Game V3: 4 Langkah
Arduino Shooting Game V3: 4 Langkah

Video: Arduino Shooting Game V3: 4 Langkah

Video: Arduino Shooting Game V3: 4 Langkah
Video: Whack a Mole - Arduino Game (full arduino tutorial with code) 2024, Julai
Anonim
Image
Image
Arduino Shooting Game V3
Arduino Shooting Game V3
Arduino Shooting Game V3
Arduino Shooting Game V3
Arduino Shooting Game V3
Arduino Shooting Game V3

Permainan ini adalah untuk anda yang menggunakan airsoft atau co2 untuk menembak sasaran. Ia adalah permainan.

Untuk maklumat terkini mengenai permainan dan sokongan:

www.facebook.com/arduinoshooting/

Untuk laman blog saya mengenai permainan:

shootinggameblog.wordpress.com

Untuk kod mengenai permainan:

github.com/shootinggame82/Shooting-game-v3

Permainan menembak adalah x sasaran tanpa wayar, setiap sasaran memiliki sensor getaran yang merasakan getaran yang diterima ketika pukulan dibuat. Sensor wayarles adalah cip Atmega328 (cip Arduino Uno) dan mempunyai bateri Li-Po yang dicas semula.

Pengawal utama untuk permainan ini dikendalikan oleh Arduino dan Serial dikendalikan dari Raspberry Pi.

Jadi bagaimana permainan ini berfungsi? Nah, ini 3 mod permainan:

Waktu Pantas: Mainkan pusingan X dan tembak dengan pantas sehingga anda dapat pada setiap sasaran.

Timemode: Tembak seberapa banyak sasaran yang anda dapat pada X saat.

Rapidfire: Tembak tembakan X pada waktu terpantas.

Sistem kami pemancar NRF24L01 untuk mendapatkan jarak yang jauh dari pengawal utama. Mereka berfungsi pada 2.6 GHz (Sama seperti WiFi berjalan)

Dalam projek-projek saya yang lalu, saya telah menggunakan Piezo untuk getaran, tetapi sekarang Vibration Sensor Switch digunakan. Tetapi anda masih boleh menggunakan Piezo jika anda telah membuat versi lama dari permainan saya ini.

Permainan ini mempunyai layar sentuh Raspberry Pi 7 yang memegang sistem web yang anda kendalikan permainannya. Pencetak terminal mencetak hasilnya.

Bekalan

Untuk pemancar:

  • X Atmega328 dengan Arduino Bootloader (Bergantung pada berapa banyak sasaran)
  • Suis Sensor Getaran X
  • X Blue Led
  • X Green Led
  • X Merah Dipimpin
  • Bateri Li-Po X 3.7v
  • Modul Pengecas Li-Po X FC-75 (Atau model lain)
  • Kapasitor X 100 uF
  • X Kes untuk sensor
  • X LD1117V33 (Menjadikan 3.3 V yang selamat ke pemancar)
  • Modul X NRF24L01
  • Resistor X x 3 220 Ohm (3 diperlukan untuk satu sasaran)
  • Kristal X 16 MHz
  • X x 2 Kapasitor Unplorized 22 pF (2 diperlukan untuk satu sasaran)

Untuk Arduino utama:

  • 1 Arduino (Nano atau Uno disyorkan, perlu mempunyai USB)
  • 1 Modul NRF24L01
  • 1 10 kapasitor uF

Untuk raspberry Pi:

  • Raspberry Pi (saya menggunakan 3B)
  • Skrin Sentuh 7"
  • ATXRaspi (Pilihan tetapi modul butang kuasa yang baik)
  • RTCRaspi (Pilihan tetapi modul RTC yang baik untuk mengekalkan masa dan tarikh)
  • Pencetak Termal (Pilihan tetapi perlu dicetak)
  • Pengimbas kod bar (versi USB yang berfungsi seperti papan kekunci, Pilihan)
  • Kuasa 5V yang baik (saya menggunakan USB 12v lama dengan kuasa 2.5 A)

Barang lain:

  • Kuasa 12v (saya mempunyai satu pada 12 Ah)
  • Soket rangkaian (Memudahkan untuk menyambung ke Rangkaian)
  • Kabel

Langkah 1: Sensor Tanpa Wayar

Sensor Tanpa Wayar
Sensor Tanpa Wayar
Sensor Tanpa Wayar
Sensor Tanpa Wayar
Sensor Tanpa Wayar
Sensor Tanpa Wayar

Mari mula membuat sensor. Saya menggunakan 4 sensor untuk permainan ini. Tetapi anda boleh menambahkan lebih banyak sensor dengan mudah. Sensor berkomunikasi dengan kod 4 nombor apabila sistem utama menghantar kod dengan fungsi apa sensor dengan kod yang betul akan menyala dan bersedia untuk sasaran. Lampu biru adalah untuk memberitahu bahawa sasaran itulah yang akan anda capai.

Kami juga mempunyai lampu hijau dan merah. Hijau sentiasa menyala untuk memberitahu bahawa sensor dihidupkan. Merah hanya akan menyala apabila bateri kurang dari 3.1V (ia menggunakan fungsi bawaan dalam cip untuk mengira berapa banyak bateri yang ada.

Sensor getaran disambungkan ke pin analog dan membaca nilainya. Ketika nilainya tenggelam, sensor memancarkan getaran dan di sinilah kita mendaftarkan hit.

Sasaran memiliki fungsi failafe, jika anda tidak memukul dalam X saat (lalai adalah 15 saat) atau jika pengiriman tidak dapat dilakukan di dalamnya mereka akan kembali ke posisi awal.

Saya tidak akan menerangkan bagaimana anda akan memasang wayar, periksa helaian elektrik untuk mengetahui bagaimana anda akan melakukannya. Satu perkara yang tidak ada di dalamnya, ialah bateri, suis kuasa dan pengecas. Terserah anda untuk menentukan bagaimana anda menginginkannya.

PENTING MENGENAI Modul NRF24L +:

Rasanya menyakitkan… untuk membuatnya stabil, digabungkan dengan kekuatan dan pengasingan yang baik di sekelilingnya, dan kod yang akan membuat mereka berfungsi. Bagi saya 10 uF kapasitor akan memberi saya sambungan yang stabil dan baik, tetapi sila cuba terlebih dahulu sekiranya anda memerlukan, misalnya 100 uF kapasitor. Balutkan juga dengan kerajang plastik pertama dan kemudian aluminium foil untuk melindungi mereka daripada mengganggu

Juga dalam kodnya, kadar data yang anda perlukan tidak lebih dari 250 Kb sehingga tidak menjadi masalah. Tetapi PA: myRadio.setPALevel (RF24_PA_MIN);

Dalam kod yang telah saya tetapkan ke MIN (ini adalah semasa ujian), ini adalah yang paling rendah dan tidak akan menggunakan banyak tenaga, tetapi jaraknya tidak akan begitu lama. Sekiranya anda mendapat kekuatan yang stabil dan baik, anda dapat mencapai RF24_PA_MAX untuk mendapatkan jarak terpanjang, TETAPI mereka memerlukan daya stabil GOOOOOD untuk itu. Cuba juga RENDAH DAN TINGGI (Ubah teks MAX sahaja) untuk melihat sama ada anda mendapat komunikasi yang baik. Anda juga akan mendapat jarak yang baik pada RENDAH dan TINGGI kecuali jika anda akan menjadi penembak tepat

Jauhkan juga pemancar sekurang-kurangnya satu meter, untuk menutup boleh menjadikan isyarat buruk

Uji komunikasi dengan beberapa contoh ping di Perpustakaan NRF24 (Pautan di GitHub)

Dalam kod anda perlu menetapkan nombor pengenalan unik untuk sasaran tersebut:

int targID = 3401; // Ini adalah ID sasaran

int sendID = 2401; // Ini adalah ID tindak balas

Terdapat juga 3 fungsi DEFINE:

#tentukan DEBUG

#tentukan BATERI

#define SHAKE // JIKA PENGGANTI SHAKE DIGUNAKAN DI ATAS PIEZO LAMA

HUTANG:

Semasa ujian ini adalah baik untuk ditakrifkan. Tetapi apabila anda menyediakannya, jangan aktifkan.

BATERI:

Sekiranya anda tidak mahu mempunyai pemeriksa bateri untuk mencapai sasaran, anda perlu membuang definisi ini.

Goncang:

Sekiranya anda telah membina versi lama saya, anda mempunyai sensor piezo, kemudian keluarkan ini untuk mendapatkan kod yang betul untuknya.

Cip ATMEGA328

Daripada Arduino nano, saya memutuskan untuk menggunakan cip ATMEGA328 (dengan Uno boot loader), mereka mudah memprogram hanya mengeluarkan cip dari Arduino Uno dan menambah cip ini dan memuat naik kod. Periksa skema elektrik bagaimana membina sasaran.

Kod tersebut

Saya telah menulis kod dengan PlatformIO dan bukannya Arduino IDE. Ini adalah perisian yang lebih baik untuk diprogramkan. Jadi kodnya sedikit berbeza. Saya mengesyorkan untuk menggunakan perisian ini.

Kotak Sasaran & Pemancar

Saya telah memasang sensor dan lampu biru pada sasaran, dan dengan kabel phono 3, 5 mm pada 2 m, saya sambungkan bersama di dalam kotak pemancar yang memegang cip atmega, pengecas bateri dan lampu hijau & merah. Ini untuk melindungi dari terkena peluru keluli.

Langkah 2: Pengawal Permainan

Pengawal Permainan
Pengawal Permainan
Pengawal Permainan
Pengawal Permainan
Pengawal Permainan
Pengawal Permainan
Pengawal Permainan
Pengawal Permainan

Perkara seterusnya yang perlu kita lakukan ialah membuat pengawal untuk sensor. Ini adalah Arduino yang menggunakan modul NRF24L01 untuk berkomunikasi dengan sensor. Tiada lagi. Arduino kemudian disambungkan dengan USB di raspberry pi untuk berfungsi.

Ini adalah bagaimana ia akan berfungsi. Ia menggunakan siri untuk mengetahui apa yang harus dilakukan. Pi akan menghantar arahan bersiri. Pertama semasa penyediaan ia menghantar berapa banyak sasaran yang telah anda tambahkan, dan nombor pengenalan sasaran. Kemudian ia akan melakukan fungsi ujian dan memberitahu pi raspberry jika mereka berkomunikasi antara satu sama lain.

Semasa anda bermain permainan, ia akan menghantar dari jenis permainan apa dan berapa banyak pusingan / hits yang akan digunakan. Itulah.

Adalah mungkin untuk menggunakan modul NRF24L01 dalam raspberry pi, tetapi bagi saya Arduino adalah dosa pilihan yang lebih baik saya tidak pernah menggunakannya dalam raspberry jadi saya tidak tahu seberapa baik ia berfungsi dalam jangka masa panjang

Terdapat modul kuasa yang menggunakan 5 v untuk membuat daya stabil yang betul ke pemancar. Anda boleh menggunakannya bersama anda Arduino (Lihat gambar) namanya Socket Adapter Module Board

Semasa anda bermain, sasaran akan diaktifkan secara rawak satu persatu. Apabila seseorang dipukul, yang lain akan diaktifkan.

Semasa ujian anda dapat #DEFINE DEBUG diaktifkan untuk melihat bagaimana ia berfungsi, tetapi tidak apabila anda menggunakannya di komputer pi, ia tidak akan berfungsi.

Muat turun kod di halaman GitHub.

Langkah 3: Raspberry Pi

Pai raspberi
Pai raspberi
Pai raspberi
Pai raspberi
Pai raspberi
Pai raspberi
Pai raspberi
Pai raspberi

Kami kini datang ke Raspberry Pi.

Saya telah menambah beberapa fungsi tambahan sehingga saya dapat mempunyai butang kuasa. ATXRaspi 3 adalah modul yang hebat, anda boleh menghidupkan, mematikan dan menghidupkan semula pi dengan butang. Juga RTCRaspi untuk menjaga masa dan tarikh di pi. Juga memungkinkan untuk hanya memasang kabel rangkaian sekiranya saya perlu melakukan beberapa kemas kini pada sistem. Anda akan menjumpainya di Lowpowerlab

Pencetak termal yang anda dapati di sparkfun dan pembaca kod bar boleh didapati di amazon.

Komputer Pi berjalan dalam mod kios sehingga penyemak imbas akan dibuka pada mulanya. Pertama sekali, anda perlu mempunyai pelayan web dengan PHP 7 dan mysql pada komputer pi. (Terdapat banyak panduan di seluruh web untuk ini)

PERHATIKAN: jika anda akan menggunakan pencetak termal dengan raspberry pi yang telah dibina dalam bluetooth, anda perlu mematikannya terlebih dahulu

Skrip python memerlukan pyserial dan anda memasangnya: sudo apt-get install python-serial

Untuk membuat kerja mysql dipasang berikut:

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

suso apt-get install pymysql

Kini anda dapat mengawal anda Arduino melalui siri dan juga mengemas kini pangkalan data mysql.

Langkah seterusnya adalah membuat skrip python untuk menyambung ke mysql.

Dalam ketiga-tiga skrip python ubah sambungan ke pangkalan data mysql anda.

Langkah seterusnya adalah membuat skrip python dijalankan pada permulaannya.

Terdapat tiga python script.game.py yang paling penting dari semua, yang memegang fungsi permainan.print.py ini hanya diperlukan jika anda akan menggunakan pencetak termal untuk mencetak. E.py hanya diperlukan jika anda akan menggunakan pengimbas kod bar.

Untuk menjadikannya autostart saya mengedit:

sudo nano /etc/rc.local

dan tambahkan berikut di bawah sebelum keluar 0:

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

Tolong ubah ke tempat yang betul untuk skrip python anda dan jangan lupa tanda & di akhir

Sekarang kita perlu membuat mod kios untuk penyemak imbas web, alih keluar kursor terlebih dahulu:

sudo apt-get install tidak kemas

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

sekarang dalam fail itu cari dan komen:

@xscreensaver -no-splash # komen garis ini untuk mematikan screensaver

Di bawah itu tambahkan:

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

Langkah seterusnya untuk membuang semua teks dan barang boot juga menambah skrin boot anda sendiri di sini adalah panduan ringkas:

sudo nano /boot/config.txt dan di bahagian bawah adddisable_splash = 1

Keluarkan mesej teks di bawah gambar percikan:

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

Cari dan alih keluar (atau beri komen):

message_sprite = Sprite (); message_sprite. SetPosition (lebar_ skrin * 0.1, ketinggian layar * 0.9, 10000);

dan:

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

Sekarang kami membuang mesej boot:

sudo nano /boot/cmdline.txt

ganti "konsol = tty1" dengan "konsol = tty3"

dan di hujung baris tambahkan:

splash quiet plymouth.ignore-serial-console logo.nologo vt.global_cursor_default = 0

Dan ganti pi percikan dengan yang anda sendiri:

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

Sekarang anda mempunyai skrin boot khas anda sendiri untuk permainan anda. Komputer pi anda kini siap untuk mengendalikan permainan. Jadi, ke langkah seterusnya!

Langkah 4: Siapkan Permainan

Pada ketika ini anda telah membuat permainan.

Pertama yang perlu anda lakukan ialah menyiapkan sistem web. Muat naik pangkalan data ke pelayan mysql anda. Fail tersebut terdapat dalam folder include dan diberi nama database.sql

Langkah seterusnya adalah mengedit file config, anda dapati di dalamnya termasuk nama folder config.php Ubah maklumat log masuk pangkalan data sehingga skrip akan berfungsi.

Sistem web berasaskan pelbagai bahasa dan ditulis dalam bahasa Inggeris. Terdapat terjemahan Sweden yang tersedia. Untuk membuat lebih banyak bahasa, anda memerlukan perisian bernama Poedit.

Untuk menambahkan lebih banyak bahasa ke sistem web, anda perlu mengedit i18n_setup.php dan menambah dalam array:

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

Juga untuk menukar bahasa lalai, anda perlu mengubah baris 27: $ lang = 'en_US'; tukar bahasa en_US kepada anda.

fail bahasa mesti diletakkan dalam bahasa / LANGCODE / LC_MESSAGES / dan diberi nama main.mo (Tukar bahasa langkau ke bahasa anda)

untuk menukar papan kekunci dalam file selectplayers.php anda menukar bahasa: "en", // en untuk bahasa inggeris sv untuk tata letak swedia: 'qwerty', // qwerty untuk bahasa inggeris-qwerty untuk swedia

Anda dapati mereka di talian 218 & 219

Bahasa yang tersedia ada dalam folder: aset / js / papan kekunci / bahasa & susun atur terdapat dalam aset / js / papan kekunci / susun atur dan tambahkan fail yang betul ke baris 118 dan 119 (ganti yang anda dapati di sana sekarang)

Tambahkan sasaran

Untuk menambah sasaran anda pergi ke localhost / admin / dan klik add target.

Anda perlu menambahkan nama untuk sasaran dan ID sasaran unik dan menghantar ID, tambahkan seberapa banyak sasaran yang anda ada.

Tambah permainan

Anda juga perlu menambah beberapa permainan. Pergi ke localhost / admin / dan klik pada tambah permainan

Anda perlu menambahkan nama untuk permainan, keterangan, pemain minimum dan maks. Jenis permainan apa, juga seberapa keras permainan antara 1 hingga 5. Dan bagaimana permainannya, jadi untuk permainan fastfire Anda menambahkan berapa banyak hit (contoh 30) untuk tangkapan cepat berapa banyak pusingan (contohnya 8) dan untuk jangka masa berapa lama mereka akan bermain (contohnya 60 selama satu minit)

Mulakan permainan

Apabila anda menghidupkan permainan, ia akan melakukan ujian sasaran. Oleh itu, sasarannya mesti dihidupkan sebelum anda memulakan sistem utama. Sekiranya semua lulus ujian, anda boleh menggunakan sistem, tetapi jika tidak, anda tidak boleh menggunakannya. Ia akan cuba berkomunikasi sehingga mereka mendapat sambutan.

Semoga berjaya

Baiklah, untuk sokongan dan maklumat mengenai kemas kini kod, ikuti halaman Facebook saya untuk permainan ini, jadi saya dapat memberikan respons dengan pantas. Anda akan mendapat pautan di bahagian atas di sini.

Disyorkan: