Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Konfigurere Raspberry Pi
- Trinn 2: Legge ut elektronikken
- Trinn 3: Designe databasen
- Trinn 4: Opprette en konto på TTN
- Trinn 5: Sette opp Arduino
- Trinn 6: Konfigurere backend
- Trinn 7: Sette opp frontend
- Trinn 8: Legge til et deksel
Video: Fang boksen: 8 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Capture The Box er et teambuilding -spill du kan spille med venner i nabolaget ditt.
Målet er å fange boksen og beholde den i din besittelse så lenge som mulig mens andre spillere prøver å snike den bort fra verandaen eller forhagen.
Dette spillet bruker GPS til å finne boksen og RFID -tagger for å identifisere spillerne. En valgfri LDR kan legges til for å matche intensiteten til prikkmatrisedisplayet med lysprosenten i området.
Rekvisita
Mikrokontrollere og datamaskiner
- Bringebær Pi
- Arduino (Mega) Jeg valgte en Arduino Mega fremfor en vanlig Uno, fordi den har mange flere pins. Dette er nødvendig fordi vi bruker et Dragino LoRa -skjold, noe som vil etterlate oss med for lite digitale pins når vi bruker en UNO. TIPS: Det er best å bruke en ekte, fordi de kinesiske klonene ikke alltid fungerer som forventet.
Sensorer og moduler
- 4 MAX7219 Dot Matrix Modules Koble DOUT til DIN, CS til CS, CLK til CLK …
- Lysavhengig motstand (10K) + motstand (10K)
- NEO-7M (eller lignende) GPS-modul Jeg bruker VMA430 fra Velleman
- RC522 RFID -modul+ noen RFID -merker/kort
For bruk av LoRa (trådløs teknologi)
Dragino Lora Shield
Valgfrie sensorer og moduler
En LCD -skjerm For å vise IP -adressen til Raspberry Pi
For å lage et testoppsett
Et brødbrett og Dupont-kabler (hann-mann
Valgfritt (foringsrør)
- Loddejern
- En gammel verktøykasse
- Materialer for 3D -utskrift
- Noen tynne treplanker
- Noen bolter og muttere (som kan passe i Arduino -hull). Mine skruer har en diameter på rundt 3 mm.
En estimert pris finnes i styklisten (Materialliste), inkludert nedenfor.
Trinn 1: Konfigurere Raspberry Pi
Raspberry Pi er hjertet i prosjektet.
Det vil kjøre frontend, backend og database. Det vil også være ansvarlig for kommunikasjonen mellom backend og Arduino.
For at vi skal kunne bruke Raspberry Pi, må vi gjøre følgende:
Del 1: Installer Raspbian på en Raspberry Pi
En opplæring om hvordan du gjør det finner du her:
Del 2: Installer Raspbian på en Raspberry Pi Sette opp WiFi hjemme.
Dette kan gjøres ved å bruke wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf
Start Pi på nytt, og du bør se en IP -adresse når du skriver inn ifconfig
Del 3: Installer webserveren og databasen
Når du har Pi -en din i gang, er det best å endre passordet ditt. Dette kan gjøres med kommandoen passwd.
Når det er gjort, fortsett og installer Apache, PHP, MariaDB og 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 restart apache2.service
PHPMyAdminsudo apt install phpmyadmin -y
Ikke glem å angi et sikkert MySQL -passord.
Del 4: Installere de nødvendige Python -bibliotekene
For backend trenger vi noen biblioteker. Disse kan installeres ved hjelp av pip3 -kommandoen.
pip3 installer mysql-connector-python
pip3 installere flask-socketio
pip3 installere kolbe-kors
pip3 install geventpip3 install gevent-websocket
pip3 installer ttn
Trinn 2: Legge ut elektronikken
For å få dette prosjektet til å fungere, må vi koble til all elektronikken.
LoRa -skjoldet kan enkelt settes på plass. Bare juster pinnene med pinnene på Arduino.
De andre forbindelsene er beskrevet i Fritzing -opplegget mitt. Som kan lastes ned her:
Trinn 3: Designe databasen
For å kunne lagre alle spill- og sensordata, laget jeg noen tabeller:
måling og sensor Målingene fra sensorene, som finnes i sensortabellene. Den inneholder en referanse til sensoren, verdien av målingen (f.eks. koordinater: 51.123456; 3.123456) og en valgfri spill -ID (hvis et spill var aktivt under målingen).
spillerSpillerens navn og UID for RFID -merket. En valgfri feltmoderator er lagt til, denne personen kan endre spillet (f.eks. Stoppe det før tid).
spillInformasjonen om spillet (start og slutt).
spel_has_speler Forholdet mellom spill og spiller. Det er her spillere blir tildelt et spill.
bezitI denne tabellen lagres poengsummen. Den inneholder spill -id, spiller -ID, tidspunktet han stjal esken og tiden han mistet den (når noen andre stjeler den eller når spillet avsluttes). Ved å trekke starttiden fra sluttiden, kan du beregne poengsummen han fikk fra den fangsten.
En eksport av databasen finner du på min GitHub (https://github.com/BoussonKarel/CaptureTheBox)
Åpne sql i PHPMyAdmin / MySQL Workbench og kjør den. Databasen skal nå importeres.
Trinn 4: Opprette en konto på TTN
Trinn 1: Registrer deg for en konto på TTN og opprett et program
Registrer deg for en konto på TheThingsNetwork, og gå til Konsoll> Legg til applikasjon.
Velg et navn for appen din, og klikk på Legg til applikasjon.
Trinn 2: Registrer en enhet
Når du har søkt, går du til Registrer enhet.
Velg en enhets -ID, dette kan være hva du vil (så lenge det er slangekasse) og klikk Registrer.
Klikk på Generer -ikonet under Device EUI, så TTN vil generere et for deg.
Trinn 3: Skriv ned legitimasjonen din
Gå nå til enheten din og klikk på kodeikonet ved siden av enhet EUI, app EUI og appnøkkel. Det skal nå vises som en rekke byte.
Før du kopierer, klikker du på Switch -knappen og kontrollerer at Dev EUI og App EUI er LSB FIRST.
Appnøkkelen din bør forbli MSB FØRST (ikke endre det).
Du trenger disse nøklene i neste trinn: Sette opp Arduino.
Trinn 4: Skriv ned applikasjonstilgangsnøkkelen
Nå trenger vi en nøkkel til for å sette opp MQTT på Raspberry Pi.
Gå til applikasjonen din og rull ned til tilgangsnøkler.
Du trenger dette i Backend -trinnet.
Trinn 5: Sette opp Arduino
Arduino -kode kan også finnes på min GitHub, under Arduino (https://github.com/BoussonKarel/CaptureTheBox)
Denne koden er delt inn i flere faner for å holde den organisert.
main.inoHovedkoden: pin -deklarasjoner, setup () og loop ()
0_LoRa.ino Denne koden håndterer kommunikasjonen ved hjelp av LoRa.
Den legger dataene til LDR-, GPS- og RFID -taggene i en matrise på 13 byte og sender denne over til TheThingsNetwork.
1_LDR.ino Ved å bruke analogRead () måler den mengden spenning over den lysavhengige motstanden.
Dette konverteres deretter til en prosentandel lys (0 er ingenting, 100 er en lommelykt på mobiltelefonen).
2_GPS.inoDette bruker seriell kommunikasjon ved bruk av TX1 og RX1 (Serial1).
Den bruker NMEA -meldinger ($ GPRMC -meldingene for å være presis) for å finne bredden og lengdegraden til boksen.
3_RFID.ino Ved å bruke MFRC522 -biblioteket, søker denne koden etter nye RFID -koder. Når en er tilstede, lagres den som RFID_lastUID.
4_DotMatrix.ino Denne koden brukes til å initialisere og sette prikkmatrisedisplayet. Den inneholder definisjoner for lasteanimasjonen osv …
Setter det opp
Før du kan laste opp denne koden til Arduino, må du installere noen få biblioteker.
Arduino-LMIC-biblioteket av matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)
MFRC522 -biblioteket for RFID -leseren (https://github.com/miguelbalboa/rfid)
Gå nå til main.ino og endre DEVEUI, APPEUI og APPKEY til de du kopierte forrige trinn.
Trinn 6: Konfigurere backend
Backend for dette prosjektet finner du på min GitHub, under RPI> Backend (https://github.com/BoussonKarel/CaptureTheBox).
Hvordan virker det?
- Hvert 10. sekund ser koden etter et aktivt spill. Hvis det blir funnet, blir det lagret i en variabel kalt huidigSpel (currentGame)
- Hvis modusen er satt til Seriell, brukes en kabel mellom Arduino og Pi. Pi måler for verdiene til LDR og GPS. Arduino reagerer med et JSON -format. RFID -tagger sendes når de presenteres. Denne modusen ble utelukkende brukt til utviklingsformål og er egentlig ikke nødvendig lenger.
- Hvis modusen er satt til LoRa, opprettes en MQTT -klient som utløser et tilbakeringing når LoRa -data mottas av TTN. Denne inneholder LDR-, GPS- og RFID -data.
- Frontend kan hente data ved hjelp av API -endepunktene. De fleste dataene hentes ved hjelp av huidigSpel.id. Data returneres i JSON -format ved hjelp av jsonify ()
Endre innstillingene Gå til secrets.py og fyll ut navnet på LoRa -applikasjonen og Acces Key (du skrev ned tidligere).
Gå til config.py og fyll ut databasens legitimasjon (for eksempel passord, bruker …)
Sette den opp som en tjeneste Prøv å kjøre app.py, når du har bekreftet at dette fungerer, kan vi bruke det som en tjeneste. Dette starter koden automatisk i bakgrunnen når du starter opp pi -en.
For å gjøre dette, kopier ctb_service.service til /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service
Aktiver det nå med systemctl enable ctb_service.service
Hvis du trenger å gjøre noen endringer i koden, kan du enkelt stoppe den ved å bruke systemctl stop (dette starter opp igjen ved omstart) eller deaktivere er (stopp den fra å starte automatisk) ved å bruke systemctl deaktivere.
Hvis du trenger å se loggene (på grunn av feil), kan du bruke journalctl -u ctb_service.service.
Mer informasjon om tjenester finner du her:
Trinn 7: Sette opp frontend
Som vanlig kan frontend finnes på min GitHub, under RPI> Frontend (https://github.com/BoussonKarel/CaptureTheBox)
Lim dette inn i /var /html -mappen på din Raspberry Pi.
Denne inneholder alle nødvendige websider for spillet.
Den inneholder også et skript for å kommunisere med backend (både sanntid og bruk av API -endepunktene).
Trinn 8: Legge til et deksel
I saken brukte jeg en gammel verktøykasse, sammen med følgende materialer/teknikker:
- 3D -utskrift
- Skum for å holde batteriet på plass
- Resirkulerte treplanker
- Varmt lim
- Skruer og muttere
Det du gjør med saken din er ditt valg! Jeg skal gi deg kunstnerisk frihet.
For inspirasjon har jeg lagt til noen bilder av min (ferdige) sak.
Anbefalt:
Reparasjon av strømforsyning til Android TV -boksen: 5 trinn (med bilder)
Reparasjon av strømforsyning til Android TV -boksen: Hei alle sammen, jeg fikk denne Android TV -boksen til å reparere den, og klagen var at den ikke ville slås på. Som et ekstra symptom ble jeg fortalt at flere ganger tidligere måtte kabelen vrises nær strømkontakten for at boksen skulle slå seg på
Min egen versjon av den ubrukelige boksen: 4 trinn
Min egen versjon av den ubrukelige boksen: For kveldskursene om Arduino (CVO Volt - Arduino) jeg følger, trengte vi å lage personlige prosjekter. Jeg bestemte meg for å kombinere to teknikker som Arduino og laserskjæring. Jeg lærte å bruke en laserskærer under en annen kveldstime som CVO
Boksen irritasjon: 3 trinn
Box of Annoyance: Dette er en instruerbar måte å lage en boks med irritasjon på. Det er en doosje som kan brukes til å produsere forskjellige volumer
Lag din egen iPod Nano-dokkingstasjon med objekter utenom boksen: 6 trinn
Lag din egen Ipod Nano-dokkingstasjon med objekter utenom boksen. Vel, du har nettopp fått din nye iPod nano. Den eneste tanken du trenger er en brygge. Dessverre mangler du litt penger. Bare lag det selv! … Hvis du bestemmer deg for å lage dette, vennligst vis meg hvordan det kom ut
Hvordan enkelt sikkerhetskopiere Linux-boksen din ved hjelp av Rdiff-backup: 9 trinn
Hvordan enkelt sikkerhetskopiere Linux-boksen din ved hjelp av Rdiff-sikkerhetskopiering: Denne instruksen viser deg hvordan du kjører et enkelt fullstendig sikkerhetskopierings- og gjenopprettingssystem på Linux ved hjelp av rdiff-backup og en USB-stasjon