Sadržaj:

Snimite kutiju: 8 koraka
Snimite kutiju: 8 koraka

Video: Snimite kutiju: 8 koraka

Video: Snimite kutiju: 8 koraka
Video: СКИБИДИ ТУАЛЕТ 8 СЕЗОН КРАТКИЙ ПЕРЕСКАЗ! @DaFuqBoom 2024, Novembar
Anonim
Uhvati kutiju
Uhvati kutiju
Uhvati kutiju
Uhvati kutiju

Capture The Box je timska igra koju možete igrati sa prijateljima u vašem 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.

Supplies

Mikrokontroleri i računari

  • Raspberry 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 original 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 svjetlosti (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 Shield

Opcijski senzori i moduli

LCD ekran Za prikaz IP adrese Raspberry Pi

Za postavljanje testa

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

Opciono (kućište)

  • Lemilica
  • Stara kutija za alat
  • Materijali za 3D štampanje
  • 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 frontend, 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:

Dio 2: Instalirajte Raspbian na Raspberry PiSetting your home WiFi.

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

Dio 3: Instalirajte web server i bazu podataka

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

Kad to učinite, nastavite i instalirajte Apache, PHP, MariaDB i PHPMyAdmin.

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

MariaDB sudo apt instaliraj mariadb-server mariadb-client -y sudo apt instaliraj php-mysql -y sudo systemctl ponovo pokreni apache2.service

PHPMyAdminsudo apt install phpmyadmin -y

Ne zaboravite postaviti sigurnu lozinku za MySQL.

Dio 4: Instaliranje potrebnih Python biblioteka

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

pip3 instalirajte mysql-connector-python

pip3 instalirajte flask-socketio

pip3 instalirajte flask-cors

pip3 install geventpip3 install gevent-websocket

pip3 install ttn

Korak 2: Postavljanje elektronike

Postavljanje elektronike
Postavljanje elektronike
Postavljanje elektronike
Postavljanje elektronike

Da bi ovaj projekt funkcionirao, moramo povezati svu elektroniku.

LoRa štitnik se može lako postaviti. Samo poravnajte pinove sa iglama na vašem Arduinu.

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

Korak 3: Dizajniranje baze podataka

Dizajniranje baze podataka
Dizajniranje baze podataka

Da 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že referencu na senzor, vrijednost mjerenja (npr. koordinate: 51.123456; 3.123456) i opcionalni ID igre (ako je igra bila aktivna tokom mjerenja).

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

spelInformacije o igri (početak i završetak).

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

bezit U ovoj tabeli rezultat je sačuvan. Sadrži ID igre, ID igrača, vrijeme kada je ukrao kutiju i vrijeme kada ju je izgubio (kada je neko drugi ukrade ili kada se 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. Sada bi trebalo uvesti bazu podataka.

Korak 4: Postavljanje računa na TTN -u

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

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

Odaberite naziv aplikacije i kliknite Dodaj aplikaciju.

Korak 2: Registrirajte uređaj

Kada podnesete aplikaciju, idite na Registracija uređaja.

Odaberite ID uređaja, to može biti što god želite (sve dok je u pitanju zmija) i kliknite Registracija.

Kliknite ikonu Generiraj pod EUI uređaja, tako da ć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 Promijeni 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 za pristup.

Ovo će vam trebati u Backend koraku.

Korak 5: Postavljanje Arduina

Arduino kod možete pronaći i na mom GitHub -u, pod Arduino (https://github.com/BoussonKarel/CaptureTheBox)

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

main.ino Glavni kod: pin deklaracije, setup () i loop ()

0_LoRa.inoOvaj kod 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.ino Koristeći analogRead (), mjeri količinu napona na otporniku zavisnom od svjetlosti.

Ovo 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 (da budem precizan u $ GPRMC porukama) da pronađe geografsku širinu i dužinu okvira.

3_RFID.inoKorišćenjem biblioteke MFRC522, ovaj kod skenira nove RFID oznake. Kad god je jedan prisutan, skladišti se kao RFID_lastUID.

4_DotMatrix.inoOvaj kôd se koristi za inicijalizaciju i postavljanje matričnog prikaza. 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 biblioteka.

Biblioteka Arduino-LMIC autora matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)

Biblioteka 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

Pozadina ovog projekta može se pronaći na mom GitHub -u, pod RPI> Backend (https://github.com/BoussonKarel/CaptureTheBox).

Kako to 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 predstave. 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, kreira 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 tačaka API -ja. Većina podataka se dohvaća pomoću huidigSpel.id. Podaci se vraćaju u JSON formatu pomoću jsonify ()

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

Idite na config.py i popunite akreditive 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 upotrebom systemctl stop (ovo će se ponovo pokrenuti pri ponovnom pokretanju) ili onemogućiti je (spriječiti automatsko pokretanje) pomoću systemctl disable.

Ako trebate pregledati zapisnike (zbog greš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 GitHub -u, 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.

Sadrži i skriptu za komunikaciju sa pozadinom (i u stvarnom vremenu i koristeći API krajnje tačke).

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 štampanje
  • Pena za držanje baterije na mestu
  • Reciklirane drvene daske
  • Vruće ljepilo
  • Vijci i matice

Šta ćete raditi sa vašim kućištem vaš je izbor! Daću vam umetničku slobodu.

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

Preporučuje se: