Užfiksuokite dėžutę: 8 žingsniai
Užfiksuokite dėžutę: 8 žingsniai
Anonim
Užfiksuokite dėžutę
Užfiksuokite dėžutę
Užfiksuokite dėžutę
Užfiksuokite dėžutę

„Capture The Box“yra komandinis žaidimas, kurį galite žaisti su savo kaimynystės draugais.

Tikslas yra užfiksuoti dėžę ir kuo ilgiau laikyti ją savo žinioje, o kiti žaidėjai bando eiti ir nuslėpti ją nuo jūsų verandos ar priekinio sodo.

Šis žaidimas naudoja GPS, kad surastų dėžutę, ir RFID žymes žaidėjams identifikuoti. Galima pridėti neprivalomą LDR, kad taškinės matricos ekrano intensyvumas atitiktų šviesos procentą toje srityje.

Prekės

Mikrovaldikliai ir kompiuteriai

  • Raspberry Pi
  • Arduino (Mega) Aš pasirinkau „Arduino Mega“, o ne įprastą „Uno“, nes jis turi daug daugiau smeigtukų. Tai būtina, nes mes naudojame „Dragino LoRa“skydą, kuris, naudojant UNO, paliktų mums per mažai skaitmeninių kaiščių. PATARIMAS: Geriausia naudoti tikrą, nes Kinijos klonai ne visada veikia taip, kaip tikėtasi.

Jutikliai ir moduliai

  • 4 MAX7219 taškų matricos moduliai Prijunkite DOUT prie DIN, CS į CS, CLK prie CLK …
  • Nuo šviesos priklausomas rezistorius (10K) + rezistorius (10K)
  • Neo-7M (arba panašus) GPS modulis Aš naudoju Velleman VMA430
  • RC522 RFID modulis+ kai kurie RFID ženkleliai/kortelės

Naudojant „LoRa“(belaidę technologiją)

Dragino Lora skydas

Pasirenkami jutikliai ir moduliai

Skystųjų kristalų ekranas Norėdami parodyti „Raspberry Pi“IP adresą

Norėdami atlikti bandomąją sąranką

Duonos lenta ir „Dupont“kabeliai (vyriškas-vyriškas)

Neprivaloma (korpusas)

  • Lituoklis
  • Senas įrankių dėklas
  • Medžiagos 3D spausdinimui
  • Kai kurios plonos medinės lentos
  • Kai kurie varžtai ir veržlės (kurie gali tilpti į „Arduino“skyles). Mano varžtų skersmuo yra apie 3 mm.

Apytikslę kainą galite rasti BOM (Bill of Materials), pateiktame žemiau.

1 žingsnis: nustatykite „Raspberry Pi“

„Raspberry Pi“yra projekto širdis.

Jis paleis priekinę, užpakalinę ir duomenų bazę. Ji taip pat bus atsakinga už ryšį tarp vidinės sistemos ir „Arduino“.

Kad galėtume naudoti „Raspberry Pi“, turėsime atlikti šiuos veiksmus:

1 dalis: įdiekite „Raspbian“į „Raspberry Pi“

Pamoką, kaip tai padaryti, rasite čia:

2 dalis: įdiekite „Raspbian“į „Raspberry Pi“Namų „WiFi“nustatymas.

Tai galima padaryti naudojant wpa_passphrase „YourNetwork“„YourSSID“>> /etc/wpa_supplicant/wpa_supplicant.conf

Perkraukite „Pi“ir įvesdami „ifconfig“turėtumėte pamatyti IP adresą

3 dalis: Įdiekite žiniatinklio serverį ir duomenų bazę

Paleidus „Pi“, geriausia pakeisti slaptažodį. Tai galima padaryti naudojant komandą passwd.

Kai tai bus padaryta, eikite į priekį ir įdiekite „Apache“, PHP, „MariaDB“ir „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 paleiskite apache2.service

PHPMyAdminsudo apt įdiegti phpmyadmin -y

Nepamirškite nustatyti saugaus „MySQL“slaptažodžio.

4 dalis: Reikiamų „Python“bibliotekų diegimas

Užpakalinei sistemai mums reikės kai kurių bibliotekų. Juos galima įdiegti naudojant komandą pip3.

pip3 įdiegti „mysql-connector-python“

pip3 įdiegti kolbą-lizdą

pip3 sumontuokite kolbas

pip3 install geventpip3 įdiegti gevent-websocket

pip3 įdiegti ttn

2 žingsnis: Elektronikos išdėstymas

Elektronikos išdėstymas
Elektronikos išdėstymas
Elektronikos išdėstymas
Elektronikos išdėstymas

Kad šis projektas veiktų, turime prijungti visą elektroniką.

„LoRa“skydą galima lengvai įstatyti į vietą. Tiesiog sulygiuokite kaiščius su „Arduino“kaiščiais.

Kitos jungtys aprašytos mano „Fritzing“schemoje. Kuriuos galima atsisiųsti čia:

3 žingsnis: kurkite duomenų bazę

Duomenų bazės projektavimas
Duomenų bazės projektavimas

Kad galėčiau išsaugoti visus žaidimo ir jutiklių duomenis, padariau keletą lentelių:

Matavimai iš jutiklių, rasti jutiklių lentelėse. Jame yra nuoroda į jutiklį, matavimo reikšmė (pvz., bendriniai: 51.123456; 3.123456) ir pasirenkamas žaidimo ID (jei žaidimas buvo aktyvus matavimo metu).

Žaidėjų vardai ir jų RFID ženklelio UID. Pridedamas neprivalomas lauko moderatorius, šis asmuo gali keisti žaidimą (pvz., Sustabdyti jį anksčiau laiko).

žaidimo informacija (pradžios ir pabaigos laikas).

Spel_has_speler Čia žaidėjai priskiriami žaidimui.

šioje lentelėje rezultatas išsaugomas. Jame yra žaidimo ID, žaidėjo ID, laikas, kai jis pavogė dėžutę ir laikas, kai jis ją pametė (kai kas nors jį pavogia arba kai žaidimas baigiasi). Atimdami pradžios laiką iš pabaigos laiko, galite apskaičiuoti rezultatą, kurį jis gavo iš to užfiksavimo.

Duomenų bazės eksportą galite rasti mano „GitHub“(https://github.com/BoussonKarel/CaptureTheBox)

Atidarykite sql PHPMyAdmin / MySQL Workbench ir paleiskite ją. Dabar duomenų bazė turėtų būti importuota.

4 veiksmas: paskyros nustatymas TTN

1 veiksmas: prisiregistruokite prie TTN paskyros ir sukurkite programą

Užregistruokite paskyrą „TheThingsNetwork“, tada eikite į „Console“> „Pridėti programą“.

Pasirinkite savo programos pavadinimą ir spustelėkite Pridėti programą.

2 veiksmas: užregistruokite įrenginį

Kai baigsite savo programą, eikite į Įrenginio registravimas.

Pasirinkite įrenginio ID, tai gali būti bet koks jūsų noras (jei tai gyvatės atvejis) ir spustelėkite Registruotis.

Spustelėkite piktogramą „Sukurti“, esančią skiltyje „Įrenginio EUI“, kad TTN sugeneruotų ją jums.

3 žingsnis: užrašykite savo kredencialus

Dabar eikite į savo įrenginį ir spustelėkite kodo piktogramą šalia įrenginio EUI, programos EUI ir programos rakto. Dabar jis turėtų būti rodomas kaip baitų masyvas.

Prieš kopijuodami spustelėkite mygtuką Perjungti ir įsitikinkite, kad jūsų „Dev EUI“ir „App EUI“yra LSB FIRST.

Programos raktas turėtų likti MSB FIRST (nekeiskite to).

Šių raktų jums reikės kitame žingsnyje: „Arduino“nustatymas.

4 veiksmas: užrašykite savo programos prieigos raktą

Dabar mums reikės dar vieno rakto, kad „Raspberry Pi“nustatytume MQTT.

Eikite į savo programą ir slinkite žemyn iki prieigos raktų.

To jums reikės atliekant „Backend“veiksmą.

5 žingsnis: „Arduino“nustatymas

„Arduino“kodą taip pat galima rasti „GitHub“, esančiame „Arduino“(https://github.com/BoussonKarel/CaptureTheBox)

Šis kodas yra padalintas į kelis skirtukus, kad jis būtų tvarkingas.

Pagrindinis kodas: pagrindinis kodas: kaiščių deklaracijos, sąranka () ir kilpa ()

0_LoRa.inoŠis kodas tvarko ryšį naudojant „LoRa“.

Jis įtraukia LDR, GPS ir RFID žymų duomenis į 13 baitų masyvą ir siunčia juos „TheThingsNetwork“.

1_LDR.ino Naudojant analogRead (), jis matuoja nuo šviesos priklausomo rezistoriaus įtampos kiekį.

Tada jis konvertuojamas į šviesos procentą (0 nėra nieko, 100 - mobiliojo telefono žibintuvėlis).

2_GPS.inoTai naudoja serijinį ryšį naudojant TX1 ir RX1 (Serial1).

Ji naudoja NMEA pranešimus (tiksliau $ GPRMC pranešimai), kad surastų langelio platumą ir ilgumą.

Naudojant MFRC522 biblioteką, šis kodas ieško naujų RFID žymų. Kai tik yra, jis saugomas kaip RFID_lastUID.

4_DotMatrix.inoŠis kodas naudojamas inicijuoti ir nustatyti taškinės matricos ekraną. Jame yra įkeliamos animacijos apibrėžimai ir kt.

Jį nustatant

Kad galėtumėte įkelti šį kodą į „Arduino“, turėsite įdiegti kelias bibliotekas.

Matthijskooijmano „Arduino-LMIC“biblioteka (https://github.com/matthijskooijman/arduino-lmic)

RFID skaitytuvo biblioteka MFRC522 (https://github.com/miguelbalboa/rfid)

Dabar eikite į main.ino ir pakeiskite DEVEUI, APPEUI ir APPKEY į tuos, kuriuos nukopijavote paskutiniame žingsnyje.

6 veiksmas: „Backend“sąranka

Šio projekto foną galima rasti mano „GitHub“skiltyje RPI> „Backend“(https://github.com/BoussonKarel/CaptureTheBox).

Kaip tai veikia?

  1. Kas 10 sekundžių kodas ieško aktyvaus žaidimo. Jei toks randamas, jis išsaugomas kintamajame, vadinamame huidigSpel (currentGame)
  2. Jei režimas nustatytas kaip serijinis, tarp „Arduino“ir „Pi“naudojamas kabelis. „Pi“apklausia LDR ir GPS reikšmes. „Arduino“reaguoja JSON formatu. RFID žymos siunčiamos kiekvieną kartą, kai jos pateikiamos. Šis režimas buvo naudojamas tik kūrimo tikslais ir nebėra būtinas.
  3. Jei režimas nustatytas į „LoRa“, sukuriamas MQTT klientas, kuris suaktyvina atgalinį skambutį, kai TTN gauna „LoRa“duomenis. Jame yra LDR, GPS ir RFID duomenys.
  4. Sąsaja gali nuskaityti duomenis naudodami API galinius taškus. Dauguma duomenų gaunama naudojant huidigSpel.id. Duomenys grąžinami JSON formatu naudojant jsonify ()

Eikite į secrets.py ir įveskite savo „LoRa“programos pavadinimą ir prieigos raktą (parašėte anksčiau).

Eikite į config.py ir užpildykite savo duomenų bazės kredencialus (pvz., Slaptažodį, naudotoją …)

Pabandykite paleisti „app.py“, kai patvirtinsite, kad tai veikia, galime naudoti ją kaip paslaugą. Tai automatiškai paleidžia kodą fone, kai įkeliate „pi“.

Norėdami tai padaryti, nukopijuokite ctb_service.service į /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service

Dabar įgalinkite jį naudodami systemctl enable ctb_service.service

Jei reikia atlikti tam tikrus kodo pakeitimus, galite lengvai jį sustabdyti naudodami „systemctl stop“(tai bus paleista iš naujo paleidus iš naujo) arba išjungti (sustabdyti automatinį paleidimą) naudojant „systemctl“išjungimą.

Jei jums reikia peržiūrėti žurnalus (dėl klaidų), galite naudoti journalctl -u ctb_service.service.

Daugiau informacijos apie paslaugas rasite čia:

7 veiksmas: sąsajos sąranka

Kaip įprasta, sąsają galima rasti mano „GitHub“skiltyje RPI> Frontend (https://github.com/BoussonKarel/CaptureTheBox)

Įklijuokite tai į „Raspberry Pi“aplanką /var /html.

Jame yra visi žaidimui reikalingi tinklalapiai.

Jame taip pat yra scenarijus, skirtas bendrauti su užpakaline dalimi (tiek realiuoju laiku, tiek naudojant API galinius taškus).

8 žingsnis: korpuso pridėjimas

Korpuso pridėjimas
Korpuso pridėjimas
Korpuso pridėjimas
Korpuso pridėjimas

Korpusui naudoju seną įrankių dėklą kartu su šiomis medžiagomis/metodais:

  • 3D spausdinimas
  • Putplastis, skirtas akumuliatoriaus laikymui
  • Perdirbtos medinės lentos
  • Karšti klijai
  • Varžtai ir veržlės

Ką daryti su savo byla, yra jūsų pasirinkimas! Aš tau duosiu meninę laisvę.

Įkvėpimui pridėjau keletą savo (baigto) dėklo nuotraukų.