Westernduino, arduino Tutoriel Jeu de Tir

Medium rg westernduino final

Difficulté:

Aujourd'hui on attaque un tuto un peu plus complexe, la fabrication d'un Jeu de Tir avec Arduino ! Je me suis lancé un défi en participant au challenge des makers (http://ouiaremakers.com/ ) de fabriquer un jeu et de vous donner les étapes nécessaires à sa réalisation. Il y à certains composants que j'utilise pour lesquels je n'ai pas encore fait de tuto dessus pour leur fonctionnement mais j'y reviendrai plus tard. Le niveau en programmation est plus élevé que le tuto du feu tricolore, je vous invite à regarder la vidéo pour comprendre le mécanisme pour vous aussi faire votre jeu à l'aide des instructions.

Matériel

Budget:

50 €
  • 2 arduino nano ou mini pro 5V
  • 3 régulateur de tension 5V L7805
  • 6 condensateurs 25v 10μF
  • 1 condensateur 16V 470μF
  • 3 résistances 1kΩ
  • 3 résistances 220Ω
  • 3 photorésistances
  • 2 boutons
  • 3 servo 9g S90
  • 1 buzzer ( option )
  • 1 transistor TIP120
  • 1 module laser 5V
  • 1 transformateur 12V
  • 1 pile 9v et de quoi la connecter
  • des fils de couleurs
  • un pistolet en plastique vide a l'intérieur
  • bois pour le support

Etape 1 : Le cablage

Medium jeutir v10

Je passe aux explications de câblage partie cibles.
Commençons par la partie alimentation, on reçoit ici du 12V avec un transformateur ( 1A minimum voir 2A quand on ajoutera de l’affichage pour la V2).
On transforme notre 12V en 5v avec nos régulateurs de tension L7805, j’en ai mis 2 car les servo demandent pas mal de puissance et donc chauffent beaucoup (je rajouterai sûrement des radiateurs plus tard dessus).
En vue de face la borne de gauche du régulateur récupère le 12V+ , le centre la masse et à droite le 5V+ , on y ajoute 2 condensateurs 25v 10μF pour lisser la tension.
Ensuite entre le 5V et la masse j’ai un condensateur pour les servo pour réguler les pics de tension lors de leurs utilisations.
Les bornes des servo son chacunes branchées sur le 5V et la masse.
J’ai un petit montage pull down pour mon bouton start, une résistance 1kΩ entre la masse et le bouton qui est aussi relié au pin 8 et l’autre côté du bouton est relié au 5V
Mon buzzer relié entre la masse et le pin 9 de l’arduino.
Et mes photorésistances relié au 5v d’un côté et de l’autre aux pin A0,A1,A2 ; chaque photo résistance sont reliées à la masse avec une résistance de 220Ω.
Et je n’oublie pas de relier l’arduino au 5V.
ATTENTION les arduino mini pro sont 5v ou 3.3V et ils n’ont pas d’entrée Vin donc on doit obligatoirement leur fournir la tension nécessaire ici 5V !

Le câblage du pistolet fonctionne sur le même principe niveau régulateur de tension, 5V en sortie.
Montage pull down pour le bouton de tir comme pour le bouton start mais ici pin 3 sur l’arduino.
Sur le pin 4 on connecte une résistance 1kΩ relié a la borne de gauche du transistor TIP120, la borne du millieu relié a la masse du laser et borne de droite a la masse du circuit et je n’oublie pas de relier le fil positif du laser au 5V.

Etape 2 : Vidéo du tuto pour réaliser votre Westernduino

Retrouve aussi le tuto sur mon blog http://retroetgeek.com/geek/arduino-tutoriel-jeu-de-tir-westernduino/
On passe par l’explication du code !

Codes des cibles ( à télécharger à la fin)

Au début de mon programme je défini mes pin avec les cibles ,servo bouton et buzzer (j’aurai du définir mes pin avec des #define et pas des int, cela prends moins de place, mais cela fonctionne quand même).

Des variables de moyenne pour mes photorésistances, un tableau pour contrôler quelle cible est levée et d’autres petites variables.

Les round sont les tableaux qui contiennent les ordres des servos et des séquences de jeu.

Trois informations à l’intérieur , le temps en ms , le numéro du servo et l’angle à atteindre.

La variable tempsRound contient la durée du round du jeu.

Encore 2 variable de temps et séquence pour le jeu.

Les points du jeu qui ne sont pas utilisé ici ( pour la v2 oui ) mais comptés quand même.
On inclus une bibliothèque pour les notes du buzzer et les commandes servo
J’appelle mes servo et je les insères dans un tableau.

J’ai ensuite mes différentes variables pour jouer des mélodies, puis des tableaux contenant actuellement 2 mélodies et un tableau contenant le temps des notes.

Partie setup ou j’ai activé le serial pour contrôler quelques informations et je défini mes pin en entrée.
J’ai une fonction unlockServos pour attacher mes servo et les positionner en position basse.
LockServos détache les servo pour éviter que les perturbations électrique fasse bouger les servos.
initSensorLight ici est commenté dans le setup car on l’utilise à chaque démarrage de round de jeu.

Partie loop je contrôle l’état du bouton start pour démarrer le jeu si il est à l’état HIGH et je défini start a 1, les points a 0 et j’arrête la musique si elle est en cours.
 On continue avec un switch pour aiguiller le jeu, pour start égal a 1 on démarre le round1, même chose pour le 2 round2 et j’ai mon cas de défaut ou je joue la musique et je relance la musique toutes les 60 secondes si aucun round n’est choisi.

Venons en a nos fonctions , initSensorLight  sert à faire une moyenne sur nos photorésistances , on récupère 10 valeurs sur chaque photorésistance et on fait sa moyenne pour mieux détecter les variations de chaque capteur qui peut être différent.

La fonction preStart remet à 0 les point de la manche , appelle initSensorLight et fait un décompte avant de lancer la séquence de round.

Autre fonction scoreManche pour terminer la séquence de jeu avec une mélodie et l’affichage des score en V2.

Notre fonction demarrerRound est la plus importante car elle gère la séquence de jeu, en argument on a le temps du jeu et la séquence de jeu.
Je débloque les servo avec unlockServos puis un preStart pour lancer le décompte.
J’ai une boucle qui va tourner tant que le temps n’est pas écoulé et je vais activer mes actions au fur et à mesure de l’avancement du temps et faire bouger mes servos; j’autorise mes cibles quand elles montent pour que l’on puisse tirer dessus.
Puis j’ai mes différents contrôle des cibles quand elles sont activées je vérifie si leurs valeurs est supérieures à 50 par rapport a leur moyenne.
Si une cible est touchée elle redescend, un bip retenti et je compte 1 point.
Hors de ma boucle de temps on incrémente la valeur de start pour passer à la séquence de jeu suivante, je bloque mes servos et j’appelle scoreManche.

Encore une fonction cette fois ci pour jouer de la musique , jouerMusique lui retourne une valeur , true ou false pour me prévenir quand la musique est terminée.
boolMelody permet de lire la musique ou non , je récupère la durée de note de la melodie sélectionnée, je contrôle que je ne joue pas 2 fois la même note ( car ici je ne bloque pas mon arduino pendant le temps d’attente ). Je calcule mes temps de pause entre les notes et je progresse dans la mélodie suivant le temps .
A la fin si j’arrive au bout de mon tableau ou que une durée de note est égal a 999 alors je pourrai terminer la mélodie.
Et dernière fonction pour arrêter la musique avec stopMusique.

Code du pistolet (à télécharger à la fin)
Idem que pour les cible on initialise les pin nécessaires pour notre arduino, le bouton pour tirer et la commande du laser.
Aprés quelques variables pour notre programme pour éviter que le laser soit constamment allumé shootLaser et multiShoot.
Deux variable de temps pour séquencer le laser avec tempsLaser et tempsPause.
Partie setup on initialise le pin du bouton en INPUT et le laser en OUTPUT.
Dans mon loop j’ai une condition qui contrôle que le bouton est appuyé et que multiShoot est supérieur à 2 car dans ma condition quand mon bouton est a l’état bas d’incrémente multishoot ( on doit passer pas l’état bas au moins 3 itérations pour pouvoir retirer ).
Puis dernière condition qui nous permet d’activer le laser, allume le laser un temps, puis l’éteint.

J’en ai terminé avec le fonctionnement du programme, c’est assez lourd à expliquer mais j’espère que vous avez compris l’essentiel.

Je vous met le code à télécharger pour réaliser votre jeu, vous allez pouvoir rajouter des niveaux, les modifier et faire ce que vous voulez avec.

Télécharger les codes : Westernduino_V1

La fabrication :

Pour le support des cibles j’ai construit le base en bois de taille 50cm de long sur lesquels j’ai collé au pistolet à colle mes servo.
Pour lever les cibles j’ai utilisé des bâtons de glaces sur lesquels j’ai collé mes photorésistances; le tout est démontable ou non.
Et pour les cibles j’ai utilisé du carton plume sur lequel j’ai collé ce que je souhaite et j’ai découpé tout cela, j’ai crée 2 points d’encrage pour les bâtonnets de glace et c’est parti.
Je referai toute la structure pour que ce soit joli et pratique à utiliser dans une version 2.

Télécharger les cowboys : Cowboy

Niveau pistolet j’ai acheté un pistolet que j’ai trouvé dans une boutique de déguisement, j’ai cherché un pistolet assez grand et vide a l’intérieur pour un mettre l’électronique.

Si tu souhaites réaliser ce même jeu libre à toi de trouver les matériaux nécessaires, on peut trouver différentes manières de fabriquer ce jeu.

Maintenant c’est à ton tour, partagez vos création de jeu de tir avec le hashtag #retroetgeek #westernduino et fais profiter la communauté .
Si tu pense que cette vidéo et tuto peut intéresser quelqu’un n’hésite pas à la partager, j’ai passé pas mal de temps à construire ce tuto autant que cela serve à un maximum de maker.
C’était ma contribution au challenge des makers pour ouiaremakers.com bonne chance à tous les participantes et participants.

N’hésitez pas à poser vos questions sur les réseaux sociaux de la chaîne instagram , twitter , facebook ,youtube ; si vous ne comprenez pas certaines parties du tutoriel, me dire ce que vous aimeriez que je crée pour en faire des vidéos tutoriel ,à partager les projets que vous aimeriez créer etc…
Comme toujours allez sur la page de C’est quoi Retro et Geek pour connaître tout ce que je recherche à faire sur la chaîne.
Merci les RetroGeeker et RetroGeekeuse

Vous aimez ce tutoriel ?


la.couenne

21 juin 2017 à 15:17

ahah juste génial!!
Très bonne idée :-)

Retroetgeek

21 juin 2017 à 16:29

Merci :-)

la.couenne

22 juin 2017 à 22:25

J'ai juste une question, est-ce que le laser n'est pas trop précis? je veux dire tu dois viser précisément pour toucher le capteur non?
Tu pourrais aussi faire un duel, genre une fausse horloge qui indique 11h59, et dès qu'elle passe à midi faut tirer sur la cible, puis on indique les temps en millisecondes du joueur et de la cible pour savoir qui a gagné. Puis on aux tours suivants la cible tire de + en + vite :) En tout cas t'as eu une bonne idée, j'adore ;) Merci du partage!

Retroetgeek

23 juin 2017 à 14:40

Le laser est précis oui et il faut viser le capteur pour que cela s'active.
Le temps d'allumage du laser est actuellement d'une demi seconde pour permettre de viser ce petit capteur.
Apres il est possible de mettre un capteur (photo résistance ) plus gros, il en existe de 2cm comparé à 0.7cm que j'utilise actuellement.
C'est une bonne idée de mode de jeu, j'en intégrerai surement quand je ferai une version 2 avec un afficheur en plus.
Merci du partage d'idée

Psine

22 juin 2017 à 20:25

Ouahhhhhh, çà c'est du tuto de malade ! Bravo pour cette énorme travail, j'adore.

Retroetgeek

23 juin 2017 à 15:07

Merci, c'est pas mal de travail mais c'est tellement gratifiant de créer un objet ou autre de A à Z et de le partager au plus grand nombre. :-)


Recevez une fois par mois les meilleurs tutoriels Technologie dans votre boîte mail




S'inscrire:



En cliquant sur s'inscire, vous acceptez de respecter les conditions générales d'utilisation de Oui Are Makers.

  • Vues: 141
  • J'aime: 5