Mundarija:
- Ta'minotlar
- 1 -qadam: Simsiz sensorlar
- 2 -qadam: O'yin boshqaruvchisi
- 3 -qadam: Raspberry Pi
- 4 -qadam: O'yinni sozlash
Video: Arduino tortishish o'yini V3: 4 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-31 10:26
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
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
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
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:
LEDlar va tortishish kuchi: 4 qadam
LEDlar va tortishish kuchi?: Bu loyiha umuman amaliy emas, lekin Arduino-da C-kodda tortishish bilan bog'liq fizika formulalarini amalga oshirish uchun mashq sifatida boshlangan. Narsalarni ko'rinadigan qilish uchun 74 LEDli neopikselli LED tasmasi ishlatilgan. Gravitatsiyaning ta'siri
Arduino Flappy Bird - Arduino 2,4 dyuymli TFT sensorli ekran SPFD5408 Qushlar o'yini loyihasi: 3 qadam
Arduino Flappy Bird | Arduino 2.4 "TFT sensorli ekranli SPFD5408 qushlar o'yini loyihasi: Flappy Bird bir necha yil ichida juda mashhur o'yin edi va ko'p odamlar uni o'z uslubida yaratdilar, men Arduino bilan flappy qushining o'z versiyasini va eng arzon 2.4" TFTni yaratdim. Sensorli ekran SPFD5408, shuning uchun boshlaylik
Smartfondan pivo fermentatsiyasining harorati va tortishish kuchini qanday boshqarish mumkin: 4 qadam (rasmlar bilan)
Smartfondan pivo fermentatsiyasining harorati va tortishish kuchini qanday boshqarish mumkin: pivo achitilganda, siz har kuni uning tortish kuchi va haroratini kuzatib borishingiz kerak. Buni unutish oson, va agar siz yo'q bo'lsangiz, imkonsiz. Biroz googlingdan so'ng, men tortishishni avtomatik nazorat qilish uchun bir nechta echim topdim (bir, ikki, uch). Biridan
Simli masofadan turib tortishish (ergonomikmi yoki yomonmi?): 8 qadam
Simli masofadan turib tortish moslamasini chiqarish (ergonomikmi yoki yomonmi?): Men bilaman, bu erda mikro stereo vilkasidan foydalanadigan juda ko'p masofali deklanşörler bor va boshqasiga ehtiyoj yo'q. Bu biroz boshqacha bo'lsa -da. Bu Re-Use, Re-Cycling-ga ekskursiya, & Qayta maqsad. Bundan tashqari, shunday ko'rinadi
Nikon D90 MC-DC2 masofadan turib tortishish: 4 qadam
Nikon D90 MC-DC2 masofadan turib tortishish: har doim nikoningizdagi deklanşörü boshqarishingiz kerak, lekin bu g'alati "aksessuar" ni topa olmaysiz. vilka? masofadan boshqarish pultiga ko'proq masofa kerakmi, tez suratga olish moslamasini yasashni xohlaysizmi yoki sizning nikon uchun mos bo'lmagan qurilmaga ega bo'lishni xohlaysizmi? yaxshi, menda onam bor