Capture the Box: 8 stappen
Capture the Box: 8 stappen
Anonim
Leg de doos vast
Leg de doos vast
Leg de doos vast
Leg de doos vast

Capture The Box is een teambuildingspel dat je kunt spelen met vrienden in je buurt.

Het doel is om de doos te veroveren en zo lang mogelijk in je bezit te houden, terwijl andere spelers proberen hem weg te sluipen van je veranda of voortuin.

Deze game gebruikt GPS om de doos te lokaliseren en RFID-tags om de spelers te identificeren. Er kan een optionele LDR worden toegevoegd om de intensiteit van het dot-matrixscherm af te stemmen op het percentage licht in het gebied.

Benodigdheden

Microcontrollers en computers

  • Raspberry Pi
  • Arduino (Mega)Ik heb gekozen voor een Arduino Mega boven een normale Uno, omdat deze veel meer pinnen heeft. Dit is nodig omdat we een Dragino LoRa-schild gebruiken, waardoor we te weinig digitale pinnen zouden hebben bij gebruik van een UNO. TIP: Het is het beste om een echte te gebruiken, omdat de Chinese klonen niet altijd werken zoals verwacht.

Sensoren en modules

  • 4 MAX7219 Dot Matrix-modulesVerbind DOUT met DIN, CS met CS, CLK met CLK…
  • Lichtafhankelijke Weerstand (10K) + Weerstand (10K)
  • NEO-7M (of vergelijkbare) GPS-moduleIk gebruik de VMA430 van Velleman
  • RC522 RFID-module + enkele RFID-badges/kaarten

Voor gebruik van LoRa (draadloze technologie)

Dragino Lora Shield

Optionele sensoren en modules

Een LCD-displayOm het IP-adres van de Raspberry Pi weer te geven

Voor het maken van een testopstelling

Een breadboard en Dupont-kabels (mannelijk-mannelijk)

Optioneel (behuizing)

  • Soldeerbout
  • Een oude gereedschapskoffer
  • Materialen voor 3D-printen
  • Enkele dunne houten planken
  • Sommige bouten en moeren (die in Arduino-gaten passen). Mijn schroeven hebben een diameter van ongeveer 3 mm.

Een geschatte prijs is te vinden in de BOM (Bill of Materials), die hieronder is opgenomen.

Stap 1: De Raspberry Pi instellen

De Raspberry Pi is het hart van het project.

Het zal de frontend, backend en database uitvoeren. Het zal ook verantwoordelijk zijn voor de communicatie tussen de backend en de Arduino.

Om de Raspberry Pi te kunnen gebruiken, moeten we het volgende doen:

Deel 1: Installeer Raspbian op een Raspberry Pi

Een tutorial over hoe dat te doen is hier te vinden:https://thepi.io/how-to-install-raspbian-on-the-ra…

Deel 2: Installeer Raspbian op een Raspberry PiJe wifi thuis instellen.

Dit kan worden gedaan met behulp van wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Start de Pi opnieuw op en je zou een IP-adres moeten zien bij het typen van ifconfig

Deel 3: Installeer de webserver en database

Als je Pi eenmaal in gebruik is, kun je het beste je wachtwoord wijzigen. Dit kan met het commando passwd.

Zodra dat is gebeurd, ga je gang en installeer je Apache, PHP, MariaDB en PHPMyAdmin.

Apache, PHP sudo apt install 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 herstart apache2.service

PHPMyAdminsudo apt install phpmyadmin -y

Vergeet niet een veilig MySQL-wachtwoord in te stellen.

Deel 4: De benodigde Python-bibliotheken installeren

Voor de backend hebben we enkele bibliotheken nodig. Deze kunnen worden geïnstalleerd met behulp van het pip3-commando.

pip3 installeer mysql-connector-python

pip3 install flask-socketio

pip3 installeer flask-cors

pip3 install geventpip3 install gevent-websocket

pip3 installeer ttn

Stap 2: De elektronica neerleggen

De elektronica neerleggen
De elektronica neerleggen
De elektronica neerleggen
De elektronica neerleggen

Om dit project te laten werken, moeten we alle elektronica aansluiten.

Het LoRa-schild kan eenvoudig worden geplaatst. Lijn de pinnen uit met de pinnen op uw Arduino.

De andere verbindingen worden beschreven in mijn Fritzing-schema. Die hier te downloaden is:

Stap 3: De database ontwerpen

De database ontwerpen
De database ontwerpen

Om alle game- en sensorgegevens te kunnen opslaan, heb ik een paar tabellen gemaakt:

meting en sensor De metingen van de sensoren, te vinden in de sensortabellen. Het bevat een verwijzing naar de sensor, de waarde van de meting (bijv. coördinaten: 51.123456; 3.123456) en een optionele game-ID (als er een game actief was tijdens de meting).

spelerDe spelersnamen en de UID van hun RFID-badge. Er is een optionele veldmoderator toegevoegd, deze persoon kan het spel aanpassen (bijvoorbeeld voortijdig stoppen).

spelDe spelinfo (start- en eindtijd).

spel_has_spelerDe relatie tussen spel en speler. Hier worden spelers aan een spel toegewezen.

bezitIn deze tabel wordt de score bewaard. Het bevat het spel-ID, speler-ID, het tijdstip waarop hij de doos heeft gestolen en het tijdstip waarop hij het verloor (wanneer iemand anders het steelt of wanneer het spel eindigt). Door de begintijd van de eindtijd af te trekken, kun je de score berekenen die hij van die vangst heeft gekregen.

Een export van de database is te vinden op mijn GitHub (https://github.com/BoussonKarel/CaptureTheBox)

Open de sql in PHPMyAdmin / MySQL Workbench en voer het uit. De database zou nu geïmporteerd moeten worden.

Stap 4: Een account aanmaken op TTN

Stap 1: Maak een account aan op TTN en maak een applicatie aan

Meld u aan voor een account op TheThingsNetwork en ga vervolgens naar Console > Toepassing toevoegen.

Kies een naam voor uw toepassing en klik op Toepassing toevoegen.

Stap 2: Registreer een apparaat

Wanneer u uw aanvraag heeft gedaan, gaat u naar Apparaat registreren.

Kies een apparaat-ID, dit kan wat je maar wilt (zolang het een snake case is) en klik op Registreren.

Klik op het Generate icoon onder Device EUI, zodat TTN er een voor je zal genereren.

Stap 3: Uw inloggegevens opschrijven

Ga nu naar uw apparaat en klik op het codepictogram naast Apparaat-EUI, App-EUI en App-sleutel. Het zou nu moeten verschijnen als een array van bytes.

Klik voordat u kopieert op de knop Switch en zorg ervoor dat uw Dev EUI en App EUI EERST LSB zijn.

Uw app-sleutel moet EERST MSB blijven (verander dat niet).

Je hebt deze sleutels nodig in de volgende stap: De Arduino instellen.

Stap 4: Uw Application Access-sleutel opschrijven

Nu hebben we nog een sleutel nodig om MQTT op onze Raspberry Pi in te stellen.

Ga naar uw applicatie en scrol omlaag naar Toegangstoetsen.

Je hebt dit nodig in de stap Backend.

Stap 5: De Arduino instellen

Arduino-code is ook te vinden op mijn GitHub, onder Arduino (https://github.com/BoussonKarel/CaptureTheBox)

Deze code is opgesplitst in meerdere tabbladen om het overzichtelijk te houden.

main.inoDe hoofdcode: pin-declaraties, setup() en loop()

0_LoRa.inoDeze code regelt de communicatie via LoRa.

Het zet de gegevens van de LDR-, GPS- en RFID-tags in een array van 13 bytes en stuurt deze naar TheThingsNetwork.

1_LDR.inoMet analogRead() meet het de hoeveelheid spanning over de lichtafhankelijke weerstand.

Dit wordt vervolgens omgezet in een percentage licht (0 is niets, 100 is een zaklamp voor een mobiele telefoon).

2_GPS.inoDit maakt gebruik van seriële communicatie via TX1 en RX1 (Serial1).

Het gebruikt NMEA-berichten (de $GPRMC-berichten om precies te zijn) om de breedte- en lengtegraad van de box te vinden.

3_RFID.inoMet behulp van de MFRC522-bibliotheek scant deze code op nieuwe RFID-tags. Wanneer er een aanwezig is, wordt deze opgeslagen als RFID_lastUID.

4_DotMatrix.inoDeze code wordt gebruikt om de dot-matrixweergave te initialiseren en in te stellen. Het bevat definities voor de laadanimatie enz …

Het opzetten

Voordat je deze code naar je Arduino kunt uploaden, moet je een paar bibliotheken installeren.

De Arduino-LMIC-bibliotheek van matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)

De MFRC522-bibliotheek voor de RFID-lezer (https://github.com/miguelbalboa/rfid)

Ga nu naar main.ino en verander de DEVEUI, APPEUI en APPKEY naar degene die je de vorige stap hebt gekopieerd.

Stap 6: de backend instellen

De backend voor dit project is te vinden op mijn GitHub, onder RPI > Backend(https://github.com/BoussonKarel/CaptureTheBox).

Hoe werkt het?

  1. Elke 10 seconden zoekt de code naar een actief spel. Als er een wordt gevonden, wordt deze opgeslagen in een variabele genaamd huidigSpel (currentGame)
  2. Als de modus is ingesteld op Serieel, wordt er een kabel gebruikt tussen de Arduino en de Pi. De Pi peilt naar de waarden van de LDR en GPS. De Arduino reageert met een JSON-formaat. RFID-tags worden verzonden wanneer ze worden aangeboden. Deze modus werd alleen gebruikt voor ontwikkelingsdoeleinden en is niet echt meer nodig.
  3. Als de modus is ingesteld op LoRa, wordt een MQTT-client gemaakt die een callback activeert wanneer LoRa-gegevens worden ontvangen door TTN. Deze bevat LDR-, GPS- en RFID-gegevens.
  4. De frontend kan gegevens ophalen met behulp van de API-eindpunten. De meeste gegevens worden opgehaald met huidigSpel.id. Gegevens worden geretourneerd in JSON-indeling met jsonify()

Pas de instellingen aanGa naar secrets.py en vul de naam van je LoRa applicatie en je Acces Key in (je hebt het eerder opgeschreven).

Ga naar config.py en vul uw databasegegevens in (zoals wachtwoord, gebruiker…)

Het instellen als een service Probeer app.py uit te voeren, zodra je hebt bevestigd dat dit werkt, kunnen we het als een service gebruiken. Dit zal automatisch de code op de achtergrond starten wanneer je je pi opstart.

Kopieer hiervoor ctb_service.service naar /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service

Schakel het nu in met systemctl enable ctb_service.service

Als u enkele wijzigingen in de code moet aanbrengen, kunt u deze eenvoudig stoppen met systemctl stop (dit start opnieuw op bij opnieuw opstarten) of uitschakelen is (stoppen met automatisch opstarten) met systemctl disable.

Als u de logs moet raadplegen (vanwege fouten), kunt u journalctl -u ctb_service.service gebruiken.

Meer informatie over diensten vindt u hier:

Stap 7: de frontend instellen

Zoals gewoonlijk is de frontend te vinden op mijn GitHub, onder RPI > Frontend(https://github.com/BoussonKarel/CaptureTheBox)

Plak deze in de /var/html map van je Raspberry Pi.

Dit bevat alle benodigde webpagina's voor het spel.

Het bevat ook een script om te communiceren met de backend (zowel realtime als met behulp van de API-eindpunten).

Stap 8: Een behuizing toevoegen

Een behuizing toevoegen
Een behuizing toevoegen
Een behuizing toevoegen
Een behuizing toevoegen

Voor de koffer heb ik een oude gereedschapskoffer gebruikt, samen met de volgende materialen/technieken:

  • 3d printen
  • Schuim om de batterij op zijn plaats te houden
  • Gerecycleerde houten planken
  • Hete lijm
  • Schroeven en moeren

Wat u met uw zaak doet, is uw keuze! Ik ga je artistieke vrijheid geven.

Ter inspiratie heb ik wat foto's van mijn (afgemaakte) koffer toegevoegd.