Vang die boks: 8 stappe
Vang die boks: 8 stappe
Anonim
Vang die boks
Vang die boks
Vang die boks
Vang die boks

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

Die uitleg van die elektronika
Die uitleg van die elektronika
Die uitleg van die elektronika
Die uitleg van die elektronika

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

Ontwerp van die databasis
Ontwerp van 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?

  1. Elke 10 sekondes soek die kode na 'n aktiewe speletjie. As een gevind word, word dit gestoor in 'n veranderlike genaamd huidigSpel (currentGame)
  2. 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.
  3. 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.
  4. 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

Voeg 'n omhulsel by
Voeg 'n omhulsel by
Voeg 'n omhulsel by
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.