Table des matières:

Capturez la boîte : 8 étapes
Capturez la boîte : 8 étapes

Vidéo: Capturez la boîte : 8 étapes

Vidéo: Capturez la boîte : 8 étapes
Vidéo: Démarrage d'un véhicule à boîte automatique 2024, Novembre
Anonim
Capturez la boîte
Capturez la boîte
Capturez la boîte
Capturez la boîte

Capture The Box est un jeu de teambuilding auquel vous pouvez jouer avec des amis de votre quartier.

Le but est de capturer la boîte et de la garder en votre possession aussi longtemps que possible pendant que d'autres joueurs essaient de l'éloigner de votre porche ou de votre jardin.

Ce jeu utilise le GPS pour localiser la boîte et des tags RFID pour identifier les joueurs. Un LDR en option peut être ajouté pour faire correspondre l'intensité de l'affichage à matrice de points avec le pourcentage de lumière dans la zone.

Fournitures

Microcontrôleurs et ordinateurs

  • Tarte aux framboises
  • Arduino (Mega) J'ai choisi un Arduino Mega plutôt qu'un Uno normal, car il a beaucoup plus de broches. Ceci est nécessaire car nous utilisons un shield Dragino LoRa, ce qui nous laisserait avec trop peu de broches numériques lors de l'utilisation d'un UNO. ASTUCE: Il est préférable d'en utiliser un authentique, car les clones chinois ne fonctionnent pas toujours comme prévu.

Capteurs et modules

  • 4 modules matriciels MAX7219Connectez DOUT à DIN, CS à CS, CLK à CLK…
  • Résistance dépendante de la lumière (10K) + Résistance (10K)
  • Module GPS NEO-7M (ou similaire) J'utilise le VMA430 de Velleman
  • Module RFID RC522 + quelques badges/cartes RFID

Pour utiliser LoRa (technologie sans fil)

Bouclier Dragino Lora

Capteurs et modules en option

Un écran LCDPour afficher l'adresse IP du Raspberry Pi

Pour faire une configuration de test

Une maquette et des câbles Dupont (Mâle-Mâle

Facultatif (boîtier)

  • Fer à souder
  • Une vieille mallette à outils
  • Matériaux pour l'impression 3D
  • Quelques fines planches de bois
  • Certains boulons et écrous (pouvant s'insérer dans les trous Arduino). Mes vis ont un diamètre d'environ 3 mm.

Un prix estimé peut être trouvé dans le BOM (Bill of Materials), inclus ci-dessous.

Étape 1: Configuration du Raspberry Pi

Le Raspberry Pi est le cœur du Projet.

Il exécutera le frontend, le backend et la base de données. Il sera également responsable de la communication entre le backend et l'Arduino.

Pour que nous puissions utiliser le Raspberry Pi, nous devrons procéder comme suit:

Partie 1: Installer Raspbian sur un Raspberry Pi

Un tutoriel sur la façon de le faire peut être trouvé ici:

Partie 2: Installer Raspbian sur un Raspberry PiConfigurer votre WiFi domestique.

Cela peut être fait en utilisant wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Redémarrez le Pi et vous devriez voir une adresse IP lorsque vous tapez ifconfig

Partie 3: Installer le serveur Web et la base de données

Une fois que votre Pi est opérationnel, il est préférable de changer votre mot de passe. Cela peut être fait avec la commande passwd.

Une fois cela fait, allez-y et installez Apache, PHP, MariaDB et 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

N'oubliez pas de définir un mot de passe MySQL sécurisé.

Partie 4: Installation des bibliothèques Python nécessaires

Pour le backend, nous aurons besoin de quelques bibliothèques. Ceux-ci peuvent être installés à l'aide de la commande pip3.

pip3 installer mysql-connector-python

pip3 installer flask-socketio

pip3 installer des flacons-cors

pip3 installer geventpip3 installer gevent-websocket

pip3 installer ttn

Étape 2: Disposition de l'électronique

Disposer l'électronique
Disposer l'électronique
Disposer l'électronique
Disposer l'électronique

Pour que ce projet fonctionne, nous devons connecter toute l'électronique.

Le bouclier LoRa peut être facilement mis en place. Alignez simplement les broches avec les broches de votre Arduino.

Les autres connexions sont décrites dans mon schéma de Fritzing. Qui peut être téléchargé ici:

Étape 3: Conception de la base de données

Conception de la base de données
Conception de la base de données

Pour pouvoir stocker toutes les données du jeu et des capteurs, j'ai fait quelques tableaux:

mesure et capteurLes mesures des capteurs, trouvées dans les tableaux des capteurs. Il contient une référence au capteur, la valeur de la mesure (par exemple les coordonnées: 51.123456; 3.123456) et un identifiant de jeu facultatif (si un jeu était actif pendant la mesure).

spelerLes noms des joueurs et l'UID de leur badge RFID. Un modérateur de champ facultatif est ajouté, cette personne peut modifier le jeu (par exemple, l'arrêter avant l'heure).

spelLes informations sur le jeu (heure de début et de fin).

spel_has_spelerLa relation entre spel et speler. C'est là que les joueurs sont affectés à un jeu.

bezitDans ce tableau, le score est enregistré. Il contient l'identifiant du jeu, l'identifiant du joueur, l'heure à laquelle il a volé la boîte et l'heure à laquelle il l'a perdue (quand quelqu'un d'autre la vole ou quand le jeu se termine). En soustrayant l'heure de début de l'heure de fin, vous pouvez calculer le score qu'il a obtenu à partir de cette capture.

Un export de la base de données se trouve sur mon GitHub (https://github.com/BoussonKarel/CaptureTheBox)

Ouvrez le SQL dans PHPMyAdmin / MySQL Workbench et exécutez-le. La base de données doit maintenant être importée.

Étape 4: Configuration d'un compte sur TTN

Étape 1: Créez un compte sur TTN et créez une application

Créez un compte sur TheThingsNetwork, puis accédez à Console > Ajouter une application.

Choisissez un nom pour votre application et cliquez sur Ajouter une application.

Étape 2: Enregistrez un appareil

Lorsque vous avez fait votre demande, allez dans Enregistrer l'appareil.

Choisissez un identifiant d'appareil, cela peut être celui que vous voulez (tant qu'il s'agit d'un boîtier serpent) et cliquez sur Enregistrer.

Cliquez sur l'icône Générer sous Device EUI, afin que TTN en génère un pour vous.

Étape 3: Notez vos identifiants

Allez maintenant sur votre appareil et cliquez sur l'icône Code à côté de Device EUI, App EUI et App key. Il devrait maintenant apparaître comme un tableau d'octets.

Avant de copier, cliquez sur le bouton Switch et assurez-vous que votre Dev EUI et App EUI sont LSB FIRST.

Votre clé d'application doit rester MSB FIRST (ne changez pas cela).

Vous aurez besoin de ces clés à l'étape suivante: Configuration de l'Arduino.

Étape 4: écriture de votre clé d'accès à l'application

Nous aurons maintenant besoin d'une clé supplémentaire pour configurer MQTT sur notre Raspberry Pi.

Accédez à votre application et faites défiler jusqu'à Clés d'accès.

Vous en aurez besoin à l'étape Backend.

Étape 5: Configuration de l'Arduino

Le code Arduino peut également être trouvé sur mon GitHub, sous Arduino (https://github.com/BoussonKarel/CaptureTheBox)

Ce code est divisé en plusieurs onglets, pour le garder organisé.

main.inoLe code principal: déclarations des broches, setup() et loop()

0_LoRa.inoCe code gère la communication à l'aide de LoRa.

Il place les données des balises LDR, GPS et RFID dans un tableau de 13 octets et les envoie à TheThingsNetwork.

1_LDR.inoEn utilisant analogRead(), il mesure la quantité de tension sur la résistance dépendante de la lumière.

Ceci est ensuite converti en un pourcentage de lumière (0 étant rien, 100 étant une lampe de poche pour téléphone portable).

2_GPS.inoCeci utilise la communication série en utilisant TX1 et RX1 (Serial1).

Il utilise des messages NMEA (les messages $GPRMC pour être précis) pour trouver la latitude et la longitude de la boîte.

3_RFID.inoÀ l'aide de la bibliothèque MFRC522, ce code recherche de nouvelles étiquettes RFID. Chaque fois qu'une est présente, elle est stockée sous le nom RFID_lastUID.

4_DotMatrix.inoCe code est utilisé pour initialiser et définir l'affichage de la matrice de points. Il contient des définitions pour l'animation de chargement etc…

Le mettre en place

Avant de pouvoir télécharger ce code sur votre Arduino, vous devrez installer quelques bibliothèques.

La bibliothèque Arduino-LMIC de matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)

La bibliothèque MFRC522 pour le lecteur RFID (https://github.com/miguelbalboa/rfid)

Maintenant, allez sur main.ino et remplacez DEVEUI, APPEUI et APPKEY par ceux que vous avez copiés à la dernière étape.

Étape 6: Configuration du backend

Le backend de ce projet se trouve sur mon GitHub, sous RPI > Backend (https://github.com/BoussonKarel/CaptureTheBox).

Comment ça marche?

  1. Toutes les 10 secondes, le code recherche un jeu actif. S'il en trouve un, il est enregistré dans une variable appelée huidigSpel (currentGame)
  2. Si le mode est défini sur Série, un câble est utilisé entre l'Arduino et le Pi. Le Pi interroge les valeurs du LDR et du GPS. L'Arduino répond avec un format JSON. Les balises RFID sont envoyées chaque fois qu'elles sont présentées. Ce mode était uniquement utilisé à des fins de développement et n'est plus vraiment nécessaire.
  3. Si le mode est défini sur LoRa, un client MQTT est créé qui déclenche un rappel chaque fois que des données LoRa sont reçues par TTN. Celui-ci contient des données LDR, GPS et RFID.
  4. L'interface peut récupérer des données à l'aide des points de terminaison de l'API. La plupart des données sont récupérées à l'aide de huidigSpel.id. Les données sont renvoyées au format JSON à l'aide de jsonify()

Modifiez les paramètres Allez sur secrets.py et renseignez le nom de votre application LoRa et votre Clé d'accès (que vous avez notée précédemment).

Allez sur config.py et remplissez vos identifiants de base de données (tels que mot de passe, utilisateur…)

Configurez-le en tant que serviceEssayez d'exécuter app.py, une fois que vous avez confirmé que cela fonctionne, nous pouvons l'utiliser en tant que service. Cela démarrera automatiquement le code en arrière-plan lorsque vous démarrerez votre pi.

Pour ce faire, copiez ctb_service.service dans /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service

Activez-le maintenant à l'aide de systemctl enable ctb_service.service

Si vous devez apporter des modifications au code, vous pouvez facilement l'arrêter à l'aide de systemctl stop (cela redémarrera au redémarrage) ou désactiver is (l'empêcher de démarrer automatiquement) à l'aide de systemctl disable.

Si vous devez consulter les logs (à cause d'erreurs), vous pouvez utiliser journalctl -u ctb_service.service.

Plus d'informations sur les services peuvent être trouvées ici:

Étape 7: Configuration du frontend

Comme d'habitude, le frontend se trouve sur mon GitHub, sous RPI > Frontend (https://github.com/BoussonKarel/CaptureTheBox)

Collez-le dans le dossier /var/html de votre Raspberry Pi.

Celui-ci contient toutes les pages Web nécessaires au jeu.

Il contient également un script pour communiquer avec le backend (à la fois en temps réel et en utilisant les points de terminaison de l'API).

Étape 8: Ajout d'un boîtier

Ajout d'un boîtier
Ajout d'un boîtier
Ajout d'un boîtier
Ajout d'un boîtier

Pour la mallette, j'ai utilisé une vieille mallette à outils, ainsi que les matériaux/techniques suivants:

  • impression en 3D
  • Mousse pour maintenir la batterie en place
  • Des planches de bois recyclées
  • Colle chaude
  • Vis et écrous

Ce que vous faites avec votre cas est votre choix ! Je vais vous donner la liberté artistique.

Pour l'inspiration, j'ai ajouté quelques photos de mon étui (fini).

Conseillé: