Fånga lådan: 8 steg
Fånga lådan: 8 steg
Anonim
Fånga rutan
Fånga rutan
Fånga rutan
Fånga rutan

Capture The Box är ett teambuilding -spel som du kan spela med vänner i ditt grannskap.

Målet är att fånga lådan och hålla den i din ägo så länge som möjligt medan andra spelare försöker gå och smyga bort den från din veranda eller trädgård.

Detta spel använder GPS för att lokalisera lådan och RFID -taggar för att identifiera spelarna. En valfri LDR kan läggas till för att matcha intensiteten hos punktmatrisdisplayen med ljusprocenten i området.

Tillbehör

Mikrokontroller och datorer

  • Raspberry Pi
  • Arduino (Mega) Jag valde en Arduino Mega framför en vanlig Uno, eftersom den har mycket fler pins. Detta är nödvändigt eftersom vi använder en Dragino LoRa -sköld, vilket skulle ge oss för lite digitala stift när vi använder en UNO. TIPS: Det är bäst att använda en äkta, eftersom de kinesiska klonerna inte alltid fungerar som förväntat.

Sensorer och moduler

  • 4 MAX7219 Dot Matrix Modules Anslut DOUT till DIN, CS till CS, CLK till CLK …
  • Ljusberoende motstånd (10K) + motstånd (10K)
  • NEO-7M (eller liknande) GPS-modul Jag använder VMA430 från Velleman
  • RC522 RFID -modul+ några RFID -märken/kort

För användning av LoRa (trådlös teknik)

Dragino Lora Shield

Valfria sensorer och moduler

En LCD -skärm För att visa IP -adressen för Raspberry Pi

För att göra en testinställning

En brödbräda och Dupont-kablar (man-hane

Valfritt (hölje)

  • Lödkolv
  • Ett gammalt verktygsfodral
  • Material för 3D -utskrift
  • Några tunna träplankor
  • Några bultar och muttrar (som passar i Arduino -hål). Mina skruvar har en diameter på cirka 3 mm.

Ett beräknat pris finns i sammanträdet (materiallistan), som ingår nedan.

Steg 1: Konfigurera Raspberry Pi

Raspberry Pi är hjärtat i projektet.

Det kommer att köra frontend, backend och databas. Det kommer också att vara ansvarigt för kommunikationen mellan backend och Arduino.

För att vi ska kunna använda Raspberry Pi måste vi göra följande:

Del 1: Installera Raspbian på en Raspberry Pi

En handledning om hur du gör det hittar du här:

Del 2: Installera Raspbian på en Raspberry Pi Konfigurera ditt hem WiFi.

Detta kan göras med hjälp av wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Starta om Pi och du bör se en IP -adress när du skriver ifconfig

Del 3: Installera webbservern och databasen

När du har din Pi igång är det bäst att ändra ditt lösenord. Detta kan göras med kommandot passwd.

När det är klart, fortsätt och installera Apache, PHP, MariaDB och PHPMyAdmin.

Apache, PHP sudo apt installera apache2 -y sudo apt installera php libapache2 -mod -php -y

MariaDB sudo apt install mariadb-server mariadb-client -y sudo apt install php-mysql -y sudo systemctl starta om apache2.service

PHPMyAdminsudo apt install phpmyadmin -y

Glöm inte att ställa in ett säkert MySQL -lösenord.

Del 4: Installera nödvändiga Python -bibliotek

För backend behöver vi några bibliotek. Dessa kan installeras med pip3 -kommandot.

pip3 installera mysql-connector-python

pip3 installera flask-socketio

pip3 installera kolvkors

pip3 installera geventpip3 installera gevent-websocket

pip3 installera ttn

Steg 2: Lägg ut elektroniken

Att lägga ut elektroniken
Att lägga ut elektroniken
Att lägga ut elektroniken
Att lägga ut elektroniken

För att få detta projekt att fungera måste vi ansluta all elektronik.

LoRa -skölden kan enkelt sättas på plats. Rikta bara in stiften med stiften på din Arduino.

De andra anslutningarna beskrivs i mitt Fritzing -schema. Som kan laddas ner här:

Steg 3: Designa databasen

Designa databasen
Designa databasen

För att kunna lagra alla spel- och sensordata gjorde jag några tabeller:

mätning och sensor Mätningarna från sensorerna, som finns i sensortabellerna. Den innehåller en referens till sensorn, mätvärdet (t.ex. koordinater: 51.123456; 3.123456) och ett valfritt spel -id (om ett spel var aktivt under mätningen).

spelare Spelarens namn och UID för deras RFID -märke. En valfri fältmoderator har lagts till, den här personen kan ändra spelet (t.ex. stoppa det före tid).

spelInformation om spel (start och sluttid).

spel_has_speler Förhållandet mellan spel och spelare. Det är här spelare tilldelas ett spel.

bezit I denna tabell sparas poängen. Den innehåller spel -id, spelar -id, tiden han stal rutan och tiden han förlorade den (när någon annan stjäl den eller när spelet slutar). Genom att subtrahera starttiden från sluttiden kan du beräkna poängen han fick från den inspelningen.

En export av databasen finns på min GitHub (https://github.com/BoussonKarel/CaptureTheBox)

Öppna sql i PHPMyAdmin / MySQL Workbench och kör den. Databasen ska nu importeras.

Steg 4: Skapa ett konto på TTN

Steg 1: Registrera ett konto på TTN och skapa ett program

Registrera dig för ett konto på TheThingsNetwork och gå sedan till Konsol> Lägg till program.

Välj ett namn för din applikation och klicka på Lägg till program.

Steg 2: Registrera en enhet

När du har gjort din ansökan går du till Registrera enhet.

Välj ett enhets -ID, det kan vara vad du vill (så länge det är ormfodral) och klicka på Registrera.

Klicka på Generera -ikonen under Device EUI, så TTN kommer att generera en åt dig.

Steg 3: Skriv ner dina referenser

Gå nu till din enhet och klicka på kodikonen bredvid Device EUI, App EUI och App key. Det ska nu visas som en uppsättning byte.

Innan du kopierar, klicka på knappen Växla och se till att din Dev EUI och App EUI är LSB FIRST.

Din appnyckel ska vara MSB FÖRST (ändra det inte).

Du behöver dessa nycklar i nästa steg: Konfigurera Arduino.

Steg 4: Skriv ner din Application Acces -nyckel

Nu behöver vi en nyckel till för att konfigurera MQTT på vår Raspberry Pi.

Gå till din applikation och rulla ner till Acces Keys.

Du behöver detta i backend -steget.

Steg 5: Konfigurera Arduino

Arduino -kod finns också på min GitHub, under Arduino (https://github.com/BoussonKarel/CaptureTheBox)

Denna kod är uppdelad i flera flikar för att hålla den organiserad.

main.ino Huvudkoden: pin -deklarationer, setup () och loop ()

0_LoRa.ino Denna kod hanterar kommunikationen med LoRa.

Den lägger in data från LDR-, GPS- och RFID -taggarna i en uppsättning av 13 byte och skickar detta över till TheThingsNetwork.

1_LDR.ino Med analogRead () mäter den mängden spänning över den ljusberoende motståndet.

Detta konverteras sedan till en procentandel ljus (0 är ingenting, 100 är en mobiltelefon ficklampa).

2_GPS.inoDetta använder seriell kommunikation med TX1 och RX1 (Serial1).

Den använder NMEA -meddelanden ($ GPRMC -meddelandena för att vara exakt) för att hitta rutans latitud och longitud.

3_RFID.ino Med hjälp av biblioteket MFRC522 söker den här koden efter nya RFID -taggar. När en är närvarande lagras den som RFID_lastUID.

4_DotMatrix.inoDenna kod används för att initiera och ställa in punktmatrisvisning. Den innehåller definitioner för laddningsanimationen etc …

Ställer in det

Innan du kan ladda upp den här koden till din Arduino måste du installera några bibliotek.

Arduino-LMIC-biblioteket av matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)

MFRC522 -biblioteket för RFID -läsaren (https://github.com/miguelbalboa/rfid)

Gå nu till main.ino och ändra DEVEUI, APPEUI och APPKEY till de du kopierade förra steget.

Steg 6: Konfigurera backend

Backend för detta projekt finns på min GitHub, under RPI> Backend (https://github.com/BoussonKarel/CaptureTheBox).

Hur fungerar det?

  1. Var 10: e sekund söker koden efter ett aktivt spel. Om det hittas sparas det i en variabel som heter huidigSpel (currentGame)
  2. Om läget är inställt på Serial används en kabel mellan Arduino och Pi. Pi undersöker värdena för LDR och GPS. Arduino svarar med ett JSON -format. RFID -taggar skickas när de presenteras. Detta läge användes enbart för utvecklingsändamål och är egentligen inte längre nödvändigt.
  3. Om läget är inställt på LoRa skapas en MQTT -klient som utlöser ett återuppringning när LoRa -data tas emot av TTN. Denna innehåller LDR-, GPS- och RFID -data.
  4. Frontänden kan hämta data med API -slutpunkterna. De flesta data hämtas med huidigSpel.id. Data returneras i JSON -format med jsonify ()

Ändra inställningarna Gå till secrets.py och fyll i namnet på din LoRa -applikation och din Acces Key (du skrev ner tidigare).

Gå till config.py och fyll i dina databasuppgifter (t.ex. lösenord, användare …)

Installera den som en tjänst Försök att köra app.py, när du har bekräftat att detta fungerar kan vi använda det som en tjänst. Detta startar automatiskt koden i bakgrunden när du startar upp din pi.

För att göra detta, kopiera ctb_service.service till /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service

Aktivera det nu med systemctl enable ctb_service.service

Om du behöver göra några ändringar i koden kan du enkelt stoppa den med systemctl stop (detta startar igen vid omstart) eller inaktivera är (stoppa den från att starta automatiskt) med systemctl disable.

Om du behöver läsa loggarna (på grund av fel) kan du använda journalctl -u ctb_service.service.

Mer information om tjänster hittar du här: https://www.raspberrypi.org/documentation/linux/us..

Steg 7: Konfigurera frontend

Som vanligt finns frontend på min GitHub, under RPI> Frontend (https://github.com/BoussonKarel/CaptureTheBox)

Klistra in detta i mappen /var /html på din Raspberry Pi.

Detta innehåller alla nödvändiga webbsidor för spelet.

Det innehåller också ett skript för att kommunicera med backend (både realtid och med API -slutpunkter).

Steg 8: Lägga till ett hölje

Lägga till ett hölje
Lägga till ett hölje
Lägga till ett hölje
Lägga till ett hölje

I fallet använde jag ett gammalt verktygsfodral, tillsammans med följande material/tekniker:

  • 3d-utskrivning
  • Skum för att hålla batteriet på plats
  • Återvunna träplankor
  • Varmt lim
  • Skruvar och muttrar

Vad du gör med ditt fall är ditt val! Jag ska ge dig konstnärlig frihet.

För inspiration har jag lagt till några bilder på mitt (färdiga) fodral.