INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
Capture The Box is 'n spanbou -speletjie wat jy saam met vriende in jou omgewing kan speel.
Die doel is om die boks vas te vang en so lank as moontlik in u besit te hou terwyl ander spelers probeer om dit van u stoep of voortuin af weg te sluip.
Hierdie speletjie gebruik GPS om die boks en RFID -etikette op te spoor om die spelers te identifiseer. 'N Opsionele LDR kan bygevoeg word om die intensiteit van die puntmatriksweergawe aan te pas by die persentasie lig in die gebied.
Voorrade
Mikrobeheerders en rekenaars
- Framboos Pi
- Arduino (Mega) Ek het 'n Arduino Mega gekies bo 'n normale Uno, want dit het baie meer penne. Dit is nodig omdat ons 'n Dragino LoRa -skild gebruik, wat ons te min digitale penne sou laat as ons 'n UNO gebruik. WENK: Dit is die beste om 'n egte een te gebruik, want die Chinese klone werk nie altyd soos verwag nie.
Sensors en modules
- 4 MAX7219 Dot Matrix Modules Koppel DOUT aan DIN, CS aan CS, CLK aan CLK …
- Ligafhanklike weerstand (10K) + weerstand (10K)
- NEO-7M (of soortgelyke) GPS-module Ek gebruik die VMA430 van Velleman
- RC522 RFID -module+ 'n paar RFID -kentekens/kaarte
Vir die gebruik van LoRa (draadlose tegnologie)
Dragino Lora Shield
Opsionele sensors en modules
'N LCD -skerm Om die IP -adres van die Raspberry Pi te vertoon
Vir die opstel van 'n toets
'N Broodplank en Dupont-kabels (manlik-manlik
Opsioneel (omhulsel)
- Soldeerbout
- 'N Ou gereedskapskas
- Materiaal vir 3D -drukwerk
- 'N Paar dun houtplanke
- Sommige boute en moere (wat in Arduino -gate kan pas). My skroewe het 'n deursnee van ongeveer 3 mm.
'N Geraamde prys kan gevind word in die stembus (stukrekening), hieronder ingesluit.
Stap 1: Stel die Raspberry Pi op
Die Raspberry Pi is die kern van die projek.
Dit sal die frontend, backend en databasis uitvoer. Dit is ook verantwoordelik vir die kommunikasie tussen die backend en die Arduino.
Om die Raspberry Pi te kan gebruik, moet ons die volgende doen:
Deel 1: Installeer Raspbian op 'n Raspberry Pi
'N Handleiding oor hoe u dit kan doen, kan u hier vind:
Deel 2: Installeer Raspbian op 'n Raspberry Pi Stel u tuis WiFi op.
Dit kan gedoen word met behulp van wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf
Herlaai die Pi, en u moet 'n IP -adres sien as u ifconfig invoer
Deel 3: Installeer die webbediener en databasis
As u eers u Pi aan die gang het, is dit die beste om u wagwoord te verander, dit kan met die opdrag passwd.
Sodra dit klaar is, installeer Apache, PHP, MariaDB en PHPMyAdmin.
Apache, PHP sudo apt installeer 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 herlaai apache2.service
PHPMyAdminsudo apt installeer phpmyadmin -y
Moenie vergeet om 'n veilige MySQL -wagwoord in te stel nie.
Deel 4: Die installering van die nodige Python -biblioteke
Vir die backend benodig ons 'n paar biblioteke. Dit kan geïnstalleer word met die pip3 -opdrag.
pip3 installeer mysql-connector-python
pip3 installeer flask-socketio
pip3 installeer fles-kors
pip3 installeer geventpip3 installeer gevent-websocket
pip3 installeer ttn
Stap 2: Stel die elektronika uit
Om hierdie projek te laat werk, moet ons al die elektronika verbind.
Die LoRa -skild kan maklik aangebring word. Pas die penne net met die penne op u Arduino.
Die ander verbindings word in my Fritzing -skema beskryf. Wat hier afgelaai kan word:
Stap 3: Ontwerp die databasis
Om al die spel- en sensorsdata te kan stoor, het ek 'n paar tabelle gemaak:
meting en sensor Die metings van die sensors in die sensortabelle. Dit bevat 'n verwysing na die sensor, die waarde van die meting (bv. koördinate: 51.123456; 3.123456) en 'n opsionele spel -ID (as 'n speletjie aktief was tydens die meting).
speler Die spelers se name en die UID van hul RFID -kenteken. 'N Opsionele veldmoderator word bygevoeg; hierdie persoon kan die spel verander (byvoorbeeld om dit voor die tyd te stop).
Die spelinligting (begin en eindtyd).
spel_has_speler Die verband tussen spel en speler. Dit is waar spelers aan 'n spel toegewys word.
bezit In hierdie tabel word die telling gestoor. Dit bevat die spel -ID, speler -ID, die tyd wat hy die boks gesteel het en die tyd wat hy dit verloor het (wanneer iemand anders dit steel of wanneer die wedstryd eindig). Deur die begintyd van die eindtyd af te trek, kan u die telling bereken wat hy uit die opname gekry het.
U kan die databasis uitvoer op my GitHub (https://github.com/BoussonKarel/CaptureTheBox)
Maak die sql oop in PHPMyAdmin / MySQL Workbench en voer dit uit. Die databasis moet nou ingevoer word.
Stap 4: Stel 'n rekening op TTN op
Stap 1: Teken in vir 'n rekening op TTN en skep 'n toepassing
Teken in vir 'n rekening op TheThingsNetwork, gaan dan na Console> Voeg aansoek by.
Kies 'n naam vir u aansoek en klik op Voeg program by.
Stap 2: Registreer 'n toestel
As u die aansoek ingedien het, gaan na Apparaat registreer.
Kies 'n toestel -ID; dit kan alles wees wat u wil (solank dit 'n slangkas is) en klik op Registreer.
Klik op die ikoon Genereer onder Device EUI, sodat TTN een vir u sal genereer.
Stap 3: Skryf u geloofsbriewe neer
Gaan nou na u toestel en klik op die kode -ikoon langs Device EUI, App EUI en App -sleutel. Dit moet nou as 'n verskeidenheid grepe verskyn.
Klik op die skakelaar -knoppie voordat u kopieer, en maak seker dat u Dev EUI en App EUI LSB EERSTE is.
Jou App -sleutel moet EERSTE MSB bly (moenie dit verander nie).
U benodig hierdie sleutels in die volgende stap: die opstel van die Arduino.
Stap 4: Skryf u toepassingsaccessleutel neer
Nou benodig ons nog 'n sleutel om MQTT op ons Raspberry Pi op te stel.
Gaan na u toepassing en blaai af na Toegangssleutels.
U benodig dit in die Backend -stap.
Stap 5: Die opstel van die Arduino
Arduino -kode kan ook gevind word op my GitHub, onder Arduino (https://github.com/BoussonKarel/CaptureTheBox)
Hierdie kode is verdeel in verskeie oortjies om dit georganiseerd te hou.
main.ino Die hoofkode: penverklarings, opstelling () en lus ()
0_LoRa.ino Hierdie kode hanteer die kommunikasie met behulp van LoRa.
Dit plaas die data van die LDR-, GPS- en RFID -etikette in 'n skikking van 13 grepe en stuur dit na TheThingsNetwork.
1_LDR.ino Deur analogRead () te meet, meet dit die hoeveelheid spanning oor die ligafhanklike weerstand.
Dit word dan omgeskakel na 'n persentasie lig (0 is niks, 100 is 'n selfoonflitslig).
2_GPS.ino Dit gebruik seriële kommunikasie met behulp van TX1 en RX1 (Serial1).
Dit gebruik NMEA -boodskappe (die $ GPRMC -boodskappe om presies te wees) om die breedtegraad en lengtegraad van die boks te vind.
3_RFID.ino Deur die MFRC522 -biblioteek te gebruik, soek hierdie kode na nuwe RFID -etikette.
4_DotMatrix.ino Hierdie kode word gebruik om die puntmatriksweergawe te initialiseer en in te stel. Dit bevat definisies vir die laai -animasie, ens …
Stel dit op
Voordat u hierdie kode na u Arduino kan oplaai, moet u 'n paar biblioteke installeer.
Die Arduino-LMIC-biblioteek deur matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)
Die MFRC522 -biblioteek vir die RFID -leser (https://github.com/miguelbalboa/rfid)
Gaan nou na main.ino en verander die DEVEUI, APPEUI en APPKEY na die een wat u die laaste stap gekopieer het.
Stap 6: Die opstel van die agterkant
Die backend vir hierdie projek kan gevind word op my GitHub onder RPI> Backend (https://github.com/BoussonKarel/CaptureTheBox).
Hoe werk dit?
- Elke 10 sekondes soek die kode na 'n aktiewe speletjie. As een gevind word, word dit gestoor in 'n veranderlike genaamd huidigSpel (currentGame)
- As die modus op Serial is ingestel, word 'n kabel tussen die Arduino en die Pi gebruik. Die Pi -peilings vir die waardes van die LDR en GPS. Die Arduino reageer met 'n JSON -formaat. RFID -etikette word gestuur wanneer dit aangebied word. Hierdie modus is uitsluitlik vir ontwikkelingsdoeleindes gebruik en is nie meer nodig nie.
- As die modus op LoRa ingestel is, word 'n MQTT -kliënt geskep wat 'n terugbel veroorsaak wanneer LoRa -data deur TTN ontvang word. Dit bevat LDR-, GPS- en RFID -data.
- Die voorkant kan data ophaal met behulp van die API -eindpunte. Die meeste data word met behulp van huidigSpel.id opgehaal. Data word in JSON -formaat teruggestuur met behulp van jsonify ()
Pas die instellings aan Gaan na secrets.py en vul die naam van u LoRa -toepassing en u toegangsleutel in (u het dit vroeër neergeskryf).
Gaan na config.py en vul u databasisbewyse in (soos wagwoord, gebruiker …)
Probeer om app.py uit te voer, sodra u bevestig het dat dit werk, kan ons dit as 'n diens gebruik. Dit sal die kode outomaties op die agtergrond begin as u u pi opstart.
Om dit te doen, kopieer ctb_service.service na /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service
Aktiveer dit nou met behulp van systemctl enable ctb_service.service
As u 'n paar veranderinge aan die kode moet aanbring, kan u dit maklik stop met systemctl stop (dit begin weer by herlaai) of deaktiveer is (stop met outomaties begin) met systemctl deaktiveer.
As u die logboeke moet raadpleeg (weens foute), kan u journalctl -u ctb_service.service gebruik.
Meer inligting oor dienste kan hier gevind word:
Stap 7: Die opstel van die frontend
Soos gewoonlik kan die frontend op my GitHub gevind word, onder RPI> Frontend (https://github.com/BoussonKarel/CaptureTheBox)
Plak dit in die /var /html -lêergids van u Raspberry Pi.
Dit bevat al die nodige webblaaie vir die spel.
Dit bevat ook 'n script om met die backend te kommunikeer (beide intyds en met behulp van die API -eindpunte).
Stap 8: Voeg 'n omhulsel by
Vir die saak het ek 'n ou gereedskapskas gebruik, tesame met die volgende materiale/tegnieke:
- 3D druk
- Skuim om die battery op sy plek te hou
- Herwinde houtplanke
- Warm gom
- Skroewe en moere
Wat u met u saak doen, is u keuse! Ek gaan jou artistieke vryheid gee.
Vir inspirasie het ek 'n paar foto's van my (afgewerkte) kissie bygevoeg.