التقط الصندوق: 8 خطوات
التقط الصندوق: 8 خطوات
Anonim
أمسك الصندوق
أمسك الصندوق
أمسك الصندوق
أمسك الصندوق

Capture The Box هي لعبة بناء فريق يمكنك لعبها مع الأصدقاء في منطقتك.

الهدف هو الاستيلاء على الصندوق والاحتفاظ به في حوزتك لأطول فترة ممكنة بينما يحاول اللاعبون الآخرون التسلل بعيدًا عن الشرفة أو الحديقة الأمامية.

تستخدم هذه اللعبة نظام تحديد المواقع العالمي لتحديد موقع الصندوق وعلامات RFID لتحديد اللاعبين. يمكن إضافة LDR اختياري لمطابقة كثافة عرض المصفوفة النقطية مع النسبة المئوية للضوء في المنطقة.

اللوازم

المتحكمات الدقيقة وأجهزة الكمبيوتر

  • فطيرة التوت
  • Arduino (Mega) اخترت Arduino Mega على Uno العادي ، لأنه يحتوي على الكثير من الدبابيس. هذا ضروري لأننا نستخدم درع Dragino LoRa ، والذي من شأنه أن يترك لنا القليل من المسامير الرقمية عند استخدام UNO. نصيحة: من الأفضل استخدام نسخة أصلية ، لأن النسخ الصينية لا تعمل دائمًا كما هو متوقع.

مجسات ووحدات

  • 4 MAX7219 Dot Matrix ModulesConnect DOUT to DIN، CS to CS، CLK to CLK …
  • مقاوم يعتمد على الضوء (10 كيلو) + المقاوم (10 كيلو)
  • وحدة GPS NEO-7M (أو ما شابه) أنا أستخدم VMA430 من Velleman
  • وحدة RC522 RFID + بعض شارات / بطاقات RFID

لاستخدام LoRa (تقنية لاسلكية)

دراجينو لورا شيلد

وحدات استشعار ووحدات اختيارية

شاشة LCD لعرض عنوان IP الخاص بـ Raspberry Pi

لإجراء إعداد الاختبار

لوح توصيل وكابلات دوبونت (ذكر-ذكر

اختياري (غلاف)

  • لحام حديد
  • علبة أداة قديمة
  • مواد للطباعة ثلاثية الأبعاد
  • بعض الألواح الخشبية الرقيقة
  • بعض البراغي والصواميل (التي يمكن وضعها في فتحات Arduino) يبلغ قطر مساميري حوالي 3 مم.

يمكن العثور على سعر تقديري في قائمة المواد (فاتورة المواد) المدرجة أدناه.

الخطوة 1: إعداد Raspberry Pi

Raspberry Pi هو قلب المشروع.

سيتم تشغيل الواجهة الأمامية والخلفية وقاعدة البيانات. كما سيكون مسؤولاً عن الاتصال بين الواجهة الخلفية واردوينو.

لكي نستخدم Raspberry Pi ، سنحتاج إلى القيام بما يلي:

الجزء 1: قم بتثبيت Raspbian على Raspberry Pi

يمكن العثور على برنامج تعليمي حول كيفية القيام بذلك هنا:

الجزء 2: قم بتثبيت Raspbian على Raspberry Pi قم بإعداد شبكة WiFi المنزلية الخاصة بك.

يمكن القيام بذلك باستخدام wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

أعد تشغيل Pi وسترى عنوان IP عند كتابة ifconfig

الجزء 3: تثبيت خادم الويب وقاعدة البيانات

بمجرد تشغيل Pi ، من الأفضل تغيير كلمة المرور الخاصة بك ، ويمكن القيام بذلك باستخدام الأمر passwd.

بمجرد الانتهاء من ذلك ، امض قدمًا وقم بتثبيت Apache و PHP و MariaDB و PHPMyAdmin.

Apache و PHP sudo apt install apache2 -y sudo apt install php libapache2-mod-php -y

MariaDB sudo apt install mariadb-server mariadb-client -y sudo apt install php-mysql -y sudo systemctl أعد تشغيل apache2.service

PHPMyAdminsudo مناسب لتثبيت phpmyadmin -y

لا تنس تعيين كلمة مرور MySQL آمنة.

الجزء 4: تثبيت مكتبات Python الضرورية

بالنسبة للخلفية ، سنحتاج إلى بعض المكتبات. يمكن تثبيتها باستخدام الأمر pip3.

pip3 تثبيت mysql- موصل- بيثون

pip3 تثبيت flask-socketio

pip3 تثبيت قارورة cors

pip3 تثبيت geventpip3 تثبيت gevent-websocket

pip3 تثبيت ttn

الخطوة 2: وضع الإلكترونيات

وضع الإلكترونيات
وضع الإلكترونيات
وضع الإلكترونيات
وضع الإلكترونيات

لإنجاح هذا المشروع ، نحتاج إلى توصيل جميع الأجهزة الإلكترونية.

يمكن وضع درع LoRa بسهولة في مكانه. ما عليك سوى محاذاة المسامير مع المسامير الموجودة على Arduino.

تم وصف الاتصالات الأخرى في مخطط فريتزينج الخاص بي. والتي يمكن تحميلها من هنا:

الخطوة 3: تصميم قاعدة البيانات

تصميم قاعدة البيانات
تصميم قاعدة البيانات

لكي أتمكن من تخزين جميع بيانات اللعبة وأجهزة الاستشعار ، قمت بعمل بعض الجداول:

القياس والمستشعر - القياسات من المستشعرات ، الموجودة في جداول المستشعرات. تحتوي على إشارة إلى المستشعر وقيمة القياس (مثل الإحداثيات: 51.123456 ؛ 3.123456) ومعرف اللعبة الاختياري (إذا كانت اللعبة نشطة أثناء القياس).

أسماء اللاعبين والرمز الفريد المميز لشارة RFID الخاصة بهم. تمت إضافة وسيط ميداني اختياري ، يمكن لهذا الشخص تعديل اللعبة (على سبيل المثال إيقافها قبل الوقت).

spel معلومات اللعبة (وقت البداية والنهاية).

العلاقة بين spel و speler. هذا هو المكان الذي يتم فيه تعيين اللاعبين للعبة.

في هذا الجدول ، يتم حفظ النتيجة. يحتوي على معرّف اللعبة ومعرّف اللاعب والوقت الذي سرق فيه الصندوق والوقت الذي فقده فيه (عندما يسرقه شخص آخر أو عندما تنتهي اللعبة). بطرح وقت البدء من وقت الانتهاء ، يمكنك حساب النتيجة التي حصل عليها من ذلك الالتقاط.

يمكن العثور على تصدير قاعدة البيانات على GitHub الخاص بي (https://github.com/BoussonKarel/CaptureTheBox)

افتح SQL في PHPMyAdmin / MySQL Workbench وقم بتشغيله. يجب الآن استيراد قاعدة البيانات.

الخطوة 4: إنشاء حساب على TTN

الخطوة 1: قم بالتسجيل للحصول على حساب على TTN وإنشاء تطبيق

قم بالتسجيل للحصول على حساب على TheThingsNetwork ، ثم انتقل إلى وحدة التحكم> إضافة تطبيق.

اختر اسمًا للتطبيق الخاص بك وانقر فوق إضافة تطبيق.

الخطوة الثانية: تسجيل الجهاز

عندما تنتهي من تطبيقك ، انتقل إلى Register device (تسجيل الجهاز).

اختر معرّف الجهاز ، يمكن أن يكون هذا ما تريد (طالما أنه حالة ثعبان) وانقر فوق تسجيل.

انقر فوق رمز "إنشاء" الموجود أسفل Device EUI ، حتى يقوم TTN بإنشاء واحد لك.

الخطوة 3: تدوين بيانات الاعتماد الخاصة بك

انتقل الآن إلى جهازك وانقر على رمز الرمز بجوار Device EUI و App EUI ومفتاح التطبيق. يجب أن تظهر الآن كمصفوفة بايت.

قبل النسخ ، انقر فوق الزر Switch وتأكد من أن Dev EUI و App EUI هما LSB FIRST.

يجب أن يظل مفتاح التطبيق MSB FIRST (لا تغير ذلك).

ستحتاج إلى هذه المفاتيح في الخطوة التالية: إعداد Arduino.

الخطوة 4: تدوين مفتاح الوصول للتطبيق الخاص بك

سنحتاج الآن إلى مفتاح آخر لإعداد MQTT على Raspberry Pi الخاص بنا.

انتقل إلى التطبيق الخاص بك وانتقل لأسفل إلى مفاتيح Acces.

ستحتاج إلى هذا في الخطوة الخلفية.

الخطوة 5: إعداد Arduino

يمكن أيضًا العثور على كود Arduino على GitHub الخاص بي ، ضمن Arduino (https://github.com/BoussonKarel/CaptureTheBox)

يتم تقسيم هذا الرمز إلى عدة علامات تبويب لإبقائه منظمًا.

main.ino الكود الرئيسي: تعريفات الدبوس ، الإعداد () والحلقة ()

0_LoRa.ino يتعامل هذا الرمز مع الاتصال باستخدام LoRa.

يضع بيانات علامات LDR و GPS و RFID في صفيف من 13 بايت ويرسلها إلى TheThingsNetwork.

1_LDR.ino باستخدام analogRead () ، فإنه يقيس مقدار الجهد على المقاوم المعتمد على الضوء.

ثم يتم تحويل هذا إلى نسبة مئوية من الضوء (0 لا شيء ، 100 هو مصباح يدوي للهاتف المحمول).

2_GPS.ino يستخدم هذا الاتصال التسلسلي باستخدام TX1 و RX1 (Serial1).

يستخدم رسائل NMEA (رسائل GPRMC $ على وجه الدقة) للعثور على خط الطول وخط العرض للمربع.

3_RFID.ino باستخدام مكتبة MFRC522 ، يقوم هذا الرمز بالمسح بحثًا عن علامات RFID جديدة ، وحينما يوجد واحد ، يتم تخزينه في صورة RFID_lastUID.

4_DotMatrix.ino يتم استخدام هذا الكود لتهيئة وتعيين عرض المصفوفة النقطية ، وهو يحتوي على تعريفات لتحميل الرسوم المتحركة وما إلى ذلك …

إعداده

قبل أن تتمكن من تحميل هذا الرمز إلى Arduino الخاص بك ، ستحتاج إلى تثبيت بعض المكتبات.

مكتبة Arduino-LMIC بواسطة matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)

مكتبة MFRC522 لقارئ RFID (https://github.com/miguelbalboa/rfid)

الآن ، انتقل إلى main.ino وقم بتغيير DEVEUI و APPEUI و APPKEY إلى تلك التي نسختها في الخطوة الأخيرة.

الخطوة السادسة: إعداد الواجهة الخلفية

يمكن العثور على الواجهة الخلفية لهذا المشروع على GitHub الخاص بي ، ضمن RPI> Backend (https://github.com/BoussonKarel/CaptureTheBox).

كيف يعمل؟

  1. كل 10 ثوانٍ ، يبحث الكود عن لعبة نشطة ، وإذا تم العثور على واحدة ، فسيتم حفظها في متغير يسمى huidigSpel (currentGame)
  2. إذا تم ضبط الوضع على Serial ، فسيتم استخدام كبل بين Arduino و Pi ، حيث يستقصي Pi قيم LDR و GPS. يستجيب Arduino بتنسيق JSON ، ويتم إرسال علامات RFID كلما تم تقديمها ، تم استخدام هذا الوضع فقط لأغراض التطوير ولم يعد ضروريًا بعد الآن.
  3. إذا تم تعيين الوضع على LoRa ، يتم إنشاء عميل MQTT الذي يقوم بتشغيل رد الاتصال كلما تم تلقي بيانات LoRa بواسطة TTN. يحتوي هذا على بيانات LDR و GPS و RFID.
  4. يمكن للواجهة الأمامية استرداد البيانات باستخدام نقاط نهاية API. يتم استرداد معظم البيانات باستخدام huidigSpel.id ، ويتم إرجاع البيانات بتنسيق JSON باستخدام jsonify ()

قم بتعديل الإعدادات ، انتقل إلى secrets.py واملأ اسم تطبيق LoRa الخاص بك ومفتاح Acces (الذي كتبته سابقًا).

انتقل إلى config.py واملأ بيانات اعتماد قاعدة البيانات (مثل كلمة المرور ، المستخدم …)

إعداده كخدمة حاول تشغيل app.py ، بمجرد التأكد من أن هذا يعمل ، يمكننا استخدامه كخدمة ، وسيبدأ هذا الرمز تلقائيًا في الخلفية عند تشغيل جهاز pi.

للقيام بذلك ، قم بنسخ ctb_service.service إلى /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service

الآن قم بتمكينه باستخدام systemctl قم بتمكين ctb_service.service

إذا كنت بحاجة إلى إجراء بعض التغييرات على الرمز ، فيمكنك إيقافه بسهولة باستخدام إيقاف systemctl (سيبدأ هذا مرة أخرى عند إعادة التشغيل) أو تعطيل (إيقافه من بدء التشغيل تلقائيًا) باستخدام تعطيل systemctl.

إذا كنت بحاجة إلى مراجعة السجلات (بسبب الأخطاء) ، يمكنك استخدام journalctl -u ctb_service.service.

يمكن العثور على مزيد من المعلومات حول الخدمات هنا:

الخطوة السابعة: إعداد الواجهة الأمامية

كالعادة ، يمكن العثور على الواجهة الأمامية على GitHub الخاص بي ، ضمن RPI> الواجهة الأمامية (https://github.com/BoussonKarel/CaptureTheBox)

الصق هذا في المجلد / var / html في Raspberry Pi الخاص بك.

يحتوي هذا على جميع صفحات الويب اللازمة للعبة.

يحتوي أيضًا على برنامج نصي للتواصل مع الواجهة الخلفية (في الوقت الفعلي واستخدام نقاط نهاية API).

الخطوة 8: إضافة غلاف

إضافة غلاف
إضافة غلاف
إضافة غلاف
إضافة غلاف

بالنسبة للحالة ، استخدمت حقيبة أداة قديمة ، جنبًا إلى جنب مع المواد / التقنيات التالية:

  • طباعة ثلاثية الأبعاد
  • رغوة للحفاظ على البطارية في مكانها
  • ألواح خشبية معاد تدويرها
  • الغراء الساخن
  • البراغي والصواميل

ما تفعله بقضيتك هو اختيارك! سأعطيك الحرية الفنية.

للإلهام ، أضفت بعض الصور لحالتي (النهائية).