Utiliser un Nunchuck Wii pour contrôler la tortue Python

Dans ce tutoriel, je vais vous montrer comment connecter un adaptateur Wii nunchuck à un Raspberry Pi et utiliser Python pour contrôler le module Tortue..

Ce tutoriel fonctionne à la fois avec les nunchucks officiels de Nintendo et de tiers. Le nunchuck est une bonne entrée multi-usage pour un Raspberry Pi car il peut être capté à moindre coût et contient un joystick, un accéléromètre à trois axes et deux boutons dans un contrôleur agréable et ergonomique..

Exigences

Pour que le nunchuck fonctionne avec le Pi, vous aurez besoin de:

  • Un Raspberry Pi avec une carte SD préinstallée avec Raspbian (reportez-vous au didacticiel Comment flasher une carte SD pour Raspberry Pi si vous avez besoin)
  • Un nunchuck de Nintendo
  • Un adaptateur tel que MultiChuck
  • Ou des câbles de jonction femelles, du fer à souder, de la soudure et du ruban isolant pour couvrir le joint

Brancher votre Nunchuck

Si vous vous sentez courageux, aimez couper les connecteurs et disposer de contrôleurs de rechange, vous pouvez raccorder les fils directement aux broches Raspberry Pi GPIO. Comme chaque connecteur peut utiliser des fils de couleurs différentes, il est préférable d’ouvrir le contrôleur pour déterminer les couleurs de câblage..


Câblage du 

Dans mon contrôleur, j'ai les fils suivants, puisqu'il s'agit d'un contrôleur tiers, notez les couleurs et les broches auxquelles ils se connectent, car il est fort probable qu'ils pourraient être très différents du connecteur de mon exemple..

  • Sol-marron
  • Données série-Rose
  • Horloge de série-Jaune
  • Puissance (VDD)-blanc
  • Addon Detect-Bleu-non utilisé
Un exemple de brochage de câblage

Coupez le connecteur final que vous avez branché dans la Wiimote, dénudez le revêtement en plastique pour exposer les fils nus. Souder chaque fil à un cavalier, puis utiliser du ruban isolant pour protéger les joints soudés des contacts. Une fois que vous êtes sûr que chaque couleur correspond à son fil respectif, branchez-les directement sur l'i2c et les broches d'alimentation du Pi.

Si vous ne vous sentez pas si courageux ou si vous n'avez pas de contrôleur à revendre, vous pouvez toujours utiliser un adaptateur tel que l'adaptateur MultiChuck pour connecter votre contrôleur à votre Pi sans sacrifier le connecteur..

Utilisation d'un adaptateur MultiChuck

Mise en place du Raspberry Pi

i2c n'est pas activé par défaut, cela nécessite la modification de deux fichiers. Le premier fichier activera le protocole série et le second lancera le pilote série lorsque le Raspberry Pi démarrera.

Pour éditer le premier fichier, tapez ceci dans le champ LXTerminal fenêtre ou Mastic si vous vous connectez à distance: sudo nano / etc / modules

Ajouter i2c-dev et i2c-bcm2708 à la fin du fichier, il se présente ainsi:

Édition de fichiers sur le Raspberry Pi

Control-X enregistrer les modifications, Y pour confirmer et Entrer enregistrer dans le fichier.

Ensuite, pour activer le pilote au démarrage, tapez:

sudo nano /etc/modprobe.d/raspi-blacklist.conf

puis ajoutez un # au début de chaque ligne, il se présente ainsi:


Édition de fichiers sur le Raspberry Pi

Encore Control-X enregistrer les modifications, Y pour confirmer et Entrer enregistrer dans le fichier. Ce sont les changements nécessaires pour que le Raspberry Pi parle via le protocole i2c. Type suivant:

sudo reboot redémarrer

pour permettre aux modifications de prendre effet.

Installer les bibliothèques requises

Une fois le Raspberry Pi redémarré, ouvrez à nouveau LXTerminal. La dernière chose à faire consiste à installer les modules Python pour gérer la communication entre Python et i2c:

sudo apt-get mise à jour sudo apt-get installer python-smbus -y

Pour faciliter la gestion des données du nunchuck, j'ai créé un module qui peut être importé dans votre script. Ouvrir LXTerminal et tapez la commande suivante pour le télécharger.

wget https://raw.githubusercontent.com/Boeeerb/Nunchuck/master/Raspberry%20Pi/nunchuck.py

Lecture des données de Nunchuck

Maintenant que vous avez toutes les bibliothèques et tous les modules nécessaires, vérifiez que cela fonctionne. Alors que toujours dans LXTerminal, tapez

python sudo

pour démarrer la console Python interactive, en utilisant ceci, nous pouvons écrire un test rapide avec Python. 

à partir de nunchuck import nunchuck wii = nunchuck () wii.raw ()

Si tout fonctionne comme il se doit, vous devriez vous attendre à voir un ensemble de chiffres comme celui-ci:

Essai

Les chiffres correspondent aux sorties du joystick, de l'accéléromètre et des états des boutons. 

Wii.raw () vous donnera une impression de chaque-commençant à gauche vous avez:
[Joystick X, Joystick Y, Accéléromètre X, Accéléromètre X, Accéléromètre X, Données mixtes contenant les boutons Z et C]

J'ai également ajouté des fonctions individuelles pour chacune d'elles afin de faciliter la rédaction de vos propres scripts..

wii.raw () # Renvoie toutes les données brutes en wii.joystick () # Renvoie uniquement les positions X et Y du joystick wii.accelerometer () # Renvoie les positions X, Y et Z de l'accéléromètre wii.button_c () # Renvoie True si le bouton C est enfoncé, False sinon wii.button_z () # Renvoie True si le bouton Z est enfoncé, False sinon wii.joystick_x () # Renvoie uniquement la position X de la manette wii.joystick_y () # Renvoie uniquement la position Y du joystick wii.accelerometer_x () # renvoie uniquement la position X de l'accéléromètre wii.accelerometer_y () # renvoie uniquement la position Y de l'accéléromètre wii.accelerometer_z () # renvoie uniquement la position Z de l'accéléromètre wii. scale (value, min, max, out_min, out_max) # Fonctionne comme Arduino Map, parfait pour modifier les valeurs renvoyées à une échelle différente, par exemple -100 - +100

Vous pouvez en essayer une avec une boucle en tapant ce qui suit dans un python sudo console. Cela affichera la position actuelle du joystick, alors tapez-le et déplacez-le pour voir les chiffres changer.

à partir de l'importation nunchuck nunchuck à partir de l'heure importer sommeil wii = nunchuck () tant que True: wii.joystick () dormir (0.2)

À l'aide de tortue

Maintenant que votre Nunchuck est connecté au Raspberry Pi, que vous avez installé les bibliothèques et les modules et qu’il a été testé, il va vous montrer comment faire quelque chose d’amusant.. 

Python, sur le Raspberry Pi, est installé avec le Tortue module permettant à quiconque de créer des motifs rapidement et facilement en ajoutant quelques lignes de code. Donc, comme il est très facile de commencer, je vais vous montrer comment utiliser le nunchuck pour contrôler une tortue..

Pour la prochaine section, je vais utiliser Tourner au ralenti pour écrire le code Python, mais comme le protocole série requiert des droits d’administrateur, vous devrez revenir à LXTerminal encore et tapez:

sudo inactif

Cliquez sur Fichier puis Nouvelle fenetre. La nouvelle fenêtre est l'endroit où le code Python ira. Pressage F5 exécutera le code. Ajoutez le code d'avant pour importer les modules sleep et nunchuck, ainsi que la tortue.

from nunchuck import nunchuck from import de l'heure importation de la tortue wii = nunchuck () turtle.setheading (90) while True: if wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) si wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: tortue.right (10)
script nunchuckturtle.py

Après avoir saisi le code, appuyez sur F5 pour l'exécuter. Il vous sera ensuite demandé de sauvegarder le fichier. Donnez-lui un nom approprié. Une fenêtre apparaît maintenant avec un petit triangle noir, vous êtes maintenant prêt à l'essayer, alors testez le joystick.


Dans le code que vous avez utilisé, les quatre premières lignes importent les modules nécessaires et lancent le nunchuck prêt à être utilisé. tortue.stheading (90) pointera la flèche vers le haut, comme 0 pointe vers la droite. Le prochain bloc commence une boucle éternelle-en vrai:. Python vérifie si la position du joystick est supérieure ou inférieure à un certain nombre et déplace le curseur tortue respectivement.

Ajout de boutons

Maintenant que vous avez du mouvement, je vais vous montrer comment ajouter une interactivité supplémentaire en utilisant le C et Z boutons. Certaines fonctions utiles seront d'effacer l'écran et de soulever le stylo pour pouvoir vous déplacer sans tracer de trait..

from nunchuck import nunchuck from import de l'heure importation de la tortue wii = nunchuck () penstate = 0 turtle.setheading (90) tant que True: if wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) si wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: turtle.right (10) si wii.button_c () == True: turtle.setposition (0,0) turtle.setheading (90) turtle.clear () si wii.button_z () == True: si penstate = = 0: turtle.up () penstate = 1 sinon: turtle.down () penstate = 0 sommeil (0,2)


presse F5 pour enregistrer et lancer le nouveau script et tester les boutons. Bouton C efface l'écran et réinitialise la position du curseur, tandis que Z va lever et déposer le stylo afin que vous puissiez commencer et arrêter de tracer une ligne.

Utiliser le nunchuck pour dessiner

Je décompose le code du bouton afin que vous compreniez ce qui se passe lorsque vous appuyez sur le bouton. 

Lorsque vous appuyez sur le C bouton, qui revient comme Vrai et retourne la tortue vers le haut, puis déplacez la tortue vers le centre de l'écran et effacez enfin l'écran. 

Lorsque vous appuyez sur le Z bouton, une variable est stockée pour mémoriser l’état du stylet, puis levez le stylo pour arrêter de dessiner ou posez-le à nouveau pour continuer à dessiner..

Conclusion

J'espère que dans ce tutoriel, vous avez acquis les connaissances nécessaires pour appliquer ce que vous avez appris et développer ce que vous pouvez faire avec le nunchuck. 

Certaines choses peuvent être faites telles que des robots de contrôle, créer des jeux tels que serpent ou même allumer et éteindre des LED qui sont connectées aux broches GPIO d'un Raspberry Pi..