Sommario:

Cattura la scatola: 8 passaggi
Cattura la scatola: 8 passaggi

Video: Cattura la scatola: 8 passaggi

Video: Cattura la scatola: 8 passaggi
Video: I 5 Video più Spaventosi registrati in un Obitorio 2024, Dicembre
Anonim
Cattura la scatola
Cattura la scatola
Cattura la scatola
Cattura la scatola

Capture The Box è un gioco di team building che puoi giocare con gli amici del tuo quartiere.

L'obiettivo è quello di catturare la scatola e tenerla in tuo possesso il più a lungo possibile mentre altri giocatori cercano di portarla via di nascosto dal tuo portico o dal tuo giardino.

Questo gioco utilizza il GPS per individuare la scatola e i tag RFID per identificare i giocatori. È possibile aggiungere un LDR opzionale per abbinare l'intensità del display a matrice di punti con la percentuale di luce nell'area.

Forniture

Microcontrollori e computer

  • Lampone Pi
  • Arduino (Mega) Ho scelto un Arduino Mega rispetto a uno normale Uno, perché ha molti più pin. Questo è necessario perché stiamo usando uno scudo Dragino LoRa, che ci lascerebbe con troppi pochi pin digitali quando si utilizza un UNO. SUGGERIMENTO: è meglio usarne uno genuino, perché i cloni cinesi non funzionano sempre come previsto.

Sensori e moduli

  • 4 moduli a matrice di punti MAX7219 Collegare DOUT a DIN, CS a CS, CLK a CLK…
  • Resistenza dipendente dalla luce (10K) + resistenza (10K)
  • Modulo GPS NEO-7M (o simile) Sto usando il VMA430 di Velleman
  • Modulo RFID RC522 + alcuni badge/carte RFID

Per l'utilizzo di LoRa (tecnologia wireless)

Dragino Lora Scudo

Sensori e moduli opzionali

Un display LCDPer visualizzare l'indirizzo IP del Raspberry Pi

Per eseguire una configurazione di prova

Una breadboard e cavi Dupont (maschio-maschio

Opzionale (involucro)

  • Saldatore
  • Una vecchia cassetta degli attrezzi
  • Materiali per la stampa 3D
  • Alcune sottili assi di legno
  • Alcuni bulloni e dadi (che possono essere inseriti nei fori di Arduino). Le mie viti hanno un diametro di circa 3 mm.

Un prezzo stimato può essere trovato nella BOM (Bill of Materials), inclusa di seguito.

Passaggio 1: configurazione del Raspberry Pi

Il Raspberry Pi è il cuore del Progetto.

Verrà eseguito il frontend, il backend e il database. Sarà anche responsabile della comunicazione tra il backend e Arduino.

Per poter utilizzare il Raspberry Pi, dovremo fare quanto segue:

Parte 1: installa Raspbian su un Raspberry Pi

Un tutorial su come farlo può essere trovato qui:

Parte 2: Installa Raspbian su un Raspberry Pi Configurazione del WiFi di casa.

Questo può essere fatto usando wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Riavvia il Pi e dovresti vedere un indirizzo IP quando digiti ifconfig

Parte 3: installa il server web e il database

Una volta che hai il tuo Pi attivo e funzionante, è meglio cambiare la tua password. Questo può essere fatto con il comando passwd.

Una volta fatto, vai avanti e installa Apache, PHP, MariaDB e 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

Non dimenticare di impostare una password MySQL sicura.

Parte 4: installazione delle librerie Python necessarie

Per il backend, avremo bisogno di alcune librerie. Questi possono essere installati utilizzando il comando pip3.

pip3 installa mysql-connector-python

pip3 install flask-socketio

pip3 install flask-cors

pip3 installa geventpip3 installa gevent-websocket

pip3 installa ttn

Passaggio 2: disporre l'elettronica

Disporre l'elettronica
Disporre l'elettronica
Disporre l'elettronica
Disporre l'elettronica

Per far funzionare questo progetto, dobbiamo collegare tutta l'elettronica.

Lo scudo LoRa può essere facilmente posizionato. Basta allineare i pin con i pin del tuo Arduino.

Le altre connessioni sono descritte nel mio schema di Fritzing. Che può essere scaricato qui:

Passaggio 3: progettazione del database

Progettare il database
Progettare il database

Per poter memorizzare tutti i dati del gioco e dei sensori, ho realizzato alcune tabelle:

misurazione e sensoreLe misurazioni dei sensori, che si trovano nelle tabelle dei sensori. Contiene un riferimento al sensore, il valore della misurazione (es. coordinate: 51.123456; 3.123456) e un ID gioco opzionale (se un gioco era attivo durante la misurazione).

spelerI nomi dei giocatori e l'UID del loro badge RFID. Viene aggiunto un moderatore di campo opzionale, questa persona può modificare il gioco (ad esempio interrompendolo prima del tempo).

spelLe informazioni sul gioco (ora di inizio e di fine).

spel_has_spelerLa relazione tra spell e speller. Qui è dove i giocatori vengono assegnati a un gioco.

bezitIn questa tabella, il punteggio viene salvato. Contiene l'ID del gioco, l'ID del giocatore, l'ora in cui ha rubato la scatola e l'ora in cui l'ha persa (quando qualcun altro la ruba o quando il gioco finisce). Sottraendo l'ora di inizio dall'ora di fine, puoi calcolare il punteggio che ha ottenuto da quella cattura.

Un'esportazione del database può essere trovata sul mio GitHub (https://github.com/BoussonKarel/CaptureTheBox)

Apri sql in PHPMyAdmin / MySQL Workbench ed eseguilo. Il database dovrebbe ora essere importato.

Passaggio 4: creazione di un account su TTN

Passaggio 1: registrati per un account su TTN e crea un'applicazione

Crea un account su TheThingsNetwork, quindi vai su Console > Aggiungi applicazione.

Scegli un nome per la tua applicazione e fai clic su Aggiungi applicazione.

Passaggio 2: registra un dispositivo

Quando hai fatto la tua domanda, vai su Registra dispositivo.

Scegli un ID dispositivo, questo può essere quello che vuoi (purché sia una custodia a serpente) e fai clic su Registra.

Fai clic sull'icona Genera sotto Device EUI, così TTN ne genererà uno per te.

Passaggio 3: annotare le credenziali

Ora vai al tuo dispositivo e fai clic sull'icona del codice accanto a Device EUI, App EUI e App key. Ora dovrebbe apparire come un array di byte.

Prima di copiare, fai clic sul pulsante Cambia e assicurati che Dev EUI e App EUI siano LSB PRIMA.

La tua chiave app dovrebbe rimanere MSB FIRST (non cambiarla).

Avrai bisogno di queste chiavi nel passaggio successivo: Configurazione di Arduino.

Passaggio 4: annotare la chiave di accesso all'applicazione

Ora avremo bisogno di un'altra chiave per configurare MQTT sul nostro Raspberry Pi.

Vai alla tua applicazione e scorri verso il basso fino a Chiavi di accesso.

Avrai bisogno di questo nel passaggio Backend.

Passaggio 5: configurazione di Arduino

Il codice Arduino può essere trovato anche sul mio GitHub, sotto Arduino (https://github.com/BoussonKarel/CaptureTheBox)

Questo codice è suddiviso in più schede, per mantenerlo organizzato.

main.inoIl codice principale: dichiarazioni pin, setup() e loop()

0_LoRa.inoQuesto codice gestisce la comunicazione tramite LoRa.

Mette i dati dei tag LDR, GPS e RFID in una matrice di 13 byte e li invia a TheThingsNetwork.

1_LDR.inoUtilizzando analogRead(), misura la quantità di tensione sul resistore dipendente dalla luce.

Questo viene quindi convertito in una percentuale di luce (0 è niente, 100 è una torcia del cellulare).

2_GPS.ino Utilizza la comunicazione seriale utilizzando TX1 e RX1 (Serial1).

Utilizza i messaggi NMEA (i messaggi $GPRMC per la precisione) per trovare la latitudine e la longitudine della casella.

3_RFID.inoUtilizzando la libreria MFRC522, questo codice esegue la scansione di nuovi tag RFID. Ogni volta che ne è presente uno, viene archiviato come RFID_lastUID.

4_DotMatrix.inoQuesto codice viene utilizzato per inizializzare e impostare la visualizzazione a matrice di punti. Contiene le definizioni per l'animazione di caricamento ecc.

Configurarlo

Prima di poter caricare questo codice sul tuo Arduino, dovrai installare alcune librerie.

La libreria Arduino-LMIC di matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)

La libreria MFRC522 per il lettore RFID (https://github.com/miguelbalboa/rfid)

Ora vai su main.ino e cambia DEVEUI, APPEUI e APPKEY con quelli che hai copiato nell'ultimo passaggio.

Passaggio 6: configurazione del backend

Il backend per questo progetto può essere trovato sul mio GitHub, sotto RPI > Backend (https://github.com/BoussonKarel/CaptureTheBox).

Come funziona?

  1. Ogni 10 secondi, il codice cerca un gioco attivo. Se ne trova uno, viene salvato in una variabile chiamata huidigSpel (currentGame)
  2. Se la modalità è impostata su Seriale, viene utilizzato un cavo tra Arduino e Pi. Il Pi esegue il polling dei valori di LDR e GPS. L'Arduino risponde con un formato JSON. I tag RFID vengono inviati ogni volta che vengono presentati. Questa modalità è stata utilizzata esclusivamente per scopi di sviluppo e non è più necessaria.
  3. Se la modalità è impostata su LoRa, viene creato un client MQTT che attiva una richiamata ogni volta che i dati LoRa vengono ricevuti da TTN. Questo contiene dati LDR, GPS e RFID.
  4. Il frontend può recuperare i dati utilizzando gli endpoint API. La maggior parte dei dati viene recuperata utilizzando huidigSpel.id. I dati vengono restituiti in formato JSON utilizzando jsonify()

Modifica le impostazioniVai su secrets.py e inserisci il nome della tua applicazione LoRa e la tua chiave di accesso (che hai scritto prima).

Vai su config.py e inserisci le credenziali del tuo database (come password, utente…)

Configurarlo come servizio Prova a eseguire app.py, una volta confermato che funziona, possiamo usarlo come servizio. Questo avvierà automaticamente il codice in background quando avvii il tuo pi.

Per fare ciò, copia ctb_service.service in /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service

Ora abilitalo usando systemctl enable ctb_service.service

Se è necessario apportare alcune modifiche al codice, è possibile interromperlo facilmente utilizzando systemctl stop (questo si riavvierà al riavvio) o disable is (impedisce l'avvio automatico) utilizzando systemctl disable.

Se hai bisogno di consultare i log (a causa di errori), puoi usare journalctl -u ctb_service.service.

Maggiori informazioni sui servizi sono disponibili qui:

Passaggio 7: configurazione del frontend

Come al solito, il frontend può essere trovato sul mio GitHub, sotto RPI> Frontend (https://github.com/BoussonKarel/CaptureTheBox)

Incollalo nella cartella /var/html del tuo Raspberry Pi.

Questo contiene tutte le pagine web necessarie per il gioco.

Contiene anche uno script per comunicare con il backend (sia in tempo reale che utilizzando gli endpoint API).

Passaggio 8: aggiunta di un involucro

Aggiunta di un involucro
Aggiunta di un involucro
Aggiunta di un involucro
Aggiunta di un involucro

Per il caso, ho utilizzato una vecchia cassetta degli attrezzi, insieme ai seguenti materiali/tecniche:

  • Stampa 3D
  • Schiuma per mantenere la batteria in posizione
  • Assi di legno riciclati
  • Colla calda
  • Viti e dadi

Quello che fai con il tuo caso è una tua scelta! Ti darò la libertà artistica.

Per ispirazione, ho aggiunto alcune foto del mio caso (finito).

Consigliato: