จับกล่อง: 8 ขั้นตอน
จับกล่อง: 8 ขั้นตอน
Anonim
จับกล่อง
จับกล่อง
จับกล่อง
จับกล่อง

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)

มันทำงานอย่างไร?

  1. โค้ดจะค้นหาเกมที่ใช้งานอยู่ทุกๆ 10 วินาที หากพบเกมใดเกมหนึ่ง ระบบจะบันทึกโค้ดดังกล่าวไว้ในตัวแปรชื่อ huidigSpel (currentGame)
  2. หากโหมดถูกตั้งค่าเป็น Serial จะใช้สายเคเบิลระหว่าง Arduino และ Pi. The Pi สำรวจหาค่าของ LDR และ GPS Arduino ตอบสนองด้วยรูปแบบ JSON แท็ก RFID จะถูกส่งทุกครั้งที่มีการนำเสนอ โหมดนี้ใช้เพื่อการพัฒนาเท่านั้นและไม่จำเป็นอีกต่อไป
  3. หากโหมดถูกตั้งค่าเป็น LoRa ไคลเอ็นต์ MQTT จะถูกสร้างขึ้นซึ่งจะทริกเกอร์การโทรกลับเมื่อใดก็ตามที่ TTN ได้รับข้อมูล LoRa ประกอบด้วยข้อมูล LDR, GPS และ RFID
  4. ส่วนหน้าสามารถดึงข้อมูลโดยใช้จุดปลาย 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 มิติ
  • โฟมสำหรับเก็บแบตเตอรี่ให้เข้าที่
  • แผ่นไม้รีไซเคิล
  • กาวร้อน
  • สกรูและน็อต

สิ่งที่คุณทำกับกรณีของคุณคือทางเลือกของคุณ! ฉันจะให้อิสระทางศิลปะแก่คุณ

ฉันได้เพิ่มรูปถ่ายเคสของฉัน (เสร็จแล้ว) เพื่อเป็นแรงบันดาลใจ