Contrôler un robot à distance, quelle idée ! C’est bien plus amusant de le rendre autonome et d’apprendre étape par étape à améliorer son comportement.
Pour ceux qui veulent quand même utiliser une télécommande, autant le faire de manière fun avec un Nunchuck, l’accessoire de la manette Wii qui tient dans le creux de la main, avec quand même un joystick au pouce, deux boutons à l’index et au majeur, et surtout un accéléromètre trois axes.
On connaissait déjà la version classique, avec un fil pour le relier à une manette Wiimote. Il n’a pas fallu longtemps pour la faire fonctionner, les 4 fils correspondant à un bus I2C ou TWI bien connu. Vous pouvez ainsi découvrir le contrôle pan/tilt d’une pince avec un Nunchuck filaire.
Mais la version sans fil a été plus coriace et bien qu’il existe depuis plusieurs mois sur Internet des exemples de réussite, pas de piste sérieuse pour enfin y arriver.
Remerciements
Tout d’abord à Nicolas (EasyRobotics) qui m’a encouragé à continuer mes efforts.
Ensuite au site WiiBrew pour documenter dans le détail tout le fonctionnement des accessoires Wii.
Et puis bien sûr à tous ceux qui publient leur code dans les forums d’électronique, comme Michael Dreher dont j’ai retrouvé les tentatives sur l’excellent site Windmeadow Labs.
Principes
Le Nunchuck sans-fil n’est pas un produit Nintendo, il existe donc plusieurs modèles. Mais tous utilisent le même principe : un petit module à ajouter sous la Wiimote, un peu plus petit et moins design que le Wii Motion Plus.
Ce module est alimenté par la Wiimote, et il gère la communication I2C d’un côté, et sans-fil (radio 2,4 GHz propriétaire le plus souvent) avec le nunchuc
Conseil
Mon plus gros problème était la tension d’alimentation : je voulais utiliser le connecteur de TodBot permettant de brancher un accessoire Wii directement sur les 4 pattes analogiques du bord de la carte Arduino...
En fait il faut utiliser une tension de 3,3 volts. Donc bricoler un peu 4 fils : deux pour la liaison I2C, un pour la masse, un pour la tension 3,3 volts. Comme j’utilise une Arduino Uno pour tester, j’ai un connecteur avec cette tension de disponible.
Dès l’achat de votre Nunchuck sans-fil, vous pouvez faire le test : il y a généralement une lumière indiquant la bonne synchronisation entre la manette et son module radio, elle doit se faire sans aucune programmation de votre part. Alimentez, testez.
Une bonne synchronisation rapide est primordiale.
Le code source
Voici une archive contenant le sketch Arduino commenté. Rien de sorcier, il s’agit d’une reprise d’un code existant, simplifié et nettoyé pour permettre à n’importe quel débutant de le reprendre.
Les points particuliers :
// il faut redéfinir la vitesse I2C à 400 kHz au lieu des 100 kHz habituels
// pour cela on accède directement au registre TWBR du micro-contrôleur ATmega328
TWBR = ((CPU_FREQ / 400000L) - 16) / 2 ;
// boucle infinie (jusqu’à ce que ça ait marché)
while(true)
Serial.print(".") ;
// deux octets doivent être écrits dans la mémoire
// - 0x55 à l’adresse 0xF0
// - 0x00 à l’adresse 0x00
// comme la communication peut être difficile, il faut essayer jusqu’à ce que ça fonctionne
// donc on utilise le test de transmission fournit par la fonction Wire.endTransmission
// 0 signifie le succès (4 autres codes désignent différents types d’erreur, cela ne nous intéresse pas)
// premier octet
Wire.beginTransmission(ADRESSE) ;
Wire.send(0xF0) ; // adresse
Wire.send(0x55) ; // donnée.
// si le premier est passé, on essaie le second
if (Wire.endTransmission() == 0)
Wire.beginTransmission(ADRESSE) ;
Wire.send(0xFB) ;
Wire.send(0x00) ;
// on teste le second
if (Wire.endTransmission() == 0)
// tout va bien, l’initialisation est terminée, on sort de la boucle
Serial.println("C’est parti !") ;
return ;
// Réinitialiser le Nunchuck
// C’est la partie qui m’a longtemps manquée
// et que j’ai trouvée sur le forum Windmeadow Labs !
// sans trop d’explications sur ces 3-0
// peut être les ingénieurs de Nintendo sont fans de la Coupe du Monde 1998 ?
for(byte i = 0 ; i < 3 ; i++)
Wire.beginTransmission(ADRESSE) ;
Wire.send(0x00) ;
Wire.endTransmission() ;
A vous de jouer, et n’oubliez pas de partager ce que vous découvrirez.
Vos commentaires
# Le 9 mars 2012 à 19:05, par damsession En réponse à : Contrôle par Nunchuck sans fil
bonsoir
merci encore pour toutes ces infos
cela fait maintenant un mois que je suis sur un projet
faire un montage pan/tilt pour ma gopro et ceci en controlant l’arduino avec un nunchuk sans fil
mais je galere et je suis pret a abandonner
je vous contacte donc pour un appel au secour
c’est mon premier projet et ma premiee fois avec ces interfaces
j’ai essaiye des tonnes de codes et rien
rien ne fonctionne
j’ai revu tout mes branchements
je ne sais quoi dire de plus si ce n’est a l’aide
j’aimerai vraiment pouvoir finir ce projet et comprendre mes erreurs et problemes et pouvoir continuer ce genre de projets
j’en appel vraiment a votre equipe et a l’aide que vous pourriez me donner
merci par avance mille fois pour vos conseils , images , dessins , videos, explications , codes ...
merci mille fois
# Le 10 mars 2012 à 23:58, par Julien H. En réponse à : Contrôle par Nunchuck sans fil
Est-ce que le module récepteur de votre nunchuck sans fil a des résistances de "pull-up" ? Essayez de mettre une résistance (quelques kilo-ohms) entre le 5V et chacune des pattes (analog 4, analog 5), soit 2 résistances au total.
# Le 13 mars 2012 à 19:20, par damsession En réponse à : Contrôle par Nunchuck sans fil
merci pour le coup de pouce
alors je viens deja de me procurer un autre nunchuk
j’ai donc refais les branchements
et j’y ai ajoute les resistances ( 6,8k il me semble )
le recepteur ne reconnait meme plus le nunchuk et clignote
par contre si je debranche les deux fils analog in ( 4 et 5 ) il semble le reconnaitre
des que je reconnecte un des 2 fils la connexion est perdue
le probleme est donc pire avec ce nunchuk !!!
mais toujours pas de mouvement au niveau des servos !!
je suis perdu
merci de votre aide
bien a vous
# Le 13 mars 2012 à 19:28, par damsession En réponse à : Contrôle par Nunchuck sans fil
je viens de reentrer le code si dessus sur la carte et c’est bon le nunchuk est detecte a nouveau
par contre toujours aucun mouvement de la part des servos
merci de votre aide
# Le 16 mars 2012 à 14:28, par damsession En réponse à : Contrôle par Nunchuck sans fil
pfff touours des essais et toujours perdu
quelqu’un a til deja reussi ce projet ?
merci pour vos lumieres !
bonne fin de journee
# Le 17 mars 2012 à 15:37, par Julien H. En réponse à : Contrôle par Nunchuck sans fil
Il faut persévérer, courage ! Comme tu as pu le voir dans l’article, j’ai aussi rencontré des problèmes et il a fallu du temps avant que je comprenne mon problème.
Est-ce que tu as bien fait le montage avec la tension 3,3 volts ?
Tu peux m’envoyer une photo de ton montage et la version de ton Nunchuck sans-fil et je chercherai.
A bientôt !
# Le 16 juillet 2012 à 13:46, par JCM En réponse à : Contrôle par Nunchuck sans fil
Bonjour, j’ai lu avec attention ta discussion. As tu mené à bien ton projet ? Je me lance dans un projet un peu similaire. Je voudrais stabiliser une cam gopro, montée ds un pan tilt, lui meme fixé à une rotule de pied photo support) fixé sur la coque de mon autogyre. L’objectif etant de supprimer les vibrations du moteur et le "baslourd" provoqué par le rotor.
J’ai pour l’instant :
la gopro, la nacelle pantilt, j’ai commandé le système wii. As tu des conseils pour le choix de la carte arduino ?
Merci de me faire part de ton experience.
JCM
# Le 16 juillet 2012 à 14:55, par Julien H. En réponse à : Contrôle par Nunchuck sans fil
Bonjour,
Je n’ai pas compris si le Nunchuck sera utilisé comme manette pour stabiliser manuellement ou bien si c’est pour une stabilisation automatique.
Dans le premier cas, voir ce que nous avions fait avec le Nunchuck filaire : http://pobot.org/Cuck ontrole-avec-...
Dans le second cas, je conseille plutôt le Wii Motion Plus : http://pobot.org/Gyroscope-Wii-Moti...
Dans tous les cas, une Arduino Mini permettra d’avoir la même facilité de programmation qu’une Arduino tout en prenant peu de place.
Répondre à ce message