Mundarija:

Arduino tortishish o'yini V3: 4 qadam
Arduino tortishish o'yini V3: 4 qadam

Video: Arduino tortishish o'yini V3: 4 qadam

Video: Arduino tortishish o'yini V3: 4 qadam
Video: Kattalar uchun o’yinchoq 2024, Iyul
Anonim
Image
Image
Arduino tortishish o'yini V3
Arduino tortishish o'yini V3
Arduino tortishish o'yini V3
Arduino tortishish o'yini V3
Arduino tortishish o'yini V3
Arduino tortishish o'yini V3

Bu o'yin nishonlarga o'q uzish uchun airsoft yoki co2 dan foydalanadiganlar uchun. Bu o'yin.

O'yin va qo'llab -quvvatlash haqida dolzarb ma'lumotlar uchun:

www.facebook.com/arduinoshooting/

O'yin haqidagi blog sahifam uchun:

shootinggameblog.wordpress.com

O'yin kodlari uchun:

github.com/shootinggame82/Shooting-game-v3

O'q otish - bu simsiz simsiz x nishon, har bir nishonga tebranish sensori o'rnatilgan, u zarba berilganda tebranishni sezadi. Simsiz sensorlar-Atmega328 chipi (Arduino Uno chipi) va Li-Po batareyasini zaryad qiladi.

Ushbu o'yinning asosiy boshqaruvchisi Arduino tomonidan boshqariladi va Raspberry Pi -dan ketma -ket boshqariladi.

Xo'sh, bu o'yin qanday ishlaydi? Xo'sh, bu uchta o'yin rejimi:

Quicktime: X raundda o'ynang va har bir nishonga shunchalik tez o'q oting.

Vaqt rejimi: X soniyada iloji boricha ko'proq nishonni o'qqa tuting.

Rapidfire: X o'qini eng tez suratga oling.

Tizim NRF24L01 uzatgichlarini asosiy boshqaruvchidan yaxshi masofani olish uchun ishlatadi. Ular 2,6 gigagertsli chastotada ishlaydi (WiFi qanday ishlaydi)

O'tgan loyihalarda men vibratsiya uchun Piezo -dan foydalanganman, lekin hozirda tebranish sensori tugmasi ishlatiladi, lekin siz hali ham Piezodan foydalanishingiz mumkin, agar siz bu o'yinning eski versiyasini yaratgan bo'lsangiz.

O'yinda Raspberry Pi 7 sensorli ekrani mavjud, u o'yinni boshqaradigan veb -tizimni ushlab turadi. Terminalli printer natijalarni chop etadi.

Ta'minotlar

Transmitterlar uchun:

  • Arduino Bootloader bilan X Atmega328 (Qancha maqsadga bog'liq)
  • X tebranish sensori kaliti
  • X Moviy Led
  • X Yashil Led
  • X Qizil Led
  • X 3.7V Li-Po batareyasi
  • X FC-75 Li-Po zaryadlovchi moduli (yoki boshqa model)
  • X 100 UF kondansatör
  • X datchiklar uchun qutilar
  • X LD1117V33 (transmitter uchun xavfsiz 3.3 V)
  • X NRF24L01 modullari
  • X x 3 220 Ohmli rezistorlar (bitta maqsad uchun 3 ta kerak)
  • X 16 MGts kristalli
  • X x 2 plyonkasiz kondansatkichlar 22 pF (bitta maqsad uchun 2 ta kerak)

Asosiy Arduino uchun:

  • 1 Arduino (Nano yoki Uno tavsiya etiladi, USB bo'lishi kerak)
  • 1 NRF24L01 moduli
  • 1 10 uF kondansatör

Malinali Pi uchun:

  • Raspberry Pi (men 3B ishlatganman)
  • 7 "sensorli ekran
  • ATXRaspi (ixtiyoriy, lekin yaxshi quvvat tugmasi moduli)
  • RTCRaspi (ixtiyoriy, lekin vaqt va sanani saqlash uchun yaxshi RTC moduli)
  • Terminal printer (ixtiyoriy, lekin chop etish uchun kerak)
  • Shtrix -kod skaneri (klaviatura kabi ishlaydigan USB versiyasi, ixtiyoriy)
  • Yaxshi 5V kuch (men 2,5 A kuchga ega eski 12v USB ishlatardim)

Boshqa narsalar:

  • 12V quvvat (menda 12 Ahda bor)
  • Tarmoq rozetkasi (tarmoqqa ulanishni osonlashtiring)
  • Kabellar

1 -qadam: Simsiz sensorlar

Simsiz sensorlar
Simsiz sensorlar
Simsiz sensorlar
Simsiz sensorlar
Simsiz sensorlar
Simsiz sensorlar

Keling, sensorlar ishlab chiqarishni boshlaymiz, men bu o'yin uchun 4 ta sensordan foydalanaman. Sensorlarni qo'shish osonroq bo'ladi. Sensorlar 4 raqamli kod bilan bog'lanishadi, agar asosiy tizim kodni to'g'ri funktsiyali sensor qanday funktsiyaga ega bo'lsa, u yonadi va maqsadga tayyor bo'ladi. Ko'k chiroq - bu siz urmoqchi bo'lgan nishon ekanligini bildirish.

Bizda yashil va qizil chiroq ham bor. Sensor yoqilganligini bildirish uchun yashil rang yonadi. Qizil rang faqat batareya quvvati 3,1 V dan past bo'lganda yonadi (u batareyada qancha borligini hisoblash uchun chipdagi o'rnatilgan funktsiyadan foydalanadi).

Tebranish sensori analog pinga ulangan va uning qiymatini o'qiydi. Qiymat pasayganda, sensorda tebranish paydo bo'ladi va biz urishni qayd qilamiz.

Maqsad xavfsiz bo'lmagan funktsiyaga ega, siz X soniyada urmaysiz (standart 15 soniya) yoki uzatishni amalga oshirib bo'lmaydigan bo'lsa, ular boshlang'ich pozitsiyasiga qaytadilar.

Men sizga qanday qilib sim o'tkazmoqchi ekanligingizni tushuntirmayman, elektr varaqni tekshiring, buni qanday qilasiz, undagi narsa yo'q - batareya, quvvat tugmasi va zaryadlovchi. Buni qanday xohlashingizni o'zingiz hal qilasiz.

NRF24L+ moduli haqida ma'lumot bermang:

Bu og'riqli bo'lishi mumkin … ularni barqaror qilish, yaxshi quvvat va uning atrofidagi izolyatsiya va siz ularni ishga kirgizadigan kod. Men uchun 10 uF kondansatör menga barqaror va yaxshi ulanish beradi, lekin iltimos, birinchi navbatda sizga 100 uF kondansatör kerak bo'ladi. Bundan tashqari, ularni aralashmasligidan himoya qilish uchun birinchi navbatda plastik plyonka va keyin alyumin folga bilan o'rab qo'ying

Shuningdek, kodda ma'lumotlar tezligi 250 Kb dan oshmaydi, shuning uchun muammo bo'lmaydi. Lekin PA: myRadio.setPALevel (RF24_PA_MIN);

Men MIN -ga o'rnatgan kodda (bu sinov paytida), bu eng pasti va unchalik ko'p quvvat sarflamaydi, lekin diapazon unchalik uzoq bo'lmaydi. Agar siz ularga barqaror va yaxshi quvvatga ega bo'lsangiz, eng uzun masofani olish uchun RF24_PA_MAX ga o'tishingiz mumkin, LEKIN buning uchun ular GOOOOOD barqaror quvvatiga muhtoj. Yaxshi muloqotga ega bo'lishingizni bilish uchun LOW AND HIGH (faqat MAX matnini o'zgartiring) ni sinab ko'ring. Bundan tashqari, agar siz mergan bo'lmasangiz, LOW va HIGH -da yaxshi masofaga ega bo'lasiz

Shuningdek, transmitterlarni bir -biridan kamida bir metr masofada tuting, chunki signal uzilib qolishi mumkin

NRF24 kutubxonasidagi ping misoli bilan aloqani sinab ko'ring (GitHub havolasi)

Kodda siz ushbu maqsad uchun yagona identifikatsiya raqamini o'rnatishingiz kerak:

int targID = 3401; // Bu maqsadli identifikator

int sendID = 2401; // Bu javob identifikatori

Bundan tashqari, 3 DEFINE funksiyasi mavjud:

#DEBUGni aniqlang

#BATARYANI aniqlang

#define SHAKE // EKKAN PIEZO O'RNI SIYORA O'CHIRISH QILINADI

Xatolik:

Sinov paytida buni aniqlab olish yaxshidir. Lekin siz ularni mavjud qilganingizda, uni faollashtirmang.

BATARYA:

Agar siz maqsadlar uchun batareya tekshirgichiga ega bo'lishni xohlamasangiz, bu ta'rifni olib tashlashingiz kerak.

QO'YING:

Agar siz mening eski versiyamni yaratgan bo'lsangiz, sizda piezo sensorlar bor, keyin ular uchun to'g'ri kodni olish uchun uni olib tashlang.

ATMEGA328 chipi

Arduino nano o'rniga men ATMEGA328 chipini ishlatishga qaror qildim (Uno yuklagichi bilan), ularni dasturlash oson, faqat Arduino Uno -dan chipni olib tashlash va bu chip va yuklash kodini qo'shish. Maqsadlarni qanday qurish haqida elektr sxemasini tekshiring.

Kodeks

Men kodni Arduino IDE o'rniga PlatformIO bilan yozdim. Bu dasturlash uchun yaxshiroq dastur. Shunday qilib, kod biroz boshqacha. Buning o'rniga men ushbu dasturiy ta'minotdan foydalanishni tavsiya qilaman.

Maqsad va uzatuvchi qutisi

Men datchikni va ko'k chiroqni nishonga uladim va 2 m uzunlikdagi 3, 5 mm fono kabeli bilan uni atmega chip, batareya zaryadlash moslamasi va yashil va qizil svetodiodli uzatgich qutisiga ulayman. Bu uni po'lat o'q bilan urishdan himoya qilish uchun qilingan.

2 -qadam: O'yin boshqaruvchisi

O'yin boshqaruvchisi
O'yin boshqaruvchisi
O'yin boshqaruvchisi
O'yin boshqaruvchisi
O'yin boshqaruvchisi
O'yin boshqaruvchisi
O'yin boshqaruvchisi
O'yin boshqaruvchisi

Biz qilishimiz kerak bo'lgan keyingi narsa - bu sensorlar uchun boshqaruvchi. Bu sensorlar bilan aloqa qilish uchun NRF24L01 modulidan foydalanadigan Arduino. Boshqa hech narsa. Keyin Arduino malina pi -da USB -ga ulanadi.

Bu shunday ishlaydi. PI ketma -ket buyruqlarni yuboradi. Birinchidan, sozlash paytida siz qancha maqsad qo'shganingizni va identifikatsiya raqamlarini yuboradi. Keyin u test funktsiyasini bajaradi va agar ular bir -biri bilan muloqot qilsalar, malina pi ga xabar beradi.

Siz o'yinni o'ynaganingizda, u pi -dan qaysi o'yin turini va qancha tur/xit ishlatilishini yuboradi. Bo'ldi shu.

NRF24L01 modulini malina pi -da ishlatish mumkin, lekin men uchun Arduino - bu gunohlarning eng yaxshi varianti, men ularni hech qachon malinada ishlatmayman, shuning uchun ular uzoq muddatda qanchalik yaxshi ishlashini bilmayman

Transmitterlarga to'g'ri quvvat berish uchun 5 v kuchlanishli quvvat moduli mavjud. Siz ularni o'zingiz bilan ishlatishingiz mumkin Arduino (Rasmga qarang) nomi soket adapter modul kartasi

Siz o'ynaganingizda, maqsadlar birma -bir tasodifiy faollashtiriladi. Biri urilganda, boshqasi faollashadi.

Sinov paytida siz #DEFINE DEBUG -ni ishga tushirishingiz mumkin, bu qanday ishlashini ko'rish uchun, lekin uni pi kompyuterda ishlatganda emas, u ishlamaydi.

Kodni GitHub sahifasida yuklab oling.

3 -qadam: Raspberry Pi

Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi

Biz hozir Raspberry Pi ga keldik.

Men qo'shimcha funktsiyalarni qo'shdim, shunda quvvat tugmasi bo'lishi mumkin. ATXRaspi 3 - bu ajoyib modul, siz tugmani bosib pi -ni yoqishingiz, o'chirishingiz va qayta ishga tushirishingiz mumkin. Vaqt va sanani pi da saqlash uchun RTCRaspi. Bundan tashqari, tizimga ba'zi yangilanishlarni kiritishim kerak bo'lganda, tarmoq kabelini ulash mumkin edi. Siz ularni Lowpowerlab -da topasiz

Siz termal printerni sparkfun -da topasiz va shtrix -kodni o'quvchi Amazon -da mavjud.

Pi kompyuteri kiosk rejimida ishlaydi, shuning uchun brauzer ishga tushganda ochiladi, birinchi navbatda pi kompyuterida PHP 7 va mysql -ga ega veb -server bo'lishi kerak. (Buning uchun Internetda ko'plab qo'llanmalar mavjud)

E'tibor bering: agar siz bluetooth -da o'rnatilgan malina pi bilan termal printerdan foydalanmoqchi bo'lsangiz, avval uni o'chirib qo'yishingiz kerak

Python skriptiga pyserial kerak va siz uni o'rnatasiz: sudo apt-get install python-serial

MySQL ishini bajarish uchun quyidagilarni o'rnating:

sudo apt-get mysql-python-ni o'rnating sudo apt-get install python-mysql.connector

suso apt-get o'rnatish pymysql

Endi siz Arduino -ni ketma -ket boshqarishingiz va mysql ma'lumotlar bazasini yangilashingiz mumkin.

Keyingi qadam - mysql -ga ulanish uchun python skriptini yaratish.

Barcha uch python skriptida mysql ma'lumotlar bazasiga ulanishni o'zgartiring.

Keyingi qadam - python skriptini boshida ishga tushirish.

Uchta python script.game.py bor, bu o'yin funktsiyasini o'z ichiga oladi.print.py, agar siz print.ean.py uchun terminalli printerdan foydalanmoqchi bo'lsangiz, bu sizga kerak bo'ladi. shtrix -kod skaneridan foydalanmoqchi.

Ularni avtomatik ishga tushirish uchun men tahrir qilaman:

sudo nano /etc/rc.local

va 0 chiqishidan oldin pastda quyidagilarni qo'shing:

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

Iltimos, python skriptingiz uchun to'g'ri joyni o'zgartiring va oxirida & belgisini unutmang

Endi biz veb -brauzer uchun kiosk rejimini yaratishimiz kerak, avval kursorni olib tashlang:

sudo apt-get install unclutter

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

Endi bu faylda toping va izohlang:

@xscreensaver -no -splash # ekran saqlovchini o'chirish uchun bu qatorga izoh bering

Quyida quyidagilar qo'shiladi:

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

Barcha yuklash matnlari va boshqa narsalarni o'chirishning keyingi bosqichi, shuningdek o'z yuklash ekranini qo'shish bu erda tezkor ko'rsatma:

sudo nano /boot/config.txt va pastki qismida adddisable_splash = 1

Rasm ostidagi matnli xabarni o'chirish:

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

Toping va olib tashlang (yoki izohlang):

message_sprite = Sprite (); message_sprite. SetPosition (ekran kengligi * 0,1, ekran balandligi * 0,9, 10000);

va:

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

Endi yuklash xabarlarini o'chirib tashlaymiz:

sudo nano /boot/cmdline.txt

"konsol = tty1" ni "konsol = tty3" bilan almashtiring

va satr oxirida qo'shing:

jim plymouth.ignore-serial-consoles logo.nologo vt.global_cursor_default = 0

Va pi splash -ni o'zingizniki bilan almashtiring:

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

Endi sizning shaxsiy yuklash ekraningiz bor. Sizning kompyuteringiz endi o'yinni boshqarishga tayyor, keyingi bosqichga o'ting!

4 -qadam: O'yinni sozlash

Ayni paytda siz o'yinni yaratdingiz.

Avval siz veb -tizimni sozlashingiz kerak. Ma'lumotlar bazasini mysql serveringizga yuklang. Fayl o'z ichiga olgan papkada va nomlangan database.sql

Keyingi qadam - konfiguratsiya faylini tahrirlash, siz uni config.php papkasida topasiz Ma'lumotlar bazasiga kirish ma'lumotlarini o'zgartiring, shunda skript ishlaydi.

Veb -tizim ko'p tilli va ingliz tilida yozilgan. Shved tarjimasi mavjud, ko'proq til yaratish uchun sizga Poedit nomli dastur kerak.

Veb -tizimga ko'proq til qo'shish uchun siz i18n_setup.php -ni tahrir qilishingiz va qatorga qo'shishingiz kerak:

in_arrayni qaytarish ($ localale, ['en_US', 'sv_SE']); (23 -qator)

Shuningdek, standart tilni o'zgartirish uchun 27 -qatorda o'zgartirish kerak: $ lang = 'en_US'; en_US ni o'z tilingizga o'zgartiring.

til fayllari locales/LANGCODE/LC_MESSAGES/ga joylashtirilishi va main.mo (til kodini o'z tilingizga o'zgartirish) deb nomlanishi kerak.

selectplayers.php faylidagi klaviaturani o'zgartirish uchun siz tilni o'zgartirasiz: "en", // en inglizcha sv uchun svt uchun: "qwerty", // inglizcha uchun qwerty-shvedcha uchun qwerty

Siz ularni 218 va 219 qatorlarida topasiz

Mavjud tillar papkada joylashgan: aktivlar/js/klaviatura/tillar va tartiblar aktivlar/js/klaviatura/tartibda va to'g'ri fayllarni 118 va 119 -qatorlarga qo'shing (hozir topilganini o'zgartiring)

Maqsadlarni qo'shing

Maqsadlarni qo'shish uchun localhost/ admin/ ga o'ting va maqsad qo'shish -ni bosing.

Siz maqsadli nom va yagona identifikator identifikatorini qo'shishingiz va identifikatorni yuborishingiz, qancha maqsadni qo'shishingiz kerak.

O'yinlar qo'shish

Bundan tashqari, ba'zi o'yinlarni qo'shishingiz kerak. Localhost/ admin/ ga o'ting va o'yin qo'shish -ni bosing

Siz o'yinning nomini, tavsifini, min va max o'yinchilarga qanday o'yin turini, shuningdek o'yinning 1 dan 5 gacha qanchalik qiyinligini qo'shishingiz kerak. 30 -misol) tez chizish uchun necha tur (masalan, 8) va qancha vaqt o'ynashlari uchun (masalan, bir daqiqa uchun 60)

O'yinni boshlang

Agar siz o'yinni yoqsangiz, u maqsadli sinovdan o'tadi. Shunday qilib, asosiy tizimni ishga tushirishdan oldin maqsadlar bo'lishi kerak. Agar hamma sinovdan o'tgan bo'lsa, siz tizimdan foydalanishingiz mumkin, lekin ular o'tmagan bo'lsa, siz undan foydalana olmaysiz. Ular javob olmaguncha muloqot qilishga harakat qiladi.

Omad

Xo'sh, bu haqida, kodni yangilash haqida ma'lumot va qo'llab -quvvatlash uchun, iltimos, ushbu o'yin uchun mening Facebook sahifamni kuzatib boring, shunda men sizga tezda javob bera olaman. Siz bu erda havolalarni topasiz.

Tavsiya: