Publié le 10 août 2019 - par

ClignoDroïd un Simon pour Raspberry Pi

Pour jouer avec ses enfants, Olivier s’est inspiré du jeu Simon à partir duquel il a développé ClignoDroïd. Il partage avec les lecteurs de framboise314 cette belle réalisation.

ClignoDroïd, un Simon pour le Raspberry Pi

Un mot de l’auteur

Pour commencer je laisse la parole à Olivier qui présente son projet dans le message qu’il m’a envoyé : « Bonjour François, ci-joint un lien où tu peux télécharger les notes et fichiers relatif à mon projet de création d’un jeux « SIMON » sur Raspberry Pi, que j’ai nommé « ClignoDroid » avec mes enfants. Il y a un fichier .odt avec toutes les explications type tutoriel / pas à pas mais je ne rentre pas dans les détail de la conception du circuit imprimé ni dans le détail de tous les programmes python, ce serait trop trop long. Toutes les photos d’illustration sont dans un répertoire et j’ai ajouté un .ZIP avec tous les programmes Pythons, un autre .zip avec les fichiers au format GERBER pour le circuit imprimé. Je n’ai pas passé un temps infini à écrire le meilleur programme du monde, ce n’était pas mon intention. Il est perfectible j’en ai bien conscience, mais en tout cas il fonctionne très bien comme ça.« 

Le ClignoDroïd Description fonctionnelle

Jeu basé sur le principe du jeu « Simon » : il faut répéter une séquence de LEDs qui s’allument au hasard, en commençant par 1 led, puis 2, 3 etc. jusqu’à ce que le joueur se trompe. Le jeu mémorise le meilleur score (tous joueurs confondus)

Possibilité d’activer ou non un buzzer qui joue une note de musique différente pour chaque LED.
Chaque LED est associée à un bouton poussoir de même couleur pour que le joueur entre la séquence qu’il vient de voir. Un bouton poussoir supplémentaire permet d’éteindre proprement tout le système.
Le jeu est équipé d’un afficheur LCD de 2 lignes de 16 caractères pour afficher :

  •  un message d’initialisation
  •  une invite pour commencer la partie (avec activation du buzzer ou pas)
  •  affichage du niveau atteint par le joueur et score à battre
  •  message d’extinction du système

Synoptique du déroulement

Les composants nécessaires

Composants pour la construction du jeu ClignoDroïd

Cliquez pour agrandir

Schéma de ClignoDroïd

Schéma de ClignoDroïd

Cliquez pour agrandir

Circuit imprimé

Le circuit a été réalisé avec KiCAD. Pour commander le circuit imprimé, il faut utiliser les fichiers GERBER zippé : Clignodroid_GERBERfiles.zip

Configuration du Raspberry Pi

Installer une version Raspbian strech ligth sur le Raspberry Pi, sans écran ni clavier

https://raspberry-pi.fr/raspberry-pi-sans-ecran-sans-clavier/

Activer le bus I2C du Raspberry Pi, afin de pouvoir gérer l’afficheur LCD via port I2C

https://projetsdiy.fr/activer-bus-i2c-raspberry-pi-3-pi-zero-w/

Le prototype du jeu ClignoDroïd sur breadboard

Le prototype du jeu sur breadboard

 

Installer la gestion du port GPIO du raspberry

→ sudo apt-get install wirinpi

→ tutoriel pour wirinpi : http://wiringpi.com/download-and-install/

définir python3 par défaut (au lieu de python 2)

→cd /usr/bin

→ sudo rm python

→ sudo ln -s python3 python

installer les packages python 3 suivants, nécessaires à la gestion GPIO et bus I2C

sudo apt-get install rpi.gpio

→ sudo apt-get install python3-pip

→ sudo pip3 install smbus

Le Raspberry pi est alors prêt pour exécuter le programme écrit en python3, qui va contrôler le circuit imprimé via port GPIO.

Montage de ClignoDroïd

Commencer par souder la nappe 2*20pin femelle à positionner sous le PCB : le Raspberry Pi va se loger sous le PCB qui sera surélevé par des entretoises.
Ne pas hésiter à utiliser une loupe pour souder les nombreuses pattes qui sont proches.

Souder ensuite les autres composants à disposer sur le PCB, avec quelques précautions :

  • Commencer par les résistances 220Ω, R1 R2 R3 R4 au haut à gauche, bleues sur l’image. Ces résistances sont associées aux Leds

  • Souder ensuite les résistances 10kΩ sur la droite (R5 à R14). /!\ Attention à la rangée du bas: le sens des résistances est important. Si elles sont soudées dans l’autre sens, le schéma électrique n’est plus respecté et ça ne fonctionnera pas.

  • Souder ensuite la résistance 1kΩ (R15) au dessus du buzzer ainsi que le transistor juste en dessous. Ne pas hésiter à utiliser une loupe pour souder les 3 pattes très proches du transistor NPN… Attention à bien le souder dans le bon sens (méplat vers le buzzer, comme sur la photo), sinon le buzzer ne fonctionnera pas.

  • Souder le buzzer: le sens est aussi important: patte + soudée vers le bas.

  • Souder les Leds en prenant soin de disposer les clips avant de souder (sinon impossible de les mettre une fois les Leds soudées), et de respecter les couleurs (verte, bleue, jaune, rouge). Le sens est important: la patte la plus longue doit être entrée dans le trou rond de droite (qui lui est relié à une résistance 220Ω). Le trou « carré » est quand à lui relié à la masse. Si elles sont soudées dans l’autre sens : elles ne s’allumeront jamais.

  • Souder tous 5 les boutons poussoir, le sens n’a pas d’importance.

  • Souder le connecteur mâle 4 pin coudé en haut à gauche.

Assemblage du circuit

Connecter le Raspberry Pi directement sur la barrette 2*20pin située sous le PCB. Disposer les 7 entretoises 15mm en bas, et les 4 entretoises 20mm au dessus (support du LCD). Brancher la nappe souple (connecteurs coudés) vers port I2C du LCD: attention au sens (GND en haut, puis VCC, SDA et SCL).

A noter que l’utilisation d’une barrette 2*20pin bas profil (5mm de hauteur) est importante, sinon les entretoises de 15mm en support ne seraient pas assez hautes pour éviter que le raspi ne traîne par terre.

De même le LCD doit être accompagné de son module I2C soudé par dessous le LCD. Il y a des composants qui prennent de la place + ceux du PCB : il faut à minima des entretoises de 20mm pour surélever correctement le LCD.

Programmes Python

Le programme est écrit en Python3, orienté objet. Télécharger les programmes
Plusieurs modules sont nécessaires
gestion du LCD avec port I2C:(programmes récupérés depuis un tutoriel d’affichage LCD avec un Raspberry Pi)

  • I2CLCD1602.py

  • PCF8574.py

  • Adafruit_LCD1602.py

programme ClignoDroid (orienté objet):

  • clignoDroid.py : programme principal à exécuter

  • clignodroid_buton.py : classe de gestion des boutons poussoirs

  • clignodroid_buz.py : classe de gestion du buzzer

  • clignodroid_lcd.py : classe de gestion de l’affichage LCD

  • clignodroid_led.py : classe de gestion des Leds

Fichier de configuration :

  • score.txt : simple fichier texte dans lequel le meilleur score est stocké (initialisé à 3)

Bien s’assurer que les programmes sont recopiés avec des droits en lecture et en écriture

ls -l ClignoDroid/ les droits doivent être à minima -rw -rw -r–

Installation des programmes sur le Raspberry Pi

Tous les programmes (les 8 fichiers *.py) ainsi que le fichier score.txt doivent être ajoutés dans un dossier /home/pi/ClignoDroid/

(Attention avec les MAJUSCULES et minuscules: elles sont importantes)

Ensuite pour que le programme principal s’exécute au démarrage du Raspberri pi, il faut entrer les commandes suivantes en mode console (via une connexion SSH, comme lors de l’installation du système sans écran) :

sudo nano etc/rc.local

Ajouter juste avant la ligne exit 0 ceci:

python « /home/pi/ClignoDroid/clignoDroid.py«  &

(le & à la fin est important pour que le programme puisse s’exécuter en tâche de fond et ne bloque pas le système)

En branchant le Raspberry Pi: le système démarre (ça prend du temps, c’est normal ….) et lorsque le programme s’exécute il commence par faire clignoter toutes les Leds, avant de demander si on commence la partie: c’est parti!!!

Si le joueur appuie sur le bouton noir « OFF » cela va éteindre proprement le Raspberry Pi (équivalent à une commande sudo poweroff sous SSH) : pour recommencer une partie il faut alors débrancher et rebrancher le système. Il n’est pas du tout recommandé de débrancher « sauvagement » le Raspberry Pi pendant qu’il fonctionne: à terme la SD carte serait corrompue voire détruite et plus rien ne fonctionnerait.

Test du programme

Il faut se connecter au Raspberry Pi via une connection SSH depuis un ordinateur.

il suffit alors d’exécuter le programme principal et des « print » logés dans les programmes permettent de voir ce qu’il se passe et éventuellement des messages d’erreurs s’il y en a.

Source d’erreur fréquente:

  • essayer d’exécuter le programme avec un mauvais branchement sur port I2C du LCD va faire sortir le programme en exception puisqu’il n’arrivera pas à communiquer avec le port I2C pour afficher les bons messages au joueur.

  • mettre les fichiers dans un autre répertoire que celui indiqué: dans ce cas il faut penser à adapter la ligne de commande d’exécution automatique

  • oublier de déposer le fichier score.txt ou le nommer autrement.

  • Pas de droits en écriture sur le fichier score.txt

Video

Conclusion

Olivier est parti du Simon pour concevoir son jeu. Dans le Simon la séquence à rejouer reste la même et augmente de taille à chaque essai. Avec ClignoDroïd chaque séquence est différente, mais augmente aussi à chaque essai, ce qui complique (à mon avis) l’exercice de mémorisation. Quoi qu’il en soit ce jeu démontre qu’avec peu de moyens et des idées il est possible de créer des nouveautés !

Merci Olivier pour cette réalisation et cette description très complète 🙂

Vous pouvez bien entendu monter le jeu sur une breadboard pour tester. N’hésitez pas à utiliser les commentaires pour donner vos impressions sur cette réalisation.

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

Une réflexion au sujet de « ClignoDroïd un Simon pour Raspberry Pi »

  1. Ping : ClignoDroïd un Simon pour Raspberry Pi – Framboise 314, le Raspberry Pi à la sauce française…. – Jhc Info

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.