תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
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).
איך זה עובד?
- כל 10 שניות, הקוד מחפש משחק פעיל. אם הוא נמצא, הוא נשמר במשתנה בשם huidigSpel (currentGame)
- אם המצב מוגדר כ- Serial, נעשה שימוש בכבל בין ה- Arduino ל- Pi. סקרי ה- Pi לערכים של LDR ו- GPS. ה- Arduino מגיב בפורמט JSON. תגי RFID נשלחים בכל פעם שהם מוצגים. מצב זה שימש אך ורק לצורכי פיתוח ואינו באמת נחוץ יותר.
- אם המצב מוגדר ל- LoRa, ייווצר לקוח MQTT המפעיל התקשרות חוזרת בכל פעם שנתוני LoRa מתקבלים על ידי TTN. זה מכיל נתוני LDR, GPS ו- RFID.
- הקצה הקדמי יכול לאחזר נתונים באמצעות נקודות הקצה של ה- 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: הוספת מעטפת
במקרה, השתמשתי בארון כלים ישן, יחד עם החומרים/הטכניקות הבאים:
- הדפסה תלת מימדית
- קצף לשמירה על הסוללה במקומה
- קרשים מעץ ממוחזרים
- דבק חם
- ברגים ואומים
מה שאתה עושה במקרה שלך הוא הבחירה שלך! אני הולך לתת לך חופש אמנותי.
להשראה, הוספתי כמה תמונות מהתיק שלי (סיים).