Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
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
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
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?
- Koda vsakih 10 sekund išče aktivno igro. Če jo najdemo, jo shranimo v spremenljivko, imenovano huidigSpel (currentGame)
- Č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.
- Č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.
- 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
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.