Innholdsfortegnelse:

Fang boksen: 8 trinn
Fang boksen: 8 trinn

Video: Fang boksen: 8 trinn

Video: Fang boksen: 8 trinn
Video: PERCH PRO 8 - Эпизод 1 (русские субтитры) 2024, November
Anonim
Fang boksen
Fang boksen
Fang boksen
Fang boksen

Capture The Box er et teambuilding -spill du kan spille med venner i nabolaget ditt.

Målet er å fange boksen og beholde den i din besittelse så lenge som mulig mens andre spillere prøver å snike den bort fra verandaen eller forhagen.

Dette spillet bruker GPS til å finne boksen og RFID -tagger for å identifisere spillerne. En valgfri LDR kan legges til for å matche intensiteten til prikkmatrisedisplayet med lysprosenten i området.

Rekvisita

Mikrokontrollere og datamaskiner

  • Bringebær Pi
  • Arduino (Mega) Jeg valgte en Arduino Mega fremfor en vanlig Uno, fordi den har mange flere pins. Dette er nødvendig fordi vi bruker et Dragino LoRa -skjold, noe som vil etterlate oss med for lite digitale pins når vi bruker en UNO. TIPS: Det er best å bruke en ekte, fordi de kinesiske klonene ikke alltid fungerer som forventet.

Sensorer og moduler

  • 4 MAX7219 Dot Matrix Modules Koble DOUT til DIN, CS til CS, CLK til CLK …
  • Lysavhengig motstand (10K) + motstand (10K)
  • NEO-7M (eller lignende) GPS-modul Jeg bruker VMA430 fra Velleman
  • RC522 RFID -modul+ noen RFID -merker/kort

For bruk av LoRa (trådløs teknologi)

Dragino Lora Shield

Valgfrie sensorer og moduler

En LCD -skjerm For å vise IP -adressen til Raspberry Pi

For å lage et testoppsett

Et brødbrett og Dupont-kabler (hann-mann

Valgfritt (foringsrør)

  • Loddejern
  • En gammel verktøykasse
  • Materialer for 3D -utskrift
  • Noen tynne treplanker
  • Noen bolter og muttere (som kan passe i Arduino -hull). Mine skruer har en diameter på rundt 3 mm.

En estimert pris finnes i styklisten (Materialliste), inkludert nedenfor.

Trinn 1: Konfigurere Raspberry Pi

Raspberry Pi er hjertet i prosjektet.

Det vil kjøre frontend, backend og database. Det vil også være ansvarlig for kommunikasjonen mellom backend og Arduino.

For at vi skal kunne bruke Raspberry Pi, må vi gjøre følgende:

Del 1: Installer Raspbian på en Raspberry Pi

En opplæring om hvordan du gjør det finner du her:

Del 2: Installer Raspbian på en Raspberry Pi Sette opp WiFi hjemme.

Dette kan gjøres ved å bruke wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Start Pi på nytt, og du bør se en IP -adresse når du skriver inn ifconfig

Del 3: Installer webserveren og databasen

Når du har Pi -en din i gang, er det best å endre passordet ditt. Dette kan gjøres med kommandoen passwd.

Når det er gjort, fortsett og installer Apache, PHP, MariaDB og 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 restart apache2.service

PHPMyAdminsudo apt install phpmyadmin -y

Ikke glem å angi et sikkert MySQL -passord.

Del 4: Installere de nødvendige Python -bibliotekene

For backend trenger vi noen biblioteker. Disse kan installeres ved hjelp av pip3 -kommandoen.

pip3 installer mysql-connector-python

pip3 installere flask-socketio

pip3 installere kolbe-kors

pip3 install geventpip3 install gevent-websocket

pip3 installer ttn

Trinn 2: Legge ut elektronikken

Legge ut elektronikken
Legge ut elektronikken
Legge ut elektronikken
Legge ut elektronikken

For å få dette prosjektet til å fungere, må vi koble til all elektronikken.

LoRa -skjoldet kan enkelt settes på plass. Bare juster pinnene med pinnene på Arduino.

De andre forbindelsene er beskrevet i Fritzing -opplegget mitt. Som kan lastes ned her:

Trinn 3: Designe databasen

Design av databasen
Design av databasen

For å kunne lagre alle spill- og sensordata, laget jeg noen tabeller:

måling og sensor Målingene fra sensorene, som finnes i sensortabellene. Den inneholder en referanse til sensoren, verdien av målingen (f.eks. koordinater: 51.123456; 3.123456) og en valgfri spill -ID (hvis et spill var aktivt under målingen).

spillerSpillerens navn og UID for RFID -merket. En valgfri feltmoderator er lagt til, denne personen kan endre spillet (f.eks. Stoppe det før tid).

spillInformasjonen om spillet (start og slutt).

spel_has_speler Forholdet mellom spill og spiller. Det er her spillere blir tildelt et spill.

bezitI denne tabellen lagres poengsummen. Den inneholder spill -id, spiller -ID, tidspunktet han stjal esken og tiden han mistet den (når noen andre stjeler den eller når spillet avsluttes). Ved å trekke starttiden fra sluttiden, kan du beregne poengsummen han fikk fra den fangsten.

En eksport av databasen finner du på min GitHub (https://github.com/BoussonKarel/CaptureTheBox)

Åpne sql i PHPMyAdmin / MySQL Workbench og kjør den. Databasen skal nå importeres.

Trinn 4: Opprette en konto på TTN

Trinn 1: Registrer deg for en konto på TTN og opprett et program

Registrer deg for en konto på TheThingsNetwork, og gå til Konsoll> Legg til applikasjon.

Velg et navn for appen din, og klikk på Legg til applikasjon.

Trinn 2: Registrer en enhet

Når du har søkt, går du til Registrer enhet.

Velg en enhets -ID, dette kan være hva du vil (så lenge det er slangekasse) og klikk Registrer.

Klikk på Generer -ikonet under Device EUI, så TTN vil generere et for deg.

Trinn 3: Skriv ned legitimasjonen din

Gå nå til enheten din og klikk på kodeikonet ved siden av enhet EUI, app EUI og appnøkkel. Det skal nå vises som en rekke byte.

Før du kopierer, klikker du på Switch -knappen og kontrollerer at Dev EUI og App EUI er LSB FIRST.

Appnøkkelen din bør forbli MSB FØRST (ikke endre det).

Du trenger disse nøklene i neste trinn: Sette opp Arduino.

Trinn 4: Skriv ned applikasjonstilgangsnøkkelen

Nå trenger vi en nøkkel til for å sette opp MQTT på Raspberry Pi.

Gå til applikasjonen din og rull ned til tilgangsnøkler.

Du trenger dette i Backend -trinnet.

Trinn 5: Sette opp Arduino

Arduino -kode kan også finnes på min GitHub, under Arduino (https://github.com/BoussonKarel/CaptureTheBox)

Denne koden er delt inn i flere faner for å holde den organisert.

main.inoHovedkoden: pin -deklarasjoner, setup () og loop ()

0_LoRa.ino Denne koden håndterer kommunikasjonen ved hjelp av LoRa.

Den legger dataene til LDR-, GPS- og RFID -taggene i en matrise på 13 byte og sender denne over til TheThingsNetwork.

1_LDR.ino Ved å bruke analogRead () måler den mengden spenning over den lysavhengige motstanden.

Dette konverteres deretter til en prosentandel lys (0 er ingenting, 100 er en lommelykt på mobiltelefonen).

2_GPS.inoDette bruker seriell kommunikasjon ved bruk av TX1 og RX1 (Serial1).

Den bruker NMEA -meldinger ($ GPRMC -meldingene for å være presis) for å finne bredden og lengdegraden til boksen.

3_RFID.ino Ved å bruke MFRC522 -biblioteket, søker denne koden etter nye RFID -koder. Når en er tilstede, lagres den som RFID_lastUID.

4_DotMatrix.ino Denne koden brukes til å initialisere og sette prikkmatrisedisplayet. Den inneholder definisjoner for lasteanimasjonen osv …

Setter det opp

Før du kan laste opp denne koden til Arduino, må du installere noen få biblioteker.

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

MFRC522 -biblioteket for RFID -leseren (https://github.com/miguelbalboa/rfid)

Gå nå til main.ino og endre DEVEUI, APPEUI og APPKEY til de du kopierte forrige trinn.

Trinn 6: Konfigurere backend

Backend for dette prosjektet finner du på min GitHub, under RPI> Backend (https://github.com/BoussonKarel/CaptureTheBox).

Hvordan virker det?

  1. Hvert 10. sekund ser koden etter et aktivt spill. Hvis det blir funnet, blir det lagret i en variabel kalt huidigSpel (currentGame)
  2. Hvis modusen er satt til Seriell, brukes en kabel mellom Arduino og Pi. Pi måler for verdiene til LDR og GPS. Arduino reagerer med et JSON -format. RFID -tagger sendes når de presenteres. Denne modusen ble utelukkende brukt til utviklingsformål og er egentlig ikke nødvendig lenger.
  3. Hvis modusen er satt til LoRa, opprettes en MQTT -klient som utløser et tilbakeringing når LoRa -data mottas av TTN. Denne inneholder LDR-, GPS- og RFID -data.
  4. Frontend kan hente data ved hjelp av API -endepunktene. De fleste dataene hentes ved hjelp av huidigSpel.id. Data returneres i JSON -format ved hjelp av jsonify ()

Endre innstillingene Gå til secrets.py og fyll ut navnet på LoRa -applikasjonen og Acces Key (du skrev ned tidligere).

Gå til config.py og fyll ut databasens legitimasjon (for eksempel passord, bruker …)

Sette den opp som en tjeneste Prøv å kjøre app.py, når du har bekreftet at dette fungerer, kan vi bruke det som en tjeneste. Dette starter koden automatisk i bakgrunnen når du starter opp pi -en.

For å gjøre dette, kopier ctb_service.service til /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service

Aktiver det nå med systemctl enable ctb_service.service

Hvis du trenger å gjøre noen endringer i koden, kan du enkelt stoppe den ved å bruke systemctl stop (dette starter opp igjen ved omstart) eller deaktivere er (stopp den fra å starte automatisk) ved å bruke systemctl deaktivere.

Hvis du trenger å se loggene (på grunn av feil), kan du bruke journalctl -u ctb_service.service.

Mer informasjon om tjenester finner du her:

Trinn 7: Sette opp frontend

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

Lim dette inn i /var /html -mappen på din Raspberry Pi.

Denne inneholder alle nødvendige websider for spillet.

Den inneholder også et skript for å kommunisere med backend (både sanntid og bruk av API -endepunktene).

Trinn 8: Legge til et deksel

Legger til et deksel
Legger til et deksel
Legger til et deksel
Legger til et deksel

I saken brukte jeg en gammel verktøykasse, sammen med følgende materialer/teknikker:

  • 3D -utskrift
  • Skum for å holde batteriet på plass
  • Resirkulerte treplanker
  • Varmt lim
  • Skruer og muttere

Det du gjør med saken din er ditt valg! Jeg skal gi deg kunstnerisk frihet.

For inspirasjon har jeg lagt til noen bilder av min (ferdige) sak.

Anbefalt: