Snimite kutiju: 8 koraka
Snimite kutiju: 8 koraka
Anonim
Uhvati kutiju
Uhvati kutiju
Uhvati kutiju
Uhvati kutiju

Capture The Box je timska igra koju možete igrati s prijateljima u svom susjedstvu.

Cilj je uhvatiti kutiju i držati je u svom posjedu što je duže moguće, dok drugi igrači pokušavaju otići i iskrasti je dalje od vašeg trijema ili prednjeg vrta.

Ova igra koristi GPS za lociranje okvira i RFID oznake za identifikaciju igrača. Opcijski LDR može se dodati kako bi se intenzitet matričnog prikaza uskladio s postotkom svjetlosti u tom području.

Pribor

Mikrokontroleri i računala

  • Malina Pi
  • Arduino (Mega) Odabrao sam Arduino Mega umjesto normalnog Unoa, jer ima puno više pinova. To je potrebno jer koristimo Dragino LoRa štit, koji bi nam ostavio premalo digitalnih pinova pri korištenju UNO -a. SAVJET: Najbolje je koristiti originalni jer kineski klonovi ne rade uvijek kako se očekivalo.

Senzori i moduli

  • 4 MAX7219 Dot Matrix modulaPovežite DOUT na DIN, CS na CS, CLK na CLK…
  • Otpornik ovisan o svjetlu (10K) + otpornik (10K)
  • NEO-7M (ili sličan) GPS modulKoristim VMA430 iz Vellemana
  • RC522 RFID modul+ neke RFID značke/kartice

Za korištenje LoRa (bežične tehnologije)

Dragino Lora Štit

Opcijski senzori i moduli

LCD zaslon Za prikaz IP adrese Raspberry Pi

Za postavljanje testa

Matična ploča i Dupont kabeli (muško-muški)

Izborno (kućište)

  • Lemilica
  • Stara kutija za alat
  • Materijali za 3D ispis
  • Neke tanke drvene daske
  • Neki vijci i matice (koji mogu stati u Arduino rupe). Moji vijci imaju promjer oko 3 mm.

Procijenjena cijena može se naći u BOM -u (Bill of Materials), dolje navedenom.

Korak 1: Postavljanje Raspberry Pi

Raspberry Pi je srce projekta.

Pokretat će sučelje, pozadinu i bazu podataka. Također će biti odgovoran za komunikaciju između pozadine i Arduina.

Da bismo mogli koristiti Raspberry Pi, morat ćemo učiniti sljedeće:

1. dio: Instalirajte Raspbian na Raspberry Pi

Vodič o tome kako to učiniti možete pronaći ovdje:

2. dio: Instalirajte Raspbian na Raspberry PiPostavljanje kućnog WiFi -ja.

To se može učiniti pomoću wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Ponovo pokrenite Pi i trebali biste vidjeti IP adresu prilikom upisivanja ifconfig

3. dio: Instalirajte web poslužitelj i bazu podataka

Nakon što pokrenete svoj Pi, najbolje je promijeniti lozinku. To se može učiniti pomoću naredbe passwd.

Kad to učinite, nastavite s instaliranjem Apachea, PHP -a, MariaDB -a i PHPMyAdmina.

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

MariaDB sudo apt install mariadb-server mariadb-client -y sudo apt install php-mysql -y sudo systemctl ponovno pokretanje apache2.service

PHPMyAdminsudo apt install phpmyadmin -y

Ne zaboravite postaviti sigurnu lozinku za MySQL.

4. dio: Instaliranje potrebnih knjižnica Python

Za pozadinu će nam trebati neke knjižnice. Oni se mogu instalirati pomoću naredbe pip3.

pip3 instalirajte mysql-konektor-python

pip3 instalirajte flask-socketio

pip3 instalirajte flask-cors

pip3 instalirati geventpip3 instalirati gevent-websocket

pip3 instalirajte ttn

Korak 2: Postavljanje elektronike

Postavljanje elektronike
Postavljanje elektronike
Postavljanje elektronike
Postavljanje elektronike

Da bi ovaj projekt funkcionirao, moramo povezati svu elektroniku.

LoRa štitnik može se jednostavno postaviti na mjesto. Samo poravnajte igle s iglama na vašem Arduinu.

Ostale veze opisane su u mojoj shemi Fritzing. Koje možete preuzeti ovdje:

Korak 3: Dizajniranje baze podataka

Dizajniranje baze podataka
Dizajniranje baze podataka

Kako bih mogao pohraniti sve podatke o igri i senzorima, napravio sam nekoliko tablica:

mjerenje i senzor Mjerenja sa senzora, koja se nalaze u tablicama senzora. Sadrži referencu na senzor, vrijednost mjerenja (npr. koordinate: 51.123456; 3.123456) i izborni ID igre (ako je igra bila aktivna tijekom mjerenja).

spelerImena igrača i UID njihove RFID značke. Dodatni moderator polja je dodan, ta osoba može izmijeniti igru (npr. Zaustaviti je prije vremena).

spelInformacije o igri (vrijeme početka i završetka).

spel_has_speler Odnos između spela i spelera. Ovdje se igrači dodjeljuju igri.

bezitU ovoj tablici rezultat se sprema. Sadrži ID igre, ID igrača, vrijeme kada je ukrao kutiju i vrijeme kada ju je izgubio (kada je netko drugi ukrade ili kada igra završi). Oduzimanjem vremena početka od vremena završetka, možete izračunati rezultat koji je dobio od tog snimanja.

Izvoz baze podataka može se pronaći na mom GitHubu (https://github.com/BoussonKarel/CaptureTheBox)

Otvorite sql u PHPMyAdmin / MySQL radnom stolu i pokrenite ga. Bazu podataka sada bi trebalo uvesti.

Korak 4: Postavljanje računa na TTN -u

Korak 1: Prijavite se za račun na TTN -u i izradite aplikaciju

Prijavite se za račun na TheThingsNetwork, a zatim idite na Konzola> Dodaj aplikaciju.

Odaberite naziv svoje aplikacije i kliknite Dodaj aplikaciju.

Korak 2: Registrirajte uređaj

Kada podnesete aplikaciju, idite na Registriraj uređaj.

Odaberite ID uređaja, to može biti što god želite (sve dok se radi o zmiji) i kliknite Registracija.

Kliknite ikonu Generiraj pod EUI uređaja, pa će TTN generirati jednu za vas.

Korak 3: Zapišite svoje vjerodajnice

Sada idite na svoj uređaj i kliknite ikonu koda pored EUI uređaja, EUI aplikacije i ključ aplikacije. Sada bi se trebao pojaviti kao niz bajtova.

Prije kopiranja kliknite gumb Prebaci i provjerite jesu li vaš Dev EUI i EUI za aplikaciju LSB PRVI.

Vaš ključ aplikacije trebao bi ostati MSB PRVI (nemojte to mijenjati).

Ovi ključevi trebat će vam u sljedećem koraku: Postavljanje Arduina.

Korak 4: Zapisivanje ključa Pristup aplikaciji

Sada će nam trebati još jedan ključ za postavljanje MQTT -a na našem Raspberry Pi.

Idite na svoju aplikaciju i pomaknite se dolje do ključeva pristupa.

Ovo će vam trebati u Backend koraku.

Korak 5: Postavljanje Arduina

Arduino kôd možete pronaći i na mom GitHubu, pod Arduino (https://github.com/BoussonKarel/CaptureTheBox)

Ovaj kôd je podijeljen na više kartica kako bi bio organiziran.

main.ino Glavni kod: deklaracije pinova, setup () i petlja ()

0_LoRa.inoOvaj kôd upravlja komunikacijom pomoću LoRa.

On stavlja podatke LDR, GPS i RFID oznaka u niz od 13 bajtova i šalje ih u TheThingsNetwork.

1_LDR.inoKorištenjem analogRead () mjeri količinu napona na otporniku ovisnom o svjetlu.

To se zatim pretvara u postotak svjetlosti (0 nije ništa, 100 je svjetiljka za mobitel).

2_GPS.inoOvo koristi serijsku komunikaciju pomoću TX1 i RX1 (Serial1).

Koristi NMEA poruke (točnije, $ GPRMC poruke) za pronalaženje zemljopisne širine i dužine okvira.

3_RFID.inoKoristeći biblioteku MFRC522, ovaj kôd skenira nove RFID oznake. Kad god je jedan prisutan, pohranjuje ga kao RFID_lastUID.

4_DotMatrix.inoOvaj se kôd koristi za inicijalizaciju i postavljanje prikaza matrične točke. Sadrži definicije za animaciju učitavanja itd …

Postavljanje

Prije nego što možete prenijeti ovaj kôd na svoj Arduino, morat ćete instalirati nekoliko knjižnica.

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

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

Sada idite na main.ino i promijenite DEVEUI, APPEUI i APPKEY u one koje ste kopirali u posljednjem koraku.

Korak 6: Postavljanje pozadine

Pozadinu ovog projekta možete pronaći na mom GitHubu, pod RPI> Pozadina (https://github.com/BoussonKarel/CaptureTheBox).

Kako radi?

  1. Svakih 10 sekundi kôd traži aktivnu igru. Ako se pronađe, sprema se u varijablu koja se zove huidigSpel (currentGame)
  2. Ako je način rada postavljen na Serijski, koristi se kabel između Arduina i Pi -ja. Pi anketira vrijednosti LDR -a i GPS -a. Arduino odgovara JSON formatom. RFID oznake se šalju kad god se prezentiraju. Ovaj način rada koristio se isključivo u razvojne svrhe i više nije potreban.
  3. Ako je način rada postavljen na LoRa, stvara se MQTT klijent koji pokreće povratni poziv svaki put kada LoRa podatke primi TTN. Sadrži LDR, GPS i RFID podatke.
  4. Frontend može dohvatiti podatke pomoću krajnjih točaka API -ja. Većina podataka dohvaća se pomoću huidigSpel.id. Podaci se vraćaju u JSON formatu pomoću jsonify ()

Izmijenite postavke Idite na secrets.py i ispunite naziv svoje aplikacije LoRa i svoj ključ pristupa (zapisali ste ranije).

Idite na config.py i ispunite vjerodajnice svoje baze podataka (poput lozinke, korisnika …)

Postavljanje kao usluge Pokušajte pokrenuti app.py, nakon što potvrdite da ovo radi, možemo ga koristiti kao uslugu. Ovo će automatski pokrenuti kôd u pozadini kada pokrenete svoj pi.

Da biste to učinili, kopirajte ctb_service.service u /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service

Sada ga omogućite pomoću systemctl enable ctb_service.service

Ako trebate unijeti neke izmjene u kôd, možete ga jednostavno zaustaviti pomoću systemctl stop (ovo će se ponovno pokrenuti pri ponovnom pokretanju) ili onemogućiti je (spriječiti automatsko pokretanje) pomoću systemctl disable.

Ako trebate pregledati zapisnike (zbog pogrešaka), možete koristiti journalctl -u ctb_service.service.

Više informacija o uslugama možete pronaći ovdje:

Korak 7: Postavljanje sučelja

Kao i obično, frontend se može pronaći na mom GitHubu, pod RPI> Frontend (https://github.com/BoussonKarel/CaptureTheBox)

Zalijepite ovo u /var /html mapu vašeg Raspberry Pi.

Ovo sadrži sve potrebne web stranice za igru.

Također sadrži skriptu za komunikaciju s pozadinom (i u stvarnom vremenu i pomoću krajnjih točaka API -ja).

Korak 8: Dodavanje kućišta

Dodavanje kućišta
Dodavanje kućišta
Dodavanje kućišta
Dodavanje kućišta

Za kućište sam koristio staru kutiju za alat, zajedno sa sljedećim materijalima/tehnikama:

  • 3D ispis
  • Pjena za držanje baterije na mjestu
  • Reciklirane drvene daske
  • Vruće ljepilo
  • Vijci i matice

Ono što radite sa svojim slučajem vaš je izbor! Dat ću vam umjetničku slobodu.

Za inspiraciju sam dodao neke fotografije svog (završenog) kućišta.