विषयसूची:

Arduino शूटिंग गेम V3: 4 चरण
Arduino शूटिंग गेम V3: 4 चरण

वीडियो: Arduino शूटिंग गेम V3: 4 चरण

वीडियो: Arduino शूटिंग गेम V3: 4 चरण
वीडियो: Amazing arduino project 2024, नवंबर
Anonim
Image
Image
Arduino शूटिंग गेम V3
Arduino शूटिंग गेम V3
Arduino शूटिंग गेम V3
Arduino शूटिंग गेम V3
Arduino शूटिंग गेम V3
Arduino शूटिंग गेम V3

यह गेम आपके लिए है जो लक्ष्य पर शूट करने के लिए एयरसॉफ्ट या सीओ 2 का उपयोग करते हैं। यह एक खेल है।

खेल और समर्थन के बारे में अद्यतन जानकारी के लिए:

www.facebook.com/arduinoshooting/

खेल के बारे में मेरे ब्लॉग पेज के लिए:

shootinggameblog.wordpress.com

खेल के बारे में कोड के लिए:

github.com/shootinggame82/Shooting-game-v3

शूटिंग गेम x लक्ष्य है जो वायरलेस हैं, प्रत्येक लक्ष्य में एक कंपन सेंसर होता है जो कंपन को महसूस करता है जो हिट होने पर प्राप्त होता है। वायरलेस सेंसर एक Atmega328 चिप (Arduino Uno चिप) है और इसमें Li-Po बैटरी रिचार्ज होती है।

इस खेल के लिए मुख्य नियंत्रक एक Arduino द्वारा नियंत्रित किया जाता है और एक रास्पबेरी पाई से नियंत्रित सीरियल है।

तो यह गेम कैसे काम कर रहा है? वैसे यह 3 गेम मोड हैं:

क्विकटाइम: एक्स राउंड खेलें और प्रत्येक लक्ष्य पर इतनी तेजी से शूट करें।

Timemode: X सेकंड में जितने लक्ष्य आप कर सकते हैं, उन्हें शूट करें।

रैपिडफायर: सबसे तेज समय पर एक्स शॉट्स शूट करें।

मुख्य नियंत्रक से अच्छी दूरी प्राप्त करने के लिए सिस्टम हमें NRF24L01 ट्रांसमीटर करता है। वे 2.6 गीगाहर्ट्ज़ पर काम करते हैं (वैसे ही वाईफाई पर चलता है)

मेरी पिछली परियोजनाओं में मैं कंपन के लिए पीजो का उपयोग कर रहा हूं, लेकिन अब कंपन सेंसर स्विच का उपयोग किया जाता है। लेकिन आप अभी भी पीजो का उपयोग कर सकते हैं यदि आपने इस गेम का मेरा पुराना संस्करण बनाया है।

गेम में एक रास्पबेरी पाई 7 टच स्क्रीन है जो उस वेब सिस्टम को रखती है जिसे आप गेम के माध्यम से नियंत्रित करते हैं। एक टर्मिनल प्रिंटर परिणामों को प्रिंट करता है।

आपूर्ति

ट्रांसमीटरों के लिए:

  • X Atmega328 Arduino बूटलोडर के साथ (कितने लक्ष्यों पर निर्भर करता है)
  • एक्स कंपन सेंसर स्विच
  • एक्स ब्लू एलईडी
  • एक्स ग्रीन एलईडी
  • एक्स रेड लेड
  • एक्स 3.7 वी ली-पो बैटरी
  • X FC-75 Li-Po चार्जर मॉड्यूल (या कोई अन्य मॉडल)
  • एक्स १०० यूएफ संधारित्र
  • सेंसर के लिए एक्स मामले
  • X LD1117V33 (ट्रांसमीटर के लिए एक सुरक्षित 3.3 V बनाता है)
  • एक्स NRF24L01 मॉड्यूल
  • X x 3 220 ओम प्रतिरोधक (एक लक्ष्य के लिए 3 आवश्यक)
  • एक्स 16 मेगाहर्ट्ज क्रिस्टल
  • एक्स एक्स 2 अनप्लोरिज्ड कैपेसिटर 22 पीएफ (2 एक लक्ष्य के लिए आवश्यक है)

मुख्य Arduino के लिए:

  • 1 Arduino (नैनो या ऊनो की सिफारिश की जाती है, USB की आवश्यकता होती है)
  • 1 NRF24L01 मॉड्यूल
  • 1 10 यूएफ संधारित्र

रास्पबेरी पाई के लिए:

  • रास्पबेरी पाई (मैंने 3 बी का इस्तेमाल किया)
  • 7 "टच स्क्रीन
  • ATXRaspi (वैकल्पिक लेकिन एक अच्छा पावर बटन मॉड्यूल)
  • RTCRaspi (वैकल्पिक लेकिन समय और तारीख रखने के लिए एक अच्छा RTC मॉड्यूल)
  • टर्मिनल प्रिंटर (वैकल्पिक लेकिन प्रिंट करने में सक्षम होने के लिए आवश्यक)
  • बारकोड स्कैनर (USB संस्करण जो कीबोर्ड की तरह काम करता है, वैकल्पिक)
  • अच्छी 5V शक्ति (मैंने 2.5 A शक्ति के साथ एक पुराने 12v USB का उपयोग किया है)

अन्य सामान:

  • 12 वी शक्ति (मेरे पास 12 आह पर एक है)
  • नेटवर्क सॉकेट (नेटवर्क से कनेक्ट करना आसान बनाएं)
  • केबल

चरण 1: वायरलेस सेंसर

वायरलेस सेंसर
वायरलेस सेंसर
वायरलेस सेंसर
वायरलेस सेंसर
वायरलेस सेंसर
वायरलेस सेंसर

चलो सेंसर बनाना शुरू करते हैं।मैं इस गेम के लिए 4 सेंसर का उपयोग करता हूं। लेकिन आप आसानी से अधिक सेंसर जोड़ सकते हैं। सेंसर 4 नंबर कोड के साथ संचार करता है जब मुख्य सिस्टम कोड भेजता है कि सही कोड वाला सेंसर किस फ़ंक्शन के साथ प्रकाश करेगा और लक्ष्य के लिए तैयार होगा। नीली बत्ती यह सूचित करने के लिए है कि यह वह लक्ष्य है जिसे आप हिट करने जा रहे हैं।

हमारे पास एक हरा और एक लाल एलईडी भी है। हरा हमेशा यह सूचित करने के लिए रोशनी करता है कि सेंसर चालू है। लाल केवल तभी प्रकाश करेगा जब बैटरी 3.1V से कम हो (यह बैटरी में कितना है, इसकी गणना करने के लिए चिप में अंतर्निहित फ़ंक्शन का उपयोग करता है।

कंपन सेंसर एनालॉग पिन से जुड़ा होता है और इसके मूल्य को पढ़ता है। जब मूल्य कम हो रहा होता है, तो सेंसर ने एक कंपन को पकड़ लिया है और यहीं पर हम हिट को पंजीकृत करते हैं।

लक्ष्य में एक विफल सुरक्षित कार्य है, यदि आप X सेकंड में हिट नहीं करते हैं (डिफ़ॉल्ट 15 सेकंड है) या यदि संचारण नहीं किया जा सकता है तो वे वापस प्रारंभिक स्थिति में चले जाएंगे।

मैं यह नहीं बताने जा रहा हूं कि आप कैसे तार लगाने जा रहे हैं, बिजली की शीट की जांच करें कि आप यह कैसे करने जा रहे हैं। एक चीज जो उस पर नहीं है, वह है बैटरी, पावर स्विच और चार्जर। यह आपको तय करना है कि आप इसे कैसे चाहते हैं।

NRF24L + मॉड्यूल के बारे में महत्वपूर्ण:

यह दर्द हो सकता है … उन्हें स्थिर करने के लिए, अच्छी शक्ति और इसके चारों ओर अलगाव के साथ, और कोड आप उन्हें काम करने के लिए प्राप्त करेंगे। मेरे लिए 10 यूएफ कैपेसिटर मुझे स्थिर और अच्छा कनेक्शन देगा, लेकिन कृपया पहले प्रयास करें कि आपको उदाहरण के लिए 100 यूएफ कैपेसिटर की आवश्यकता है। साथ ही उन्हें पहले प्लास्टिक फॉयल और फिर एल्युमिनियम फॉयल से लपेट दें ताकि वे दखल न दें।

इसके अलावा कोड में, डेटा दर आपको 250 केबी से अधिक की आवश्यकता नहीं है, इसलिए यह समस्या नहीं होगी। लेकिन पीए: myRadio.setPALevel(RF24_PA_MIN);

कोड में मैंने MIN पर सेट किया है (यह परीक्षण के दौरान है), यह सबसे कम है और इतनी शक्ति का उपयोग नहीं करेगा, लेकिन सीमा इतनी लंबी नहीं होगी। यदि आपको उनके लिए स्थिर और अच्छी शक्ति मिली है, तो आप सबसे लंबी रेंज प्राप्त करने के लिए RF24_PA_MAX तक जा सकते हैं, लेकिन इसके लिए उन्हें GOOOOOD स्थिर शक्ति की आवश्यकता है। यह देखने के लिए कि क्या आपको अच्छा संचार मिलता है, निम्न और उच्च (केवल MAX टेक्स्ट बदलें) भी आज़माएं। साथ ही आपको LOW और High पर अच्छी रेंज मिलेगी, जब तक कि आप स्नाइपर नहीं बन जाते।

ट्रांसमीटरों को भी कम से कम एक मीटर की दूरी पर रखें, बंद करने से सिग्नल खराब हो सकता है

NRF24 लाइब्रेरी में कुछ पिंग उदाहरण के साथ संचार का परीक्षण करें (GitHub पर लिंक)

कोड में आपको उस लक्ष्य के लिए विशिष्ट पहचान संख्या निर्धारित करनी होगी:

इंट टार्गिड = ३४०१; // यह लक्ष्य आईडी है

इंट सेंडआईडी = २४०१; // यह प्रतिक्रिया आईडी है

3 परिभाषित कार्य भी हैं:

#डीबग को परिभाषित करें

#बैटरी को परिभाषित करें

#define SHAKE // यदि पुराने PIEZO के बजाय SHAKE स्विच का उपयोग किया जाता है

डीबग:

परीक्षण के दौरान इसे परिभाषित करना अच्छा है। लेकिन जब आप उन्हें उपलब्ध करा रहे हों, तो उसे सक्रिय न करें।

बैटरी:

यदि आप लक्ष्य के लिए बैटरी चेकर नहीं रखना चाहते हैं, तो आपको इस परिभाषा को हटाना होगा।

हिलाना:

यदि आपने मेरा पुराना संस्करण बनाया है, आपके पास पीजो सेंसर हैं, तो उनके लिए सही कोड प्राप्त करने के लिए इसे हटा दें।

ATMEGA328 चिप

एक Arduino नैनो के बजाय मैंने ATMEGA328 चिप (Uno बूट लोडर के साथ) का उपयोग करने का निर्णय लिया, वे प्रोग्राम के लिए सरल हैं बस एक Arduino Uno से चिप को हटा दें और इस चिप को जोड़ें और कोड अपलोड करें। लक्ष्यों का निर्माण कैसे करें, इस पर विद्युत योजना की जाँच करें।

कोड

मैंने Arduino IDE के बजाय PlatformIO के साथ कोड लिखा है। यह प्रोग्राम करने के लिए एक बेहतर सॉफ्टवेयर है। इसलिए कोड थोड़ा अलग है। मैं इसके बजाय इस सॉफ़्टवेयर का उपयोग करने की सलाह देता हूं।

लक्ष्य और ट्रांसमीटर बॉक्स

मैंने लक्ष्य पर लगे सेंसर और नीले रंग को संलग्न किया है, और 2 मीटर पर 3, 5 मिमी फोनो केबल के साथ मैं इसे ट्रांसमीटर बॉक्स में एक साथ जोड़ता हूं जिसमें एटमेगा चिप, बैटरी चार्जर और हरे और लाल रंग का एलईडी होता है। ऐसा इसलिए है ताकि इसे स्टील की गोलियों से मारने से बचाया जा सके।

चरण 2: खेल नियंत्रक

खेल नियंत्रक
खेल नियंत्रक
खेल नियंत्रक
खेल नियंत्रक
खेल नियंत्रक
खेल नियंत्रक
खेल नियंत्रक
खेल नियंत्रक

अगली चीज़ जो हमें करने की ज़रूरत है वह है सेंसर के लिए नियंत्रक बनाना। यह एक Arduino है जो सेंसर के साथ संचार करने के लिए NRF24L01 मॉड्यूल का उपयोग करता है। और कुछ नहीं। Arduino को काम करने के लिए रास्पबेरी पाई में USB के साथ जोड़ा जाता है।

इस तरह यह काम करेगा। यह जानने के लिए सीरियल का उपयोग करता है कि क्या करना है। पीआई सीरियल कमांड भेजेगा। सबसे पहले सेटअप के दौरान यह बताता है कि आपने कितने लक्ष्य जोड़े हैं, और लक्ष्य पहचान संख्याएँ। फिर यह परीक्षण कार्य करेगा और रास्पबेरी पाई को सूचित करेगा यदि वे एक दूसरे के साथ संवाद करते हैं।

जब आप गेम खेलते हैं तो यह पीआई से भेजेगा कि किस प्रकार का गेम और कितने राउंड/हिट का उपयोग करना है। इतना ही।

रास्पबेरी पाई में NRF24L01 मॉड्यूल का उपयोग करना संभव है, लेकिन मेरे लिए Arduino एक बेहतर विकल्प है पाप मैं उन्हें रास्पबेरी में कभी भी उपयोग नहीं करता हूं इसलिए मुझे नहीं पता कि वे लंबे समय में कितना अच्छा काम करते हैं।

एक पावर मॉड्यूल है जो ट्रांसमीटरों को सही स्थिर शक्ति बनाने के लिए 5 वी का उपयोग करता है। आप उन्हें अपने साथ उपयोग कर सकते हैं Arduino (चित्र देखें) नाम सॉकेट एडेप्टर मॉड्यूल बोर्ड है

जब आप खेलते हैं तो लक्ष्य एक-एक करके बेतरतीब ढंग से सक्रिय हो जाएंगे। एक हिट होने पर दूसरा सक्रिय हो जाएगा।

परीक्षण के दौरान आप यह देखने के लिए #DEFINE DEBUG सक्रिय कर सकते हैं कि यह कैसे काम करता है, लेकिन जब आप इसे pi कंप्यूटर में उपयोग नहीं करते हैं, तब यह काम नहीं करेगा।

GitHub पेज पर कोड डाउनलोड करें।

चरण 3: रास्पबेरी पाई

रास्पबेरी पाई
रास्पबेरी पाई
रास्पबेरी पाई
रास्पबेरी पाई
रास्पबेरी पाई
रास्पबेरी पाई
रास्पबेरी पाई
रास्पबेरी पाई

अब हम रास्पबेरी पाई पर आ गए हैं।

मैंने कुछ अतिरिक्त कार्य जोड़े हैं ताकि मेरे पास एक पावर बटन हो। ATXRaspi 3 एक बेहतरीन मॉड्यूल है, आप एक बटन के साथ पाई को चालू, बंद और रिबूट कर सकते हैं। समय और तारीख को पाई पर रखने के लिए एक RTCRaspi भी। नेटवर्क केबल को प्लग इन करना भी संभव बना दिया है, मुझे सिस्टम पर कुछ अपडेट करने की ज़रूरत है। आप उन्हें Lowpowerlab. पर पाएंगे

थर्मल प्रिंटर जो आपको स्पार्कफुन पर मिलेगा और बारकोड रीडर अमेज़न पर उपलब्ध है।

पीआई कंप्यूटर कियोस्क मोड में चलता है इसलिए ब्राउजर शुरू में खुल जाएगा। सबसे पहले आपको पीआई कंप्यूटर पर PHP 7 और MySQL के साथ एक वेबसर्वर होना चाहिए। (इसके लिए वेब पर बहुत सारे गाइड हैं)

कृपया ध्यान दें: यदि आप ब्लूटूथ में निर्मित रास्पबेरी पाई के साथ थर्मल प्रिंटर का उपयोग करने जा रहे हैं, तो आपको पहले उसे अक्षम करना होगा।

अजगर स्क्रिप्ट को पाइसरियल की आवश्यकता होती है और आप इसे स्थापित करते हैं: sudo apt-get install python-serial

mysql कार्य को निम्नलिखित स्थापित करने के लिए:

sudo apt-mysql-python स्थापित करें sudo apt-get install python-mysql.connector

suso apt-pymysql स्थापित करें

अब आप सीरियल के माध्यम से Arduino को नियंत्रित कर सकते हैं और MySQL डेटाबेस को भी अपडेट कर सकते हैं।

अगला कदम mysql से कनेक्ट करने के लिए अजगर स्क्रिप्ट बनाना है।

तीनों पायथन लिपि में अपने MySQL डेटाबेस से कनेक्शन बदलें।

अगला कदम अजगर स्क्रिप्ट को शुरू में चलाना है।

तीन अजगर हैं script.game.py सभी में सबसे महत्वपूर्ण है, कि एक गेम फंक्शन रखता है। बारकोड स्कैनर का उपयोग करने जा रहे हैं।

उन्हें ऑटोस्टार्ट बनाने के लिए मैं संपादित करता हूं:

सुडो नैनो /etc/rc.local

और बाहर निकलने से पहले नीचे निम्नलिखित जोड़ें 0:

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

कृपया अपनी पायथन लिपि के लिए सही जगह पर बदलें और अंत में साइन करना न भूलें।

अब हमें वेबब्रोसर के लिए एक कियोस्क मोड बनाने की जरूरत है, पहले कर्सर को हटा दें:

sudo apt-unclutter स्थापित करें

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

अब उस फ़ाइल में खोजें और टिप्पणी करें:

@xscreensaver -no-splash # स्क्रीनसेवर को अक्षम करने के लिए इस लाइन पर टिप्पणी करें

इसके नीचे जोड़ें:

@xset s off @xset -dpms @xset s noblank @ क्रोमियम-ब्राउज़र --noerrdialogs --force-device-scale-factor=1.25 --kiosk

सभी बूट टेक्स्ट और सामान को हटाने के लिए अगला कदम यहां अपनी खुद की बूट स्क्रीन भी जोड़ें एक त्वरित गाइड है:

sudo nano /boot/config.txt और नीचे adddisable_splash=1

स्प्लैश छवि के तहत पाठ संदेश निकालें:

सुडो नैनो /usr/share/plymouth/themes/pix/pix.script

ढूँढें और निकालें (या टिप्पणी करें):

message_sprite = स्प्राइट ();message_sprite. SetPosition (स्क्रीन_विड्थ * 0.1, स्क्रीन_हाइट * 0.9, 10000);

तथा:

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

अब हम बूट संदेश हटाते हैं:

सूडो नैनो /boot/cmdline.txt

"कंसोल = ट्टी 1" को "कंसोल = ट्टी 3" से बदलें

और पंक्ति के अंत में जोड़ें:

स्पलैश शांत प्लायमाउथ.इग्नोर-सीरियल-कंसोल लोगो.नोलोगो vt.global_cursor_default=0

और पीआई स्पलैश को अपने साथ बदलें:

सुडो सीपी ~/my_splash-p.webp" />

अब आपके पास अपने गेम के लिए अपनी कस्टम बूट स्क्रीन है। आपका पीआई कंप्यूटर अब गेम को संभालने के लिए तैयार है। तो अगले चरण पर जाएं!

चरण 4: गेम सेट करें

इस बिंदु पर आपने अब गेम बना लिया है।

सबसे पहले आपको वेबसिस्टम को सेटअप करने की आवश्यकता है। डेटाबेस को अपने mysql सर्वर पर अपलोड करें। फ़ाइल शामिल फ़ोल्डर में है और इसका नाम डेटाबेस.एसक्यूएल है

अगला कदम कॉन्फिग फाइल को संपादित करना है, आप इसे शामिल फ़ोल्डर नाम में पाते हैं config.phpडेटाबेस लॉगिन जानकारी बदलें ताकि स्क्रिप्ट काम करे।

वेब सिस्टम बहु भाषा आधारित है और अंग्रेजी में लिखा गया है। एक स्वीडिश अनुवाद उपलब्ध है। अधिक भाषा बनाने के लिए आपको पोएडिट नामक एक सॉफ्टवेयर की आवश्यकता है।

वेब सिस्टम में और भाषा जोड़ने के लिए आपको i18n_setup.php को संपादित करने और सरणी में जोड़ने की आवश्यकता है:

वापसी in_array($लोकेल, ['en_US', 'sv_SE']); (पंक्ति २३)

साथ ही डिफ़ॉल्ट भाषा बदलने के लिए आपको लाइन 27 में बदलने की आवश्यकता है: $lang = 'en_US'; en_US को अपनी भाषा में बदलें।

भाषा फ़ाइलों को स्थानीय/LANGCODE/LC_MESSAGES/ में रखा जाना चाहिए और उनका नाम main.mo होना चाहिए (लैंगकोड को अपनी भाषा में बदलें)

फ़ाइल में कीबोर्ड बदलने के लिए selectplayers.php आप भाषा बदलते हैं: "en", //en अंग्रेजी sv के लिए स्वीडिश लेआउट के लिए: 'qwerty', //qwerty for english swedish-qwerty स्वीडिश के लिए

आप उन्हें लाइन २१८ और २१९. पर पाते हैं

उपलब्ध भाषाएं फ़ोल्डर में हैं: संपत्ति/जेएस/कीबोर्ड/भाषाएं और लेआउट संपत्ति/जेएस/कीबोर्ड/लेआउट में हैं और लाइन 118 और 119 में सही फाइलें जोड़ें (अब जो आपको वहां मिलती है उसे बदलें)

लक्ष्य जोड़ें

टारगेट जोड़ने के लिए आप लोकलहोस्ट/एडमिन/ पर जाएं और ऐड टारगेट पर क्लिक करें।

आपको लक्ष्य और अद्वितीय लक्ष्य आईडी के लिए एक नाम जोड़ने और आईडी भेजने की जरूरत है, जितने लक्ष्य आपके पास हैं उन्हें जोड़ें।

खेल जोड़ें

आपको कुछ गेम भी जोड़ने होंगे। लोकलहोस्ट/एडमिन/ पर जाएं और ऐड गेम पर क्लिक करें

आपको खेल के लिए एक नाम जोड़ने की जरूरत है, एक विवरण, न्यूनतम और अधिकतम खिलाड़ी किस प्रकार का खेल, यह भी कि खेल 1 से 5 के बीच कितना कठिन है। और खेल कैसा है, इसलिए रैपिडफायर गेम के लिए आप कितने हिट जोड़ते हैं (उदाहरण ३०) क्विक ड्रा के लिए कितने राउंड (उदाहरण के लिए ८) और कितने समय के लिए वे खेलने जा रहे हैं (उदाहरण के लिए ६० एक मिनट के लिए)

खेल शुरू करो

जब आप खेल को शक्ति देते हैं तो यह लक्ष्य परीक्षण करेगा। तो इससे पहले कि आप मुख्य प्रणाली शुरू करें, लक्ष्यों को चालू रखने की जरूरत है। यदि सभी परीक्षा पास कर लेते हैं तो आप सिस्टम का उपयोग कर सकते हैं, लेकिन यदि वे नहीं करते हैं तो आप इसका उपयोग नहीं कर सकते। यह तब तक संवाद करने का प्रयास करेगा जब तक उन्हें प्रतिक्रिया नहीं मिलती।

आपको कामयाबी मिले

खैर, यह इसके बारे में है, कोड में अपडेट के बारे में समर्थन और जानकारी के लिए कृपया इस गेम के लिए मेरे फेसबुक पेज का अनुसरण करें, ताकि मैं आपको तेजी से प्रतिक्रिया दे सकूं। आपको यहां शीर्ष में लिंक मिलेंगे।

सिफारिश की: