ללכוד את הקופסה: 8 שלבים
ללכוד את הקופסה: 8 שלבים
Anonim
ללכוד את הקופסה
ללכוד את הקופסה
ללכוד את הקופסה
ללכוד את הקופסה

Capture The Box הוא משחק פיתוח צוות שתוכל לשחק עם חברים בשכונה שלך.

המטרה היא ללכוד את הקופסה ולשמור אותה ברשותך למשך זמן רב ככל האפשר בעוד שחקנים אחרים מנסים ללכת ולגנוב אותה מהמרפסת או מהגינה הקדמית שלך.

משחק זה משתמש ב- GPS לאיתור התיבה ותגי RFID לזיהוי השחקנים. ניתן להוסיף LDR אופציונלי כך שיתאים לעוצמת תצוגת מטריצת הנקודות לאחוז האור באזור.

אספקה

בקרי מיקרו ומחשבים

  • פאי פטל
  • Arduino (Mega) בחרתי ב- Arduino Mega על פני Uno רגיל, כי יש לו הרבה יותר סיכות. זה הכרחי מכיוון שאנו משתמשים במגן Dragino LoRa, שישאיר לנו מעט מדי סיכות דיגיטליות בעת שימוש ב- UNO. טיפ: עדיף להשתמש באחד מקורי, מכיוון שהשיבוטים הסינים לא תמיד עובדים כצפוי.

חיישנים ומודולים

  • 4 מודולי מטריקס MAX7219 נקודות חיבור DOUT ל- DIN, CS ל- CS, CLK ל- CLK …
  • הנגד תלוי תלוי (10K) + הנגד (10K)
  • מודול GPS NEO-7M (או דומה) אני משתמש ב- VMA430 מבית Velleman
  • מודול RFID RC522+ כמה תגי RFID/כרטיסים

לשימוש ב- LoRa (טכנולוגיה אלחוטית)

מגן דראגינו לורה

חיישנים ומודולים אופציונאליים

צג LCD להצגת כתובת ה- IP של ה- Raspberry Pi

לביצוע התקנת בדיקה

לוח לחם וכבלי דופונט (זכר-זכר

אופציונלי (מעטפת)

  • מלחם
  • מארז כלים ישן
  • חומרים להדפסה תלת מימדית
  • כמה קרשים דקים מעץ
  • כמה ברגים ואומים (שיכולים להתאים לחורי ארדואינו). הברגים שלי הם בקוטר של כ -3 מ"מ.

מחיר משוער ניתן למצוא ב- BOM (שטר החומרים), כלול להלן.

שלב 1: הגדרת ה- Raspberry Pi

ה- Raspberry Pi הוא לב הפרויקט.

הוא יפעיל את הקצה הקדמי, את הקצה האחורי ואת מסד הנתונים. הוא יהיה אחראי גם על התקשורת בין ה- backend לבין ה- Arduino.

על מנת שנוכל להשתמש ב- 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 להתקין apache2 -y sudo apt להתקין php libapache2 -mod -php -y

MariaDB sudo apt להתקין mariadb-server mariadb-client -y sudo apt להתקין php-mysql -y sudo systemctl הפעלה מחדש apache2.service

PHPMyAdminsudo apt להתקין phpmyadmin -y

אל תשכח להגדיר סיסמת MySQL מאובטחת.

חלק 4: התקנת ספריות Python הדרושות

עבור backend, נצטרך כמה ספריות. ניתן להתקין אותם באמצעות הפקודה pip3.

pip3 התקן את mysql-connector-python

pip3 התקן flask-socketio

pip3 התקן בקבוקונים

pip3 התקן geventpip3 התקן gevent-websocket

pip3 התקן ttn

שלב 2: פריסת האלקטרוניקה

פריסת האלקטרוניקה
פריסת האלקטרוניקה
פריסת האלקטרוניקה
פריסת האלקטרוניקה

כדי לגרום לפרויקט הזה לעבוד, עלינו לחבר את כל האלקטרוניקה.

ניתן לשים את מגן הלורה בקלות במקומו. פשוט יישר את הסיכות עם הסיכות בארדואינו שלך.

שאר הקשרים מתוארים בתוכנית Fritzing שלי. אשר ניתן להוריד כאן:

שלב 3: עיצוב מסד הנתונים

עיצוב מסד הנתונים
עיצוב מסד הנתונים

כדי לאחסן את כל נתוני המשחק והחיישנים, הכנתי כמה טבלאות:

מדידה וחיישן המדידות מהחיישנים הנמצאות בטבלאות החיישנים. היא מכילה התייחסות לחיישן, ערך המדידה (למשל קואורדינטות: 51.123456; 3.123456) ומזהה משחק אופציונלי (אם היה משחק פעיל במהלך המדידה).

שחקן שמות השחקנים ו- UID של תג ה- RFID שלהם. נוסף מנחה שדה אופציונלי, אדם זה יכול לשנות את המשחק (למשל לעצור אותו לפני הזמן).

מידע פרטי המשחק (התחלה וסיום).

יחס בין משחק לנגן. זה המקום שבו השחקנים מוקצים למשחק.

בטבלה זו הציון נשמר. הוא מכיל את מזהה המשחק, מזהה השחקן, הזמן בו גנב את הקופסה והזמן שאיבד אותו (כשמישהו אחר גונב אותו או כשהמשחק מסתיים). על ידי הפחתת זמן ההתחלה משעת הסיום, אתה יכול לחשב את הציון שקיבל מהתפיסה הזו.

ניתן למצוא ייצוא של מסד הנתונים ב- GitHub שלי (https://github.com/BoussonKarel/CaptureTheBox)

פתח את ה- sql ב- PHPMyAdmin / MySQL Workbench והפעל אותו. כעת יש לייבא את מסד הנתונים.

שלב 4: הגדרת חשבון ב- TTN

שלב 1: הירשם לחשבון ב- TTN וצור יישום

הירשם לחשבון ב- TheThingsNetwork, ולאחר מכן עבור אל מסוף> הוסף יישום.

בחר שם לאפליקציה ולחץ על הוסף יישום.

שלב 2: רשום מכשיר

לאחר שהגשת את בקשתך, עבור אל רישום מכשיר.

בחר מזהה מכשיר, זה יכול להיות מה שאתה רוצה (כל עוד מדובר בנחש נחש) ולחץ על הרשמה.

לחץ על הסמל צור תחת התקן EUI, כך ש- TTN ייצור עבורך אחד.

שלב 3: רשום את האישורים שלך

כעת עבור אל המכשיר שלך ולחץ על סמל הקוד שלצד Device EUI, App EUI ו- App key. כעת הוא אמור להופיע כמערך של בתים.

לפני ההעתקה, לחץ על כפתור הבורר וודא שה- Dev EUI והאפליקציה EUI שלך הם LSB FIRST.

מפתח האפליקציה שלך צריך להישאר MSB FIRST (אל תשנה זאת).

תזדקק למפתחות אלה בשלב הבא: הגדרת ה- Arduino.

שלב 4: כתיבת מפתח הגישה ליישום שלך

עכשיו נצטרך עוד מפתח אחד כדי להגדיר MQTT ב- Raspberry Pi שלנו.

עבור אל היישום שלך וגלול מטה אל מפתחות גישה.

תזדקק לזה בשלב ה- Backend.

שלב 5: הגדרת הארדואינו

קוד Arduino ניתן למצוא גם ב- GitHub שלי, תחת Arduino (https://github.com/BoussonKarel/CaptureTheBox)

הקוד הזה מחולק לכרטיסיות מרובות, כדי לשמור אותו מסודר.

הקוד הראשי: הצהרות סיכה, התקנה () ולולאה ()

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 לאלו שהעתקת את השלב האחרון.

שלב 6: הגדרת ה- backend

ה- backend לפרויקט זה ניתן למצוא ב- 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. Data מוחזר בפורמט 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 enable ctb_service.service

אם עליך לבצע כמה שינויים בקוד, תוכל לעצור אותו בקלות באמצעות systemctl stop (פעולה זו תתחיל שוב בעת אתחול מחדש) או השבתה היא (הפסק את האתחול אוטומטי) באמצעות systemctl השבת.

אם אתה צריך להתייעץ ביומנים (בגלל שגיאות), אתה יכול להשתמש ב- journalctl -u ctb_service.service.

מידע נוסף על שירותים ניתן למצוא כאן:

שלב 7: הגדרת החזית

כרגיל, ניתן למצוא frontend ב- GitHub שלי, תחת RPI> Frontend (https://github.com/BoussonKarel/CaptureTheBox)

הדבק את זה בתיקייה /var /html של ה- Raspberry Pi שלך.

זה מכיל את כל דפי האינטרנט הדרושים למשחק.

הוא מכיל גם סקריפט לתקשר עם ה- backend (הן בזמן אמת והן באמצעות נקודות הקצה של ה- API).

שלב 8: הוספת מעטפת

הוספת מעטפת
הוספת מעטפת
הוספת מעטפת
הוספת מעטפת

במקרה, השתמשתי בארון כלים ישן, יחד עם החומרים/הטכניקות הבאים:

  • הדפסה תלת מימדית
  • קצף לשמירה על הסוללה במקומה
  • קרשים מעץ ממוחזרים
  • דבק חם
  • ברגים ואומים

מה שאתה עושה במקרה שלך הוא הבחירה שלך! אני הולך לתת לך חופש אמנותי.

להשראה, הוספתי כמה תמונות מהתיק שלי (סיים).