Table des matières:

Jeu de tir Arduino V3 : 4 étapes
Jeu de tir Arduino V3 : 4 étapes

Vidéo: Jeu de tir Arduino V3 : 4 étapes

Vidéo: Jeu de tir Arduino V3 : 4 étapes
Vidéo: Westernduino, Arduino Tutoriel Jeu de Tir 2024, Juillet
Anonim
Image
Image
Jeu de Tir Arduino V3
Jeu de Tir Arduino V3
Jeu de Tir Arduino V3
Jeu de Tir Arduino V3
Jeu de Tir Arduino V3
Jeu de Tir Arduino V3

Ce jeu est fait pour vous qui utilisez l'airsoft ou le co2 pour tirer sur des cibles. C'est un jeu.

Pour des informations à jour sur le jeu et l'assistance:

www.facebook.com/arduinoshooting/

Pour ma page de blog sur le jeu:

shootinggameblog.wordpress.com

Pour les codes du jeu:

github.com/shootinggame82/Shooting-game-v3

Le jeu de tir est composé de x cibles sans fil, chaque cible a un capteur de vibration qui détecte les vibrations qui se produisent lorsqu'un coup est effectué. Les capteurs sans fil sont une puce Atmega328 (puce Arduino Uno) et rechargent la batterie Li-Po.

Le contrôleur principal de ce jeu est contrôlé par un Arduino et est contrôlé en série à partir d'un Raspberry Pi.

Alors comment fonctionne ce jeu ?Eh bien c'est 3 modes de jeu:

Quicktime: jouez X tours et tirez si vite que vous le pouvez sur chaque cible.

Mode temporel: tirez sur autant de cibles que possible en X secondes.

Rapidfire: Tirez X coups dans le temps le plus rapide.

Le système utilise des émetteurs NRF24L01 pour obtenir une bonne distance du contrôleur principal. Ils fonctionnent sur 2,6 GHz (le même que le WiFi fonctionne)

Dans mes projets précédents, j'ai utilisé Piezo pour la vibration, mais maintenant, le commutateur de capteur de vibration est utilisé. Mais vous pouvez toujours utiliser Piezo si vous avez créé mon ancienne version de ce jeu.

Le jeu dispose d'un écran tactile Raspberry Pi 7 qui contient le système Web via lequel vous contrôlez le jeu. Une imprimante de terminal imprime les résultats.

Fournitures

Pour les émetteurs:

  • X Atmega328 avec Arduino Bootloader (selon le nombre de cibles)
  • X Commutateur de capteur de vibration
  • X Led Bleu
  • X LED verte
  • X LED rouge
  • X 3.7v Li-Po batterie
  • Module chargeur X FC-75 Li-Po (ou autre modèle)
  • Condensateur X 100 uF
  • X Boîtiers pour les capteurs
  • X LD1117V33 (Rend un 3,3 V sûr à l'émetteur)
  • X modules NRF24L01
  • X x 3 résistances 220 Ohm (3 sont nécessaires pour une cible)
  • X 16 MHz Cristal
  • X x 2 Condensateurs non explorés 22 pF (2 sont nécessaires pour une cible)

Pour l'Arduino principal:

  • 1 Arduino (Nano ou Uno est recommandé, besoin d'un port USB)
  • 1 module NRF24L01
  • 1 condensateur de 10 uF

Pour la framboise Pi:

  • Raspberry Pi (j'ai utilisé 3B)
  • Écran tactile 7"
  • ATXRaspi (En option mais un bon module de bouton d'alimentation)
  • RTCRaspi (Optionnel mais un bon module RTC pour garder l'heure et la date)
  • Imprimante thermique (facultatif mais nécessaire pour pouvoir imprimer)
  • Scanner de code-barres (version USB qui fonctionne comme un clavier, en option)
  • Bonne alimentation 5V (j'ai utilisé un vieil USB 12v avec une alimentation 2,5 A)

D'autres choses:

  • Alimentation 12v (j'en ai un à 12 Ah)
  • Prise réseau (facilitez la connexion au réseau)
  • Câbles

Étape 1: Les capteurs sans fil

Les capteurs sans fil
Les capteurs sans fil
Les capteurs sans fil
Les capteurs sans fil
Les capteurs sans fil
Les capteurs sans fil

Commençons par fabriquer les capteurs. J'utilise 4 capteurs pour ce jeu. Mais vous pouvez facilement ajouter plus de capteurs. Les capteurs communiquent avec un code à 4 chiffres lorsque le système principal envoie le code avec quelle fonction le capteur avec le bon code s'allumera et sera prêt pour la cible. La lumière bleue indique que c'est cette cible que vous allez atteindre.

Nous avons également une led verte et une led rouge. Le vert s'allume toujours pour informer que le capteur est allumé. Le rouge ne s'allumera que lorsque la batterie est inférieure à 3,1 V (il utilise la fonction intégrée dans la puce pour calculer combien il y a dans la batterie.

Le capteur de vibration est connecté à la broche analogique et lit sa valeur. Lorsque la valeur baisse, le capteur capte une vibration et c'est là que nous enregistrons le coup.

La cible a une fonction de sécurité intégrée, au cas où vous ne frapperiez pas dans X secondes (la valeur par défaut est de 15 secondes) ou si la transmission ne peut pas être effectuée, elle reviendra à la position de départ.

Je ne vais pas expliquer comment vous allez câbler, vérifiez la fiche électrique pour voir comment vous allez faire cela. La seule chose qui n'est pas dessus, c'est la batterie, l'interrupteur d'alimentation et le chargeur. C'est à vous de décider comment vous le voulez.

IMPORTANT À PROPOS DU Module NRF24L+:

Cela peut être pénible… de les rendre stables, combinés à une bonne puissance et à une bonne isolation, et au code que vous leur ferez fonctionner. Pour moi, un condensateur de 10 uF me donnera une connexion stable et bonne, mais essayez d'abord si vous avez besoin par exemple d'un condensateur de 100 uF. Enveloppez-les également d'abord de papier d'aluminium, puis de papier d'aluminium pour les protéger des interférences

Également dans le code, le débit de données dont vous n'avez pas besoin de plus de 250 Ko, ce ne sera donc pas le problème. Mais le PA: myRadio.setPALevel(RF24_PA_MIN);

Dans le code que j'ai défini sur MIN (c'est pendant le test), c'est le plus bas et n'utilisera pas autant d'énergie, mais la portée ne sera pas si longue. Si vous leur avez une puissance stable et bonne, vous pouvez aller jusqu'à RF24_PA_MAX pour obtenir la plus longue portée, MAIS ils ont besoin d'une puissance stable GOOOOOD pour cela. Essayez également LOW AND HIGH (Modifiez le texte MAX uniquement) pour voir si vous obtenez une bonne communication. De plus, vous obtiendrez une bonne portée sur LOW et HIGH, à moins que vous ne soyez un tireur d'élite

Gardez également les émetteurs à au moins un mètre l'un de l'autre, car les fermer peut détériorer le signal

Testez la communication avec un exemple de ping dans la bibliothèque NRF24 (lien sur GitHub)

Dans le code, vous devez définir le numéro d'identification unique pour cette cible:

int targID = 3401; //C'est l'identifiant de la cible

int ID d'envoi = 2401; //C'est l'identifiant de la réponse

Il existe également 3 fonctions DEFINE:

#define DEBUG

#définir la BATTERIE

#define SHAKE //SI SHAKE SWITCH EST UTILISÉ À LA PLACE DE L'ANCIEN PIEZO

DÉBOGUER:

Pendant le test, il est bon d'avoir défini. Mais lorsque vous les rendez disponibles, ne l'activez pas.

BATTERIE:

Si vous ne voulez pas avoir de vérificateur de batterie pour les cibles, vous devez supprimer cette définition.

SECOUER:

Si vous avez construit mon ancienne version, vous avez des capteurs piézo, puis supprimez-le pour obtenir le code correct pour eux.

Puce ATMEGA328

Au lieu d'un Arduino nano, j'ai décidé d'utiliser la puce ATMEGA328 (avec le chargeur de démarrage Uno), ils sont simples à programmer, il suffit de retirer la puce d'un Arduino Uno et d'ajouter cette puce et de télécharger le code. Vérifiez le schéma électrique sur la façon de construire les cibles.

Le code

J'ai écrit le code avec PlatformIO au lieu d'Arduino IDE. C'est un meilleur logiciel pour programmer. Le code est donc un peu différent. Je recommande d'utiliser ce logiciel à la place.

Le boîtier cible et émetteur

J'ai attaché le capteur et la led bleue sur la cible, et avec un câble phono de 3, 5 mm sur 2 m je le connecte ensemble dans le boitier émetteur qui contient la puce atmega, le chargeur de batterie et la led verte & rouge. Il s'agit de le protéger des coups de balles en acier.

Étape 2: le contrôleur de jeu

Le contrôleur de jeu
Le contrôleur de jeu
Le contrôleur de jeu
Le contrôleur de jeu
Le contrôleur de jeu
Le contrôleur de jeu
Le contrôleur de jeu
Le contrôleur de jeu

La prochaine chose que nous devons faire est de créer le contrôleur pour les capteurs. C'est un Arduino qui utilise un module NRF24L01 pour communiquer avec les capteurs. Rien d'autre. L'Arduino est ensuite connecté en USB dans le raspberry pi pour fonctionner.

C'est ainsi que cela fonctionnera. Il utilise la série pour savoir quoi faire. Le pi enverra des commandes série. Tout d'abord, lors de la configuration, il envoie le nombre de cibles que vous avez ajoutées et les numéros d'identification des cibles. Ensuite, il effectuera la fonction de test et informera le raspberry pi s'ils communiquent entre eux.

Lorsque vous jouez au jeu, il enverra à partir de pi quel type de jeu et combien de tours/coups utiliser. C'est ça.

Il est possible d'utiliser les modules NRF24L01 dans le raspberry pi, mais pour moi l'Arduino est une meilleure option car je ne les utilise jamais dans le raspberry donc je ne sais pas à quel point ils fonctionnent bien sur le long terme

Il existe un module d'alimentation qui utilise 5 v pour fournir une alimentation stable et correcte aux émetteurs. Vous pouvez les utiliser avec vous Arduino (voir l'image) le nom est Socket Adapter Module Board

Lorsque vous jouez, les cibles seront activées aléatoirement une par une. Quand l'un est touché, un autre sera activé.

Pendant le test, vous pouvez activer #DEFINE DEBUG pour voir comment cela fonctionne, mais pas lorsque vous l'utilisez dans l'ordinateur pi, cela ne fonctionnera pas alors.

Téléchargez le code sur la page GitHub.

Étape 3: Raspberry Pi

Tarte aux framboises
Tarte aux framboises
Tarte aux framboises
Tarte aux framboises
Tarte aux framboises
Tarte aux framboises
Tarte aux framboises
Tarte aux framboises

Nous arrivons maintenant au Raspberry Pi.

J'ai ajouté quelques fonctions supplémentaires pour que je puisse avoir un bouton d'alimentation. L'ATXRaspi 3 est un excellent module, vous pouvez allumer, éteindre et redémarrer le pi avec un bouton. Également un RTCRaspi pour garder l'heure et la date sur le pi. A également permis de simplement brancher un câble réseau au cas où j'aurais besoin de faire des mises à jour sur le système. Vous les trouverez sur Lowpowerlab

L'imprimante thermique que vous trouverez sur sparkfun et le lecteur de code-barres sont disponibles sur amazon.

L'ordinateur Pi fonctionne en mode kiosque afin que le navigateur s'ouvre au démarrage. Tout d'abord, vous devez disposer d'un serveur Web avec PHP 7 et mysql sur l'ordinateur pi. (Il y a beaucoup de guides sur le web pour cela)

VEUILLEZ NOTER: si vous envisagez d'utiliser une imprimante thermique avec Raspberry Pi qui a intégré Bluetooth, vous devez d'abord la désactiver

Le script python a besoin de pyserial et vous l'installez: sudo apt-get install python-serial

Pour faire fonctionner mysql, installez ce qui suit:

sudo apt-get install mysql-python sudo apt-get install python-mysql.connector

suso apt-get installer pymysql

Maintenant, vous pouvez contrôler votre Arduino via la série et également mettre à jour la base de données mysql.

L'étape suivante consiste à créer un script python pour se connecter à mysql.

Dans les trois scripts python, modifiez la connexion à votre base de données mysql.

L'étape suivante consiste à exécuter le script python au démarrage.

Il y a trois script python.game.py est le plus important de tous, celui-là détient la fonction de jeu.print.py cela n'est nécessaire que si vous allez utiliser une imprimante thermique pour imprimer.ean.py n'est nécessaire que si vous êtes va utiliser le lecteur de codes-barres.

Pour les faire démarrer automatiquement, j'édite:

sudo nano /etc/rc.local

et ajoutez ce qui suit en bas avant la sortie 0:

sudo python /home/pi/Gamefiles/game.py &sudo python /home/pi/Gamefiles/print.py &sudo python /home/pi/Gamefiles/ean.py &

Veuillez changer à la place correcte pour votre script python et n'oubliez pas le signe & à la fin

Maintenant, nous devons créer un mode kiosque pour le navigateur Web, supprimez d'abord le curseur:

sudo apt-get install unclutter

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart

maintenant dans ce fichier, recherchez et commentez:

@xscreensaver -no-splash # commentez cette ligne pour désactiver l'économiseur d'écran

Ci-dessous, ajoutez:

@xset s off @xset -dpms @xset s noblank @chromium-browser --noerrdialogs --force-device-scale-factor=1.25 --kiosk

Prochaine étape pour supprimer tous les textes de démarrage et autres éléments, ajoutez également votre propre écran de démarrage, voici un guide rapide:

sudo nano /boot/config.txt et en bas adddisable_splash=1

Supprimer le message texte sous l'image de démarrage:

sudo nano /usr/share/plymouth/themes/pix/pix.script

Rechercher et supprimer (ou commenter):

message_sprite = Sprite();message_sprite. SetPosition(screen_width * 0.1, screen_height * 0.9, 10000);

et:

my_image = Image. Text(text, 1, 1, 1);message_sprite. SetImage(my_image);

Maintenant, nous supprimons les messages de démarrage:

sudo nano /boot/cmdline.txt

remplacer "console=tty1" par "console=tty3"

et à la fin de la ligne ajouter:

splash tranquille plymouth.ignore-serial-consoles logo.nologo vt.global_cursor_default=0

Et remplacez le pi splash par le vôtre:

sudo cp ~/my_splash-p.webp" />

Vous avez maintenant votre propre écran de démarrage personnalisé pour votre jeu. Votre ordinateur pi est maintenant prêt à gérer le jeu. Passons donc à l'étape suivante !

Étape 4: Configurer le jeu

À ce stade, vous avez maintenant créé le jeu.

Vous devez d'abord configurer le webbsystem. Téléchargez la base de données sur votre serveur mysql. Le fichier est dans le dossier include et nommé database.sql

L'étape suivante consiste à éditer le fichier de configuration, vous le trouverez dans le nom du dossier include config.php Modifiez les informations de connexion à la base de données pour que le script fonctionne.

Le système Web est basé sur plusieurs langues et est écrit en anglais. Il y a une traduction suédoise disponible. Pour faire plus de langue, vous avez besoin d'un logiciel nommé Poedit.

Pour ajouter plus de langue au système Web, vous devez éditer i18n_setup.php et ajouter dans le tableau:

return in_array($locale, ['en_US', 'sv_SE']); (Ligne 23)

Aussi pour changer la langue par défaut, vous devez changer à la ligne 27: $lang = 'en_US'; changez l'en_US en votre langue.

les fichiers de langue doivent être placés dans locales/LANGCODE/LC_MESSAGES/ et être nommés main.mo (changer le code de langue en votre langue)

pour changer le clavier dans le fichier selectplayers.php vous changez la langue: "en", //en pour l'anglais sv pour le suédois mise en page: 'qwerty', //qwerty pour l'anglais suédois-qwerty pour le suédois

Vous les trouvez aux lignes 218 & 219

Les langues disponibles sont dans le dossier: assets/js/keyboard/languages & layouts sont dans assets/js/keyboard/layouts et ajoutez les bons fichiers aux lignes 118 et 119 (remplacez celui que vous y trouvez maintenant)

Ajouter des cibles

Pour ajouter des cibles, accédez à localhost/admin/ et cliquez sur ajouter des cibles.

Vous devez ajouter un nom pour la cible et l'ID de cible unique et l'ID d'envoi, ajoutez autant de cibles que vous avez.

Ajouter des jeux

Vous devez également ajouter des jeux. Allez sur localhost/admin/ et cliquez sur ajouter un jeu

Vous devez ajouter un nom pour le jeu, une description, le nombre de joueurs minimum et maximum quel type de jeu, ainsi que la difficulté du jeu entre 1 et 5. Et comment est le jeu, donc pour le jeu rapidfire, vous ajoutez combien de coups (exemple 30) pour la dégaine combien de tours (par exemple 8) et pour combien de temps ils vont jouer (par exemple 60 pour une minute)

Commencer le jeu

Lorsque vous allumez le jeu, il effectuera le test cible. Les cibles doivent donc être activées avant de démarrer le système principal. Si tous réussissent le test, vous pouvez utiliser le système, mais s'ils ne le font pas, vous ne pouvez pas l'utiliser. Il essaiera de communiquer jusqu'à ce qu'ils obtiennent une réponse.

Bonne chance

Eh bien, c'est à peu près tout, pour obtenir de l'aide et des informations sur la mise à jour du code, veuillez suivre ma page Facebook pour ce jeu, afin que je puisse vous répondre rapidement. Vous trouverez des liens en haut ici.

Conseillé: