Il est juste de dire que le Raspberry Pi Pico a perturbé le marché des microcontrôleurs au début de 2021. La carte à 4 $ a plus en commun avec un Arduino qu’avec un Raspberry Pi, mais le Pico s’est avéré être une bête beaucoup plus performante.
Avec le Raspberry Pi Pico, nous pouvons faire clignoter des LED, construire des robots et même exécuter Doom. Mais pour ceux qui découvrent la programmation, les microcontrôleurs et l’électronique, il existe quelques barrières à l’entrée qui doivent être supprimées.
MicroPython est un excellent langage pour le Raspberry Pi Pico, (amélioré uniquement par CircuitPython à notre humble avis) mais pour les non-initiés il peut rapidement devenir une « soupe de mots ». Nous avons besoin d’abstraire le code, de le rendre plus simple à comprendre et, heureusement, PicoZero semble être la solution.
PicoZero prend une page du livre de GPIO Zero en ce sens qu’il s’agit d’une bibliothèque Python conviviale pour les débutants pour l’électronique courante. GPIO Zero, créé et maintenu par l’ancien employé de Raspberry Pi Ben Nuttall et l’ingénieur logiciel de Canonical Dave Jones a créé un changement sismique pour les apprenants. Il a simplifié et illustré la manière dont les utilisateurs peuvent interagir avec des appareils électroniques courants à l’aide de Python sur le Raspberry Pi. PicoZero de la Fondation Raspberry Pi suit les mêmes principes et bien qu’il soit encore en version bêta, nous n’avions qu’à construire un projet avec lui.
Notre projet présentera les entrées et sorties de base du module PicoZero via un jeu de réaction, conçu pour tester les réflexes de deux joueurs face à un buzzer exceptionnellement fort.
Pour ce projet, vous aurez besoin
- Framboise Pi Pico
- 2 x boutons poussoirs
- 1 x avertisseur sonore CC
- 1 x Résistance 10K Ohm (Marron-Noir-Orange-Or)
- 8 fils de raccordement mâle à mâle
- Grande planche à pain
- Pâte à modeler / Play-Doh
Câblage du jeu
La construction matérielle de ce projet est simple, si nous la prenons étape par étape. Nous avons deux entrées, nos boutons qui sont utilisés par les joueurs. La seule sortie est un buzzer. En règle générale, le buzzer serait connecté directement au GPIO, mais lors de nos tests, nous avons constaté qu’il était trop silencieux. Pour contourner ce problème, nous avons utilisé un transistor NPN (2n 2222) qui est essentiellement un interrupteur à commande électronique. En connectant la broche centrale (Base) au GPIO du Pico via une résistance de 10K Ohm, nous pouvons déclencher la fermeture de l’interrupteur et permettre à la broche GND du buzzer de se connecter au GND du Raspberry Pi Pico.
1. Connectez les broches 3V3(Out) et GND du Pico aux rails + et – (respectivement) de la planche à pain. Cela transformera toutes les broches de chacun de ces rails en 3V3 (3,3 V) et GND.
2. Pliez légèrement la broche centrale du transistor NPN vers l’arrière et placez-le dans la planche à pain avec le plat de la puce tourné vers l’extérieur.
3. À l’aide de la résistance de 10 K Ohm, connectez le GPIO16 du Pico à la broche centrale du transistor NPN. Il s’agit de la broche de base, qui est utilisée pour contrôler l’état du transistor.
4. Connectez GND du rail – à la broche du collecteur (jambe droite sur le schéma) du transistor NPN.
5. Connectez la jambe négative du buzzer (fil noir) à la broche de l’émetteur (jambe gauche sur le schéma) du transistor NPN. Connectez la branche positive du buzzer (fil rouge) au rail + de la planche à pain. Nous avons maintenant câblé un interrupteur ouvert. Lorsque le transistor NPN n’est pas déclenché, la connexion est interrompue.
Lorsque nous envoyons un signal à la broche Base, nous provoquons la fermeture du circuit qui fait retentir le buzzer. Notez qu’une goutte de Play-Doh ou de pâte à modeler peut être utilisée pour couvrir légèrement le buzzer tout en réduisant le volume à des niveaux moins perçants.
6. Insérez le bouton pour le joueur un et câbler une jambe à GPIO19 et l’autre au – rail.
7. Ajoutez le bouton pour le joueur deux, connectant une jambe au GPIO20 et l’autre au – rail.
Installation de PicoZero sur votre Raspberry Pi Pico
PicoZero est un module MicroPython qui résume les complexités de l’électronique et de la programmation pour ceux qui découvrent les sujets. Nous utiliserons l’éditeur Thonny Python, recommandé par Raspberry Pi comme éditeur par défaut.
1. Installez (ou mettez à jour) le dernier éditeur Thonny Python pour votre système d’exploitation.
2. Connectez votre Raspberry Pi Pico et démarrez Thonny. Thonny devrait détecter automatiquement le Pico et se connecter prêt à l’emploi. Votre Raspberry Pi Pico devrait exécuter MicroPython, sinon suivez les instructions de notre Comment configurer et programmer le guide Raspberry Pi Pico.
3. Ouvrir un navigateur Web à la source PicoZero et copiez le code picozero.py.
4. Collez le code dans un document vierge.
5. Enregistrez le code sur le Raspberry Pi Pico en tant que picozero.py
Le code du projet
Le code du projet est délicieusement simple grâce à l’abstraction de PicoZero. Le but du projet est de créer un jeu de réaction. Un buzzer émettra un compte à rebours pour les joueurs, puis s’arrêtera pendant une durée aléatoire entre cinq et dix secondes avant de retentir à nouveau. Le joueur le plus rapide à appuyer sur son bouton gagnera la partie et éteindra le buzzer ennuyeux.
1. Créez un nouveau fichier vierge dans Thonny.
2. Depuis le module PicoZero, importez les classes Button et Buzzer. Ces deux classes sont utilisées pour interagir avec les boutons physiques et le buzzer.
from picozero import Button, Buzzer
3. Importez deux autres modules. Le temps est utilisé pour contrôler le délai dans notre code ; la fonction sommeil ajoute une pause. Random permet l’utilisation de classes et de fonctions pour la génération de nombres aléatoires, le choix aléatoire.
from time import sleep
import random
4. Créez un objet, buzzer, qui stockera la broche GPIO connectée au transistor qui contrôle notre bouton.
buzzer = Buzzer(16)
5. Créez deux autres objets, p1 et p2, qui stockeront la broche GPIO à laquelle chaque bouton est connecté.
p1 = Button(19)
p2 = Button(20)
6. Utilisez une boucle for pour faire retentir le buzzer trois fois, un compte à rebours qui indiquera que le jeu a commencé. Un court sommeil de 0,1 fera retentir brièvement le buzzer, éteindre le buzzer pendant 0,9 seconde nous donnera un compte à rebours régulier de « battement de cœur ».
for i in range(3):
buzzer.beep()
sleep(0.1)
buzzer.off()
sleep(0.9)
7. Créez un objet, le temps, qui stockera un nombre flottant choisi au hasard entre 5 et 10 secondes, alors utilisez cette valeur pour mettre le jeu en pause. C’est le moment de l’anticipation, le buzzer retentira-t-il rapidement ou devrons-nous attendre les 10 secondes complètes ? C’est la nature aléatoire du jeu de réaction.
time = random.uniform(5, 10)
sleep(time)
8. Activez le buzzer. Le buzzer retentira jusqu’à ce qu’un joueur appuie sur son bouton.
buzzer.on()
9. Créez une boucle while True pour exécuter le code du jeu. Cela exécutera en permanence le code qui vérifie quel joueur a appuyé sur son bouton.
while True:
dix. Vérifiez si le bouton du joueur 1 a été enfoncé. Si c’est le cas, une boucle for imprimera cinq fois « Green Wins » sur le Python Shell. Ensuite, la boucle est rompue, ce qui empêche le code de s’exécuter.
if p1.is_pressed:
for i in range(5):
print("Green Wins")
break
11. Faites la même vérification pour le bouton du joueur 2. La seule différence est que la boucle for affiche « Yellow Wins ».
if p2.is_pressed:
for i in range(5):
print("Yellow Wins")
break
12. Éteignez le buzzer, mettant fin au jeu.
buzzer.off()
13. Enregistrez le code sous reaction.py sur le Raspberry Pi Pico.
14. Cliquez sur Exécuter pour démarrer le jeu. Une fois le jeu terminé, cliquez sur Exécuter pour recommencer le jeu et défiez le concurrent pour un match revanche !
Liste complète des codes
from picozero import Button, Buzzer
from time import sleep
import random
buzzer = Buzzer(16)
p1 = Button(19)
p2 = Button(20)
for i in range(3):
buzzer.beep()
sleep(0.1)
buzzer.off()
sleep(0.9)
time = random.uniform(5, 10)
sleep(time)
buzzer.on()
while True:
if p1.is_pressed:
for i in range(5):
print("Green Wins")
break
if p2.is_pressed:
for i in range(5):
print("Yellow Wins")
break
buzzer.off()