Ujemite škatlo: 8 korakov
Ujemite škatlo: 8 korakov
Anonim
Ujemite škatlo
Ujemite škatlo
Ujemite škatlo
Ujemite škatlo

Capture The Box je timska igra, ki jo lahko igrate s prijatelji v vaši soseščini.

Cilj je ujeti škatlo in jo hraniti v svoji posesti čim dlje, medtem ko jo drugi igralci poskušajo odnesti stran od verande ali pred vrtom.

Ta igra uporablja GPS za iskanje škatle in RFID oznake za identifikacijo igralcev. Izbirni LDR lahko dodate tako, da se intenzivnost matričnega prikaza ujema z odstotkom svetlobe na območju.

Zaloge

Mikrokrmilniki in računalniki

  • Malina Pi
  • Arduino (Mega) Izbral sem Arduino Mega pred običajnim Uno, ker ima veliko več zatičev. To je potrebno, ker uporabljamo ščit Dragino LoRa, ki bi nam pri uporabi UNO pustil premalo digitalnih zatičev. NAMIG: Najbolje je, da uporabite pravega, ker kitajski kloni ne delujejo vedno po pričakovanjih.

Senzorji in moduli

  • 4 matrični moduli MAX7219 Priključite DOUT na DIN, CS na CS, CLK na CLK…
  • Odvisno od svetlobe upor (10K) + upor (10K)
  • NEO-7M (ali podoben) GPS modul Uporabljam VMA430 podjetja Velleman
  • RC522 RFID modul+ nekaj značk/kartic RFID

Za uporabo LoRa (brezžična tehnologija)

Dragino Lora Ščit

Izbirni senzorji in moduli

LCD zaslon Za prikaz naslova IP Raspberry Pi

Za preskusno nastavitev

Ohišje in kabli Dupont (moški-moški)

Izbirno (ohišje)

  • Spajkalnik
  • Stara torbica za orodje
  • Materiali za 3D tiskanje
  • Nekaj tankih lesenih desk
  • Nekateri vijaki in matice (ki se lahko prilegajo v luknje Arduino). Moji vijaki imajo premer približno 3 mm.

Ocenjeno ceno najdete v spodaj navedeni BOM (Bill of Materials).

1. korak: Nastavitev Raspberry Pi

Raspberry Pi je srce projekta.

Zagnala bo prednjo stran, zaledje in bazo podatkov. Odgovoren bo tudi za komunikacijo med zaledjem in Arduinom.

Če želimo uporabljati Raspberry Pi, moramo narediti naslednje:

1. del: Namestite Raspbian na Raspberry Pi

Vadnico o tem, kako to storiti, najdete tukaj:

2. del: Namestite Raspbian na Raspberry Pi Nastavitev domačega WiFi -ja.

To lahko storite z uporabo wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Znova zaženite Pi in pri vnosu ifconfig bi morali videti naslov IP

3. del: Namestite spletni strežnik in bazo podatkov

Ko zaženete svoj Pi, je najbolje, da spremenite geslo. To lahko storite z ukazom passwd.

Ko to storite, namestite Apache, PHP, MariaDB in PHPMyAdmin.

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

MariaDB sudo apt namestite mariadb-strežnik mariadb-client -y sudo apt namestite php-mysql -y sudo systemctl znova zaženite apache2.service

PHPMyAdminsudo apt install phpmyadmin -y

Ne pozabite nastaviti varnega gesla za MySQL.

4. del: Namestitev potrebnih knjižnic Python

Za ozadje bomo potrebovali nekaj knjižnic. Te lahko namestite z ukazom pip3.

pip3 namestite mysql-connector-python

pip3 namestite flask-socketio

pip3 namestite flask-cors

pip3 namestite geventpip3 namestite gevent-websocket

pip3 namestite ttn

2. korak: Postavitev elektronike

Postavitev elektronike
Postavitev elektronike
Postavitev elektronike
Postavitev elektronike

Da bi ta projekt deloval, moramo povezati vso elektroniko.

Ščitnik LoRa lahko enostavno namestite. Samo poravnajte zatiče z zatiči na vašem Arduinu.

Druge povezave so opisane v moji shemi Fritzing. Katero lahko prenesete tukaj:

3. korak: Oblikovanje zbirke podatkov

Oblikovanje zbirke podatkov
Oblikovanje zbirke podatkov

Za shranjevanje vseh podatkov o igri in senzorjih sem naredil nekaj tabel:

merjenje in senzor Meritve iz senzorjev, najdene v tabelah senzorjev. Vsebuje sklic na senzor, vrednost meritve (npr. koordinate: 51.123456; 3.123456) in izbirni ID igre (če je bila igra med merjenjem aktivna).

spelerImena igralcev in UID njihove značke RFID. Dodan je izbirni moderator polja, ta oseba lahko spremeni igro (npr. Zaustavi jo pred časom).

spel Informacije o igri (začetni in končni čas).

spel_has_speler Razmerje med spel in spelerjem. Tu so igralci dodeljeni igri.

brezit V tej tabeli se rezultat shrani. Vsebuje ID igre, ID igralca, čas, ko je polje ukradel, in čas, ko ga je izgubil (ko ga ukrade kdo drug ali ko se igra konča). Če od končnega časa odštejete začetni čas, lahko izračunate rezultat, ki ga je dobil pri tem zajemu.

Izvoz baze podatkov najdete na mojem GitHubu (https://github.com/BoussonKarel/CaptureTheBox)

Odprite sql v PHPMyAdmin / MySQL Workbench in ga zaženite. Zdaj je treba uvoziti bazo podatkov.

4. korak: Nastavitev računa na TTN

1. korak: Prijavite se za račun na TTN in ustvarite aplikacijo

Prijavite se za račun v TheThingsNetwork, nato pojdite na Console> Add application.

Izberite ime aplikacije in kliknite Dodaj aplikacijo.

2. korak: Registrirajte napravo

Ko se prijavite, pojdite na Register device.

Izberite ID naprave, to je lahko karkoli želite (dokler je kača) in kliknite Register.

Kliknite ikono Ustvari pod EUI naprave, zato jo bo TTN ustvaril za vas.

3. korak: Zapišite svoje poverilnice

Zdaj pojdite na svojo napravo in kliknite ikono kode zraven uporabniškega vmesnika naprave, uporabniškega vmesnika aplikacije in ključa aplikacije. Zdaj bi moral biti prikazan kot niz bajtov.

Preden kopirate, kliknite gumb Preklopi in se prepričajte, da sta vaš Dev EUI in EUI uporabniški vmesnik LSB PRVI.

Vaš ključ aplikacije mora ostati MSB PRVI (tega ne spreminjajte).

V naslednjem koraku boste potrebovali te ključe: nastavitev Arduina.

4. korak: Zapišite ključ dostopa do aplikacije

Zdaj bomo potrebovali še en ključ za nastavitev MQTT na našem Raspberry Pi.

Pojdite na aplikacijo in se pomaknite navzdol do ključev dostopa.

To boste potrebovali v koraku Backend.

5. korak: Nastavitev Arduina

Kodo Arduino lahko najdete tudi na mojem GitHubu pod Arduino (https://github.com/BoussonKarel/CaptureTheBox)

Ta koda je za večjo organiziranost razdeljena na več zavihkov.

main.ino Glavna koda: deklaracije pin, setup () in zanka ()

0_LoRa.inoTa koda upravlja komunikacijo z uporabo LoRa.

Podatke oznak LDR, GPS in RFID postavi v niz 13 bajtov in jih pošlje v TheThingsNetwork.

1_LDR.ino Z uporabo analogRead () meri količino napetosti na svetlobno odvisnem uporu.

Ta se nato pretvori v odstotek svetlobe (0 ni nič, 100 je svetilka za mobilni telefon).

2_GPS.inoTo uporablja serijsko komunikacijo z uporabo TX1 in RX1 (Serial1).

Za iskanje zemljepisne širine in dolžine polja uporablja sporočila NMEA (natančneje sporočila $ GPRMC).

3_RFID.ino Z uporabo knjižnice MFRC522 ta koda išče nove oznake RFID. Kadar koli je prisotna, se shrani kot RFID_lastUID.

4_DotMatrix.inoTa koda se uporablja za inicializacijo in nastavitev matričnega prikaza. Vsebuje definicije za nalaganje animacije itd …

Nastavitev

Preden lahko to kodo naložite v svoj Arduino, morate namestiti nekaj knjižnic.

Knjižnica Arduino-LMIC avtorja matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)

Knjižnica MFRC522 za bralnik RFID (https://github.com/miguelbalboa/rfid)

Zdaj pojdite na main.ino in spremenite DEVEUI, APPEUI in APPKEY v tiste, ki ste jih kopirali v zadnjem koraku.

6. korak: Nastavitev zaledja

Zaledje tega projekta najdete na mojem GitHubu pod RPI> Backend (https://github.com/BoussonKarel/CaptureTheBox).

Kako deluje?

  1. Koda vsakih 10 sekund išče aktivno igro. Če jo najdemo, jo shranimo v spremenljivko, imenovano huidigSpel (currentGame)
  2. Če je način nastavljen na Serijski, se med Arduinom in Pi uporablja kabel. Pi išče vrednosti LDR in GPS. Arduino se odzove v formatu JSON. Oznake RFID se pošljejo vsakič, ko so predstavljene. Ta način je bil uporabljen izključno za razvojne namene in v resnici ni več potreben.
  3. Če je način nastavljen na LoRa, se ustvari odjemalec MQTT, ki sproži povratni klic, kadar TTN prejme podatke LoRa. Ta vsebuje podatke LDR, GPS in RFID.
  4. Frontend lahko pridobi podatke s pomočjo končnih točk API. Večina podatkov se pridobi z uporabo huidigSpel.id. Podatki se vrnejo v obliki JSON z uporabo jsonify ()

Spremenite nastavitve Pojdite na secrets.py in vnesite ime aplikacije LoRa in ključ dostopa (zapisali ste prej).

Pojdite na config.py in vnesite poverilnice za bazo podatkov (na primer geslo, uporabnika …)

Nastavitev kot storitve Poskusite zagnati app.py, ko potrdite, da to deluje, ga lahko uporabimo kot storitev. To bo samodejno zagnalo kodo v ozadju, ko zaženete pi.

Če želite to narediti, kopirajte ctb_service.service v /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service

Zdaj ga omogočite z uporabo systemctl enable ctb_service.service

Če morate kodo nekaj spremeniti, jo lahko preprosto ustavite s sistemom systemctl stop (to se bo znova zagnalo ob ponovnem zagonu) ali pa onemogočite (prepreči samodejni zagon) z uporabo systemctl disable.

Če morate pregledati dnevnike (zaradi napak), lahko uporabite journalctl -u ctb_service.service.

Več informacij o storitvah najdete tukaj: https://www.raspberrypi.org/documentation/linux/us..

7. korak: Nastavitev prednje strani

Kot običajno lahko frontend najdete na mojem GitHubu pod RPI> Frontend (https://github.com/BoussonKarel/CaptureTheBox)

To prilepite v mapo /var /html vašega Raspberry Pi.

Ta vsebuje vse potrebne spletne strani za igro.

Vsebuje tudi skript za komunikacijo z zaledjem (v realnem času in z uporabo končnih točk API).

8. korak: Dodajanje ohišja

Dodajanje ohišja
Dodajanje ohišja
Dodajanje ohišja
Dodajanje ohišja

Za ohišje sem uporabil staro ohišje za orodje skupaj z naslednjimi materiali/tehnikami:

  • 3D tiskanje
  • Pena za ohranjanje baterije na mestu
  • Reciklirane lesene deske
  • Vroče lepilo
  • Vijaki in matice

Kaj boste storili s svojim primerom, je vaša izbira! Dala vam bom umetniško svobodo.

Za navdih sem dodal nekaj fotografij moje (končane) zadeve.