Un jeu de rapidité !

image principale Un jeu de rapidité !

Difficulté:

Comment apprendre à gérer l’allumage d’une led et récupérer l’appui sur un bouton poussoir en s’amusant !


Les deux premières choses que l’ont apprend quand on commence à bidouiller autour du port GPIO du Raspberry Pi, c’est :
1) allumer une led et
2) lire l’état d’un bouton…
Pas très excitant… et pas si facile à comprendre car la logique électronique n’est pas forcément la logique « intuitive »…


D’où l’idée d’ajouter un peu d’agréable à l’utile en « travaillant » autour d’un jeu de rapidité tout bête : une led et deux boutons poussoirs, un par joueur :
=> on allume la led pendant un temps aléatoire, et lors de son extinction, c’est le premier joueur qui arrive à appuyer sur son bouton qui gagne la manche ; le jeu se jouant en 5 manches !


Prêt pour relever le défi ? Allons-y !

Matériel :

Budget : Non défini

  • L’idée étant de récupérer le plus d’éléments possible, le coût fut réellement nul dans mon cas.J’ai donc utilisé :
  • 2 micro boutons poussoirs et fils (récup’ de boutons « reset » de vieux PC)
  • </ul>
  • 1 led, son support et ses fils (même source de récup’)
  • 1 prise femelle 25 broches (port « LPT » imprimante d’un vieux PC)
  • 1 ensemble de poignées de porte en bois (si, si, et toujours de la récup’ !)
  • 1 boîte en bois qui contenait un jeu de fraises pour ma défonceuse
  • 1 chute de plexiglass, 1 morceau de mousse, qq vis…

Fichiers :

Etape 1 : Créer et comprendre le câblage

Vous trouvez ci-dessus le croquis du montage et le schéma de câblage associé : une led, donc, et deux boutons poussoirs… bon…
Mais honnêtement, vous trouvez ça simple et « logique » ???

Allez donc voir le schéma de la dernière photo : est-ce qu’il ne vous paraît pas plus naturel voire évident ???
Bon, ben, c’est qu’en électronique, tout n’est pas forcément naturel 😉

Si vous êtes déjà rodés avec ces bizarreries ou que vous voulez tout de suite entrer dans le vif de la construction, passez directement au point 2, mais si, comme moi, vous peinez à “défendre” ces complications, prenez donc le temps de zieuter un peu cela de plus prés via les deux sous-points 11 & 12 suivants !

Etape 2 : Gérer l’allumage d’une led



Alors, commençons par du vocabulaire au cas où : une « led », c’est une diode électro luminescente, une « del » donc… mais en anglais 😉

Et je vous ai remis les deux schémas de câblage : le « naturel / intuitif / simple » versus le « correct / réel / pas simple » !!!

Bon, en fait, ça n’est pas si compliqué, il faut retenir deux choses :

1) une led doit être associée à une résistance.
Pourquoi ?
Et bien tout simplement parce qu’une led fonctionne à une tension et un courant qui ne sont pas forcément ceux qu’est prêt à lui fournir le GPIO de notre RPi !
En l’occurrence, la plupart des led ont une tension de fonctionnement comprise entre 1,2 et 1,6V, alors que le GPIO du RPi peut fournir du 3,3 ou du 5V !!!
De plus (et surtout !), on considère que le courant devant traverser une led en fonctionnement est de 20mA, alors que sans limitation, elle prendra le courant disponible… au risque de “griller” tôt ou tard !

Dans notre cas, sachant que nous utilisons le 3,3V du GPIO et que nous souhaitons utiliser un courant de 20mA, nous allons utiliser la fameuse loi d’Ohm qui dit que dans un circuit électrique, U = RI où :
U = la tension du circuit, en Volts
I = l’intensité du circuit, en Ampères
R = la résistance du circuit, en Ohms, ce qu’il va falloir déterminer !
En écrivant cette loi d’Ohm dans le bon sens pour calculer la résistance de notre circuit, on a R = U/I

Alors, que met-on en « U » ? Ben, petit piège, il s’agit de la tension… aux bornes de notre résistance, donc 3,3V (la tension du circuit général) – 1,2V (la tension que l’on souhaite aux bornes de notre led) = 2,1V !
Et en « I » ? Et bien, le courant requis par notre led, 20mA, soit 0,02A

Et donc, ENFIN, on a R = 2,1 / 0,02 = 105 Ohms !

De là, vous n’avez donc plus qu’à choisir une résistance supérieure ou égale à 105 Ohms, typiquement, 220 Ohms ira très bien. Plus votre résistance sera élevée, moins votre led sera lumineuse.

Bon deux choses :
– on voit que c’est très faible, et que si vous utilisez bien le 3,3V, votre led ne craint pas grand chose, cela dit, c’est aussi pour protéger les ports GPIO qui sont parfois chatouilleux face au courant que va vouloir consommer la led !
– je vous dit que « en général » la tension requise par une led est de 1,2V et qu’elle consomme 20mA, mais d’où je tire ces chiffres ??? Ben tout composant électronique possède une « datasheet », une « fiche de données techniques » que l’on trouve assez facilement sur internet, le plus souvent sur le site du constructeur dudit composant. Mais les led ont peu ou prou toutes les mêmes caractéristiques.

2) Bon, mais si vous regardez le schéma de câblage « correct », ça ne colle toujours pas puisque j’ai mis les choses à l’envers : le +3,3V en entrée de ma led et c’est sa sortie qui est connectée au port GPIO qui va la piloter !!!

Alors que, soyons honnête, il serait vachement plus « logique » que ce soit mon port GPIO qui envoie 3,3V à ma led, qui serait ensuite « simplement » raccordée à la masse, autrement dit, au 0V, non ????

Oui, ben non, car en fait, les broches du GPIO sont plutôt à voir comme les broches d’un micro-contrôleur électronique, et ce genre de composant, s’il sait parfaitement gérer une tension positive qui lui est appliquée à plus de peine à fournir lui-même une telle tension.

Donc, par défaut, on préfère y recevoir une tension positive, qui va correspondre à notre état « éteint » (notre led aura +3,3V de chaque côté et ne s’allumera donc pas), puis relier cette tension à la masse pour créer notre état « allumé » (notre led aura +3,3V d’un côté, et 0V de l’autre et va donc bien s’allumer) que l’inverse !

Cela dit, soyons franc, ça marchera aussi si vous faites les choses dans le sens « naturel », je vous « embête » juste pour vous donner de bons réflexes, qui seront surtout utiles avec une carte Arduino, ou un micro-contrôleur que vous aurez programmé vous-mêmes, quand vous serez devenus des pros ! 😉

Bon, ouf, vous avez tout compris pour la led ? Non ? Je résume :
1) Mettez en série avec votre led une résistance : de 220 Ohms si vous l’alimentez en 3,3V.
2) Autant que faire se peut, ayez le réflexe « électronicien » et branchez votre led « à l’envers » : du +3,3V vers la led, puis de la led vers le port GPIO qui fonctionnera donc à l’inverse de la logique, soit : led éteinte = port GPIO à l’état haut ; led allumée = port GPIO à l’état bas.

Passons aux boutons poussoirs !

Etape 3 : Récupérer l’état d’un bouton poussoir



Ben, désolé, mais c’est pas beaucoup plus simple ! 😉

Là encore, je vous fourni deux schémas : le « logique / naturel / facile » et le « correct / réel / pas évident » !

Trois choses à retenir pour les boutons :

1) Ben on ne peut pas simplement mettre le bouton entre le port GPIO du RPi et la masse, sinon, quand on va appuyer dessus (= le fermer)… on va faire un beau court circuit au risque de tout faire griller !

DONC : on utilise une résistance dite « de tirage », typiquement de 10 Kilo-Ohms et qui va simuler une lampe ou autre appareil sur le circuit.

Et pour compliquer un peu les choses, deux cas de figure se présentent :

  • soit on maintient le port GPIO à l’état bas quand le bouton est ouvert et on utilise une résistance de tirage vers le bas, appelée « pull-down »,
  • soit on maintient le port GPIO à l’état haut quand le bouton est ouvert et on utilise une résistance de tirage vers le haut, appelée « pull-up » : voir le point 3 ci après.

2) Théoriquement, lorsqu’on appuie sur le bouton, son état passe de 0 (rien ne passe) à 1 (tout passe) de façon propre et instantanée, et inversement à son ouverture… mais en réalité, il y a une phase dite transitoire pendant laquelle son état est aléatoirement entre les deux… du coup, le port GPIO est un peu perdu, ne sachant pas bien interpréter ce qu’il reçoit.

DONC : pour limiter cet effet, on branche un petit condensateur dit « de filtrage », typiquement de 10nF et qui va réguler tout ça en se chargeant et se déchargeant quasi instantanément au changement d’état du bouton.

3) Comme pour la led, on préfère raisonner en électronicien et brancher le bouton « à l’envers » afin de respecter au mieux les caractéristiques intrinsèques du port GPIO => par défaut, bouton ouvert, le port est à +3,3V ; et une fois le bouton fermé, il passe à 0V.

En relisant le point 1) ci-dessus, on choisira donc une résistance de tirage vers le haut, soit « pull-up ». D’ailleurs, il est à noter que le RPi intègre ce genre de résistance et qu’on peut donc remplacer nos résistances physiques par celles du RPi en le lui indiquant lors de la programmation.

Bon, je résume : par défaut, pour brancher un bouton poussoir (ou un interrupteur d’ailleurs), vous allez du +3,3V vers une résistance de pull-up de 10KOhms, puis de là, vous allez d’une part vers le port GPIO qui va lire l’état du bouton, et d’autre part vers ledit bouton, avant, enfin, d’aller à la masse !

Autre alternative : vous omettez la résistance de tirage, MAIS ALORS vous n’oubliez pas d’activer celle incluse dans le RPi au moment de sa programmation !

Etape 4 : Construire la partie physique du jeu

Pour ma part, c’est en voyant ces poignées de porte en bois, et en constatant que mes micro boutons poussoirs s’y adaptaient parfaitement que m’est venu l’idée de cette réalisation !

J’ai donc commencé par peindre joliment chaque poignée d’une couleur bien distincte pour savoir différencier chaque joueur, puis j’y ai juste inséré à force mes boutons poussoirs…
Bon, soyons franc, à l’époque, j’étais un débutant de chez débutant, et je n’avais absolument pas entendu parler de condensateur de filtrage… et du coup, c’est toujours le même bouton qui gagnait !!! N’oubliez donc pas de souder vos condensateurs de filtrage avant de monter vos boutons, comme montré sur les photos !

Ensuite, j’ai récupéré une prise 25 broches qui était le port parallèle d’un vieux PC, là où on branchait nos imprimantes 😉 , et j’ai fait mon petit montage électronique comme indiqué au point 1, en fixant le tout sur une petite chute de plexiglass.
Oui, bon, soyons encore franc : à l’époque, je n’avais pas non plus entendu parler de résistance de tirage, et donc, il n’y en a pas sur les photos de mon montage ; par contre, j’ai bien sûr modifié mon programme depuis, pour activer les résistances de “pull-up” intégrées au Raspberry Pi, et je vous ai donc joint le schéma équivalent avec les photos du montage ! 😉

Voyant que tout ça ne prenait vraiment pas trop de place, je suis parti à la recherche d’une boîte pas trop moche pour ranger le tout, et j’ai trouvé une petite boîte en bois qui ne me servait plus, dans laquelle était rangé un jeu de fraises pour défonceuse.

Un peu d’adaptation, un morceau de mousse dans le couvercle pour que rien ne s’abime et que tout soit à peu près maintenu lorsque la boîte est fermée, et hop, le tour est joué !

Etape 5 : Construire la partie logicielle du jeu



Pour rappel, le jeu fonctionne comme suit :

  • on demande de saisir un nom pour le joueur à la « manette » rouge
  • on fait de même pour le joueur à la « manette » verte
  • on demande d’appuyer sur une touche quand on est prêt à entamer la partie
  • la led s’allume alors pendant un temps aléatoire compris entre 1s et 10s
  • à l’extinction de la led, on surveille l’état des deux boutons poussoirs pour voir qui arrivera à appuyer le premier sur sa manette !
    ledit joueur gagne alors 1 point
  • le jeu se joue en 5 manches, donc, dès qu’un joueur gagne 3 points, il a gagné !
  • on demande si les joueurs veulent rejouer ou s’il faut quitter le jeu

Le programme en Python est joint, je ne m’étale pas dessus même s’il y aurait pas mal à en dire… mais bon, je vous ai déjà bien fatigué avec mes détails sur la partie électronique, c’en est assez pour ce tutoriel !

Etape 6 : Une autre version, pour vous donner des idées !

Ben oui, j’ai trouvé de vieux interrupteurs de sonnette à 1€ sur une brocante et du coup, j’ai commencé à réaliser une seconde version de ce jeu, que j’appelle « vintage » ! 😉

Bon, je vous laisse regarder les photos pour comprendre l’idée générale, rien de bien compliqué.

Mais en fait, je n’ai pas terminé, car la petite ampoule que j’ai voulu utiliser consomme 300mA… ce qui est beaucoup trop pour les ports GPIO de nos RPI (50mA maximum)…
Du coup, j’ai dans l’idée d’arriver à « démonter » mon ampoule pour glisser une led blanche à la place du filament… mais je ne suis pas encore allé au bout de ma démarche !

Voilà, à vous d’être créatifs et de nous montrer vos réalisations !!!

Petite coquille dans le code:
#La partie se joue en 5 manches
#On arrête donc aussi dès qu'un joueur a 3 points
MANCHE, SC_R, SC_V = 0, 0, 0

#Indication du gagnant et de son score
if SC_R > SC_G:
print(NOM_R, ” a gagné la partie, “, SC_R, ” points à “, SC_G, ” !”)
else:
print(NOM_G, ” a gagné la partie, “, SC_V, ” points à “, SC_R, ” !”)

le “SC_V” doit être corrigé en “SC_G” me semble t-il, non?

En tout cas excellent tuto encore avec une belle version vintage !

Félicitations

Excellent comme jeu Chapao ! C'est simple et efficace et effectivement la compréhension des états d'un bouton ont été un calvaire pour moi qui ne vient pas de l'électronique.
Merci pour le tuto :).

Oui les explications sont poussées et super intéressantes 🙂
Merci bcp!

Bonjour, Merci pour ce tuto, je souhaite m'en inspirer pour la fabrication d'un jeu type "Monkey mole panic " . Par contre je souhaiterais récupérer le fichier en python , celui -ci est toujours disponible ? merci. Gaël

Argh, encore un tutoriel qui a été tout chamboulé par la mise à jour du site OAM, GRRRR !!!! Bon, mais j'en ai sûrement une copie => je cherche ça de suite pour le remettre en ligne ou vous fournir un lien où le récupérer, en m'excusant de ce désagrément !

OK, c'est bon : fichier "JeuRapidite.py" disponible dans la partie "fichiers techniques" en haut du tutoriel ! Bonne réalisation à vous.

Merci ! Le code est très bien commenté. Ca vas beaucoup m'aider ! Cordialement

Ces tutoriels devraient vous plaire

vignette Montez facilement votre console de jeu rétrogaming avec RECALBOX !
Montez facilement votre console de jeu rétrogaming avec RECALBOX !
vignette L’imprimante 3D pour 60€: EWaste
L’imprimante 3D pour 60€: EWaste
vignette Préparer un fichier pour une découpe et une gravure laser
Préparer un fichier pour une découpe et une gravure laser

Découvrez tous les tutoriels partagés sur Oui Are Makers

Powered by Oui Are Makers