สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
Capture The Box เป็นเกมสร้างทีมที่คุณสามารถเล่นกับเพื่อน ๆ ในละแวกของคุณ
เป้าหมายคือการยึดกล่องและเก็บไว้ในความครอบครองของคุณให้นานที่สุดในขณะที่ผู้เล่นคนอื่นพยายามไปและแอบออกจากระเบียงหรือสวนหน้าบ้านของคุณ
เกมนี้ใช้ GPS เพื่อค้นหากล่องและแท็ก RFID เพื่อระบุผู้เล่น คุณสามารถเพิ่ม LDR เสริมเพื่อให้ตรงกับความเข้มของการแสดงดอทเมทริกซ์กับเปอร์เซ็นต์ของแสงในพื้นที่
เสบียง
ไมโครคอนโทรลเลอร์และคอมพิวเตอร์
- ราสเบอร์รี่ปี่
- Arduino (Mega) ฉันเลือก Arduino Mega มากกว่า Uno ปกติ เพราะมีพินจำนวนมาก นี่เป็นสิ่งจำเป็นเพราะเราใช้โล่ Dragino LoRa ซึ่งจะทำให้เรามีหมุดดิจิทัลน้อยเกินไปเมื่อใช้ UNO เคล็ดลับ: ควรใช้ของแท้เพราะโคลนของจีนไม่ได้ผลตามที่คาดไว้เสมอไป
เซนเซอร์และโมดูล
- 4 MAX7219 Dot Matrix Modules เชื่อมต่อ DOUT กับ DIN, CS ถึง CS, CLK ถึง CLK…
- ตัวต้านทานแบบพึ่งพาแสง (10K) + ตัวต้านทาน (10K)
- โมดูล GPS NEO-7M (หรือใกล้เคียง) ฉันใช้ VMA430 จาก Velleman
- RC522 โมดูล RFID + ป้าย/การ์ด RFID บางส่วน
สำหรับการใช้ LoRa (เทคโนโลยีไร้สาย)
ดราจิโน่ ลอร่า ชิลด์
เซ็นเซอร์และโมดูลเสริม
จอ LCD เพื่อแสดงที่อยู่ IP ของ Raspberry Pi
สำหรับการตั้งค่าการทดสอบ
เขียงหั่นขนมและสายเคเบิลดูปองท์ (ชาย-ชาย
ตัวเลือก (ปลอก)
- หัวแร้ง
- กล่องเครื่องมือเก่า
- วัสดุสำหรับการพิมพ์ 3 มิติ
- แผ่นไม้บางๆ
- น็อตและน็อตบางตัว (ที่สามารถใส่ในรู Arduino) สกรูของฉันมีเส้นผ่านศูนย์กลางประมาณ 3 มม.
ราคาโดยประมาณสามารถพบได้ใน BOM (Bill of Materials) ซึ่งอยู่ด้านล่าง
ขั้นตอนที่ 1: การตั้งค่า Raspberry Pi
Raspberry Pi คือหัวใจของโครงการ
มันจะเรียกใช้ส่วนหน้า แบ็กเอนด์ และฐานข้อมูล นอกจากนี้ยังจะรับผิดชอบในการสื่อสารระหว่างแบ็กเอนด์และ Arduino
เพื่อให้เราใช้ Raspberry Pi ได้ เราต้องดำเนินการดังต่อไปนี้:
ส่วนที่ 1: ติดตั้ง Raspbian บน Raspberry Pi
บทช่วยสอนเกี่ยวกับวิธีการทำที่สามารถพบได้ที่นี่:https://thepi.io/how-to-install-raspbian-on-the-ra…
ส่วนที่ 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 ที่จำเป็น
สำหรับแบ็กเอนด์ เราจะต้องมีไลบรารี่บางส่วน สามารถติดตั้งได้โดยใช้คำสั่ง pip3
pip3 ติดตั้ง mysql-connector-python
pip3 ติดตั้ง flask-socketio
pip3 ติดตั้ง flask-cors
pip3 ติดตั้ง geventpip3 ติดตั้ง gevent-websocket
pip3 ติดตั้ง ttn
ขั้นตอนที่ 2: วางอุปกรณ์อิเล็กทรอนิกส์
เพื่อให้โครงการนี้ใช้งานได้ เราจำเป็นต้องเชื่อมต่ออุปกรณ์อิเล็กทรอนิกส์ทั้งหมด
สามารถใส่โล่ LoRa เข้าที่ได้อย่างง่ายดาย เพียงจัดตำแหน่งหมุดให้ตรงกับหมุดบน Arduino ของคุณ
การเชื่อมต่ออื่น ๆ ได้อธิบายไว้ในโครงการ Fritzing ของฉัน ซึ่งสามารถดาวน์โหลดได้ที่นี่:
ขั้นตอนที่ 3: การออกแบบฐานข้อมูล
เพื่อให้สามารถจัดเก็บข้อมูลเกมและเซ็นเซอร์ทั้งหมดได้ ฉันได้จัดทำตารางบางส่วน:
การวัดและเซ็นเซอร์การวัดจากเซ็นเซอร์ที่พบในตารางเซ็นเซอร์ มีการอ้างอิงถึงเซ็นเซอร์ ค่าของการวัด (เช่น พิกัด: 51.123456; 3.123456) และรหัสเกมเสริม (หากเกมมีการใช้งานระหว่างการวัด).
ตัวสะกดชื่อผู้เล่นและ UID ของป้าย RFID เพิ่มโมเดอเรเตอร์ฟิลด์เสริม บุคคลนี้สามารถแก้ไขเกมได้ (เช่น หยุดก่อนเวลา)
ข้อมูลเกม spelThe (เวลาเริ่มต้นและสิ้นสุด)
spel_has_spelerความสัมพันธ์ระหว่างตัวสะกดและตัวสะกด นี่คือที่ที่ผู้เล่นได้รับมอบหมายให้เล่นเกม
bezitในตารางนี้ คะแนนจะถูกบันทึกไว้ ประกอบด้วยรหัสเกม รหัสผู้เล่น เวลาที่เขาขโมยกล่อง และเวลาที่เขาทำหาย (เมื่อคนอื่นขโมยมันหรือเมื่อเกมจบลง) โดยการลบเวลาเริ่มต้นออกจากเวลาสิ้นสุด คุณสามารถคำนวณคะแนนที่เขาได้รับจากการจับภาพนั้นได้
การส่งออกฐานข้อมูลสามารถพบได้ใน GitHub ของฉัน (https://github.com/BoussonKarel/CaptureTheBox)
เปิด sql ใน PHPMyAdmin / MySQL Workbench และเรียกใช้ ตอนนี้ควรนำเข้าฐานข้อมูลแล้ว
ขั้นตอนที่ 4: การตั้งค่าบัญชีบน TTN
ขั้นตอนที่ 1: ลงทะเบียนสำหรับบัญชีบน TTN และสร้างแอปพลิเคชัน
ลงชื่อสมัครใช้บัญชีบน TheThingsNetwork จากนั้นไปที่คอนโซล > เพิ่มแอปพลิเคชัน
เลือกชื่อสำหรับแอปพลิเคชันของคุณแล้วคลิกเพิ่มแอปพลิเคชัน
ขั้นตอนที่ 2: ลงทะเบียนอุปกรณ์
เมื่อคุณทำการสมัครแล้ว ให้ไปที่ ลงทะเบียนอุปกรณ์
เลือกรหัสอุปกรณ์ นี่จะเป็นอะไรก็ได้ที่คุณต้องการ (ตราบใดที่เป็นเคสงู) แล้วคลิกลงทะเบียน
คลิกที่ไอคอนสร้างภายใต้อุปกรณ์ EUI ดังนั้น TTN จะสร้างให้คุณ
ขั้นตอนที่ 3: จดข้อมูลประจำตัวของคุณ
ตอนนี้ไปที่อุปกรณ์ของคุณแล้วคลิกที่ไอคอนรหัสถัดจากอุปกรณ์ EUI, App EUI และรหัสแอพ ตอนนี้ควรปรากฏเป็นอาร์เรย์ของไบต์
ก่อนที่คุณจะคัดลอก ให้คลิกปุ่มสลับ และตรวจสอบให้แน่ใจว่า Dev EUI และ App EUI ของคุณเป็น LSB FIRST
รหัสแอปของคุณควรอยู่ที่ MSB ก่อน (อย่าเปลี่ยนสิ่งนั้น)
คุณจะต้องใช้คีย์เหล่านี้ในขั้นตอนต่อไป: การตั้งค่า Arduino
ขั้นตอนที่ 4: เขียนคีย์การเข้าถึงแอปพลิเคชันของคุณ
ตอนนี้ เราต้องการคีย์เพิ่มเติมเพื่อตั้งค่า MQTT บน Raspberry Pi ของเรา
ไปที่แอปพลิเคชันของคุณและเลื่อนลงไปที่ Acces Keys
คุณจะต้องใช้สิ่งนี้ในขั้นตอนแบ็กเอนด์
ขั้นตอนที่ 5: การตั้งค่า Arduino
รหัส Arduino สามารถพบได้บน GitHub ของฉันภายใต้ Arduino (https://github.com/BoussonKarel/CaptureTheBox)
รหัสนี้แบ่งออกเป็นหลายแท็บเพื่อจัดระเบียบ
main.inoThe รหัสหลัก: การประกาศพิน, การตั้งค่า () และลูป ()
0_LoRa.inoรหัสนี้จัดการการสื่อสารโดยใช้ LoRa
โดยจะใส่ข้อมูลของแท็ก LDR, GPS และ RFID ในอาร์เรย์ขนาด 13 ไบต์ แล้วส่งข้อมูลนี้ไปยัง TheThingsNetwork
1_LDR.inoUsing analogRead() จะวัดปริมาณแรงดันไฟฟ้าเหนือตัวต้านทานแบบอาศัยแสง
จากนั้นจะถูกแปลงเป็นเปอร์เซ็นต์ของแสง (0 คือไม่มีอะไร 100 เป็นไฟฉายมือถือ)
2_GPS.inoThis ใช้การสื่อสารแบบอนุกรมโดยใช้ 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: การตั้งค่าแบ็กเอนด์
แบ็กเอนด์สำหรับโปรเจ็กต์นี้สามารถพบได้ใน GitHub ของฉันภายใต้ RPI > Backend(https://github.com/BoussonKarel/CaptureTheBox)
มันทำงานอย่างไร?
- โค้ดจะค้นหาเกมที่ใช้งานอยู่ทุกๆ 10 วินาที หากพบเกมใดเกมหนึ่ง ระบบจะบันทึกโค้ดดังกล่าวไว้ในตัวแปรชื่อ huidigSpel (currentGame)
- หากโหมดถูกตั้งค่าเป็น Serial จะใช้สายเคเบิลระหว่าง Arduino และ Pi. The Pi สำรวจหาค่าของ LDR และ GPS Arduino ตอบสนองด้วยรูปแบบ JSON แท็ก RFID จะถูกส่งทุกครั้งที่มีการนำเสนอ โหมดนี้ใช้เพื่อการพัฒนาเท่านั้นและไม่จำเป็นอีกต่อไป
- หากโหมดถูกตั้งค่าเป็น LoRa ไคลเอ็นต์ MQTT จะถูกสร้างขึ้นซึ่งจะทริกเกอร์การโทรกลับเมื่อใดก็ตามที่ TTN ได้รับข้อมูล LoRa ประกอบด้วยข้อมูล LDR, GPS และ RFID
- ส่วนหน้าสามารถดึงข้อมูลโดยใช้จุดปลาย API ข้อมูลส่วนใหญ่ถูกดึงกลับมาโดยใช้ huidigSpel.id. Data ถูกส่งคืนในรูปแบบ JSON โดยใช้ jsonify()
แก้ไขการตั้งค่าไปที่ secrets.py และกรอกชื่อแอปพลิเคชัน LoRa และรหัสการเข้าถึงของคุณ (ที่คุณจดไว้ก่อนหน้านี้)
ไปที่ 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 (ซึ่งจะเริ่มขึ้นอีกครั้งเมื่อรีบูต) หรือ disable is (หยุดไม่ให้เริ่มทำงานโดยอัตโนมัติ) โดยใช้ systemctl disable
หากคุณต้องการศึกษาบันทึก (เนื่องจากข้อผิดพลาด) คุณสามารถใช้ journalctl -u ctb_service.service
สามารถดูข้อมูลเพิ่มเติมเกี่ยวกับบริการได้ที่นี่:
ขั้นตอนที่ 7: การตั้งค่าส่วนหน้า
ตามปกติแล้ว ส่วนหน้าสามารถพบได้บน GitHub ของฉัน ภายใต้ RPI > Frontend(https://github.com/BoussonKarel/CaptureTheBox)
วางสิ่งนี้ในโฟลเดอร์ /var/html ของ Raspberry Pi ของคุณ
ซึ่งมีหน้าเว็บที่จำเป็นทั้งหมดสำหรับเกม
นอกจากนี้ยังมีสคริปต์เพื่อสื่อสารกับแบ็กเอนด์ (ทั้งแบบเรียลไทม์และการใช้ปลายทาง API)
ขั้นตอนที่ 8: การเพิ่มปลอก
สำหรับเคสนี้ ฉันใช้กล่องเครื่องมือแบบเก่าร่วมกับวัสดุ/เทคนิคต่อไปนี้:
- การพิมพ์ 3 มิติ
- โฟมสำหรับเก็บแบตเตอรี่ให้เข้าที่
- แผ่นไม้รีไซเคิล
- กาวร้อน
- สกรูและน็อต
สิ่งที่คุณทำกับกรณีของคุณคือทางเลือกของคุณ! ฉันจะให้อิสระทางศิลปะแก่คุณ
ฉันได้เพิ่มรูปถ่ายเคสของฉัน (เสร็จแล้ว) เพื่อเป็นแรงบันดาลใจ