Pages: [1]   Go Down
Author Topic: pb récupération données nunchuck (wii) arduino  (Read 1627 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

voila je suis étudiant en 2° année GEII et j'ai un projet que je dois réaliser avant avril. Mon projet est le suivant : piloter un robot à chenille avec une nunchuck de wii. Pour cela nos professeurs nous ont conseillé de fabriquer une carte Arduino Severino Serial Single Sided Version 3 avec un atmega 328 au lieu d'un 168. Version 0017 de arduino utilisé en soft.


Pour la nunchuck, nous utilisons le programme donné sur le site web suivant:

Notre probleme est le suivant :
Nous arrivons à récupérer les données venant de la nunchuck sur le port série d'un pc mais malheureusement nous n'arrivons qu'à le faire une seule fois c'est à dire que le programme qui devrait faire une boucle infinie ne le fait pas. Nous devons par conséquent appuyer sur le bouton reset de la carte pour relancer le programme et ainsi récupérer de nouvelles données venant de la nunchuck. Nous avons laissé des traces pour voir où le programme se bloquait et on en a déduit que c'était dans la fonction « send_zero ()».
 Ensuite, nous avons pu voir que c'était à l'intérieur de cette fonction, que le programme ne tournait plus juste avant Wire.endTransmission (). Hors cette fonction Wire.endTransmission () se situe dans la bibliothèque « Wire.cpp ». Nous avons cherché  Wire.endTransmission() et nous avons trouvé uint8_t TwoWire::endTransmission(void). Hors dans celle-ci on fait encore appel à une nouvelle fonction  « twi_writeTo(txAddress, txBuffer, txBufferLength, 1) » qui se situe dans le fichier arduino-0017/hardware/librairies/wire/utility et qui se nomme « twi.c ». Nous sommes bloqués à cet endroit car nous pensons qu'il y a peut être quelque chose de mal géré dans les erreurs. Pouvez-vous nous éclairer sur le problème et essayer de nous donner des idées. Merci d'avance.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

voici le site web pour la carte

http://arduino.cc/en/Main/ArduinoBoardSerialSingleSided3


Pour la nunchuck, nous utilisons le programme donné sur le site web suivant

 http://www.windmeadow.com/node/42 .
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ici je n'utilise que le joystick de la nunchuck, mais c'est pareil, le code est complet également pour l'accéléromètre, il suffit d'inverser les entrées joystick avec l'accéléro et ça devrait fonctionner :



http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238006028

Donc, pour le code que j'ai utilisé (je prie l'auteur de m'excuser, mais je ne me souviens plus où j'ai trouvé la base du code que j'ai modifié.... peut-être un pan-tilt  avec trois servo :-?)...

alors, ici on touche pas, c'est juste pour situer :
Code:
void printNunchuckData()
{
    int joy_x_axis = outbuf[0];
    int joy_y_axis = outbuf[1];
    int accel_x_axis = outbuf[2]; // * 2 * 2;
    int accel_y_axis = outbuf[3]; // * 2 * 2;
    int accel_z_axis = outbuf[4]; // * 2 * 2;

...

ici on met "[2]" à la place de "[1]" :
Code:
void motorDC()
{
  if (outbuf[1]>=144)
  {
  dir = 1 ;  
  speed =  (outbuf[1]*2*2-508)/2;
  if (digitalRead(encoderpin) == LOW) {  //incremente la position
       encoderpos++;
  }
  
  }
 else if (outbuf[1]<=135)
 {
   dir = 0 ;
   speed =  (510-outbuf[1]*2*2)/2;
  
   if (digitalRead(encoderpin) ==LOW ) {   //decremente la position
       encoderpos--;

...

Et là on met "[3]" à la place de "
  • " :
Code:
void Motor_PAP(){
  if (outbuf[0]>=125)
  {
  dir_pap = 1 ;  
  pos_joy =  (outbuf[0]-125)*79/125;
  
  }
 else if (outbuf[0]<=100)
 {
   dir_pap = 2 ;
   pos_joy =  (outbuf[0]-100)*79/83;
  
  }
  else {pos_joy = 0 ;dir_pap=0; }

...

Et ça devrait fonctionner avec l'accéléro.... pour l'axe z vous faite ce que vous voulez avec... le siège éjectable  ;D

Bien entendu il faut vous refaire une configuration des pins, mais en gros ça devrait déjà pas mal vous aider.
« Last Edit: March 03, 2010, 06:11:43 pm by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est pas si simple, les valeurs de l'accéléro sont sur deux octets et doivent être transformées différement que pour le joystick.

J'ai utilisé une classe qui s'occupe de faire tous les appels I2C et les conversions (WiiChuck dispo sur le playground Pobot) et décrit ici :
http://www.pobot.org/Controle-avec-un-Wii-Nunchuck.html

Dites moi s'il vous faut plus d'explications (les articles sont écrits quand j'ai encore tout en tête donc je ne sais pas trop ce qui est évident de ce qui devrait être précisé).

++
« Last Edit: March 06, 2010, 07:17:55 am by julien@pobot.org » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour vos réponses mais malheureusement cela ne m'a pas réellement aider. En réalité je n'essaye de récupérer actuellement que  les valeurs du joystick du nunchuck c'est-à-dire de récupérer les valeurs gauche, droite, bas et haut en temps réel. Nous n'arrivons qu'a les récupérer une fois et nous sommes obligés de faire un reset de la carte pour récupérer de nouveau une autre commande sur la voie série. Donc avec notre carte nous ne pouvons envoyer qu'une commande à notre robot et ensuite faire un reset de la carte pour envoyer une autre commande ce qui est très ennuyeux. Pouvez vous nous expliquer comment obtenir les commandes de la nunchuck en temps réel et ainsi la carte arduino et la nunchuck seront toujours en communication (nunchuck envoyant toujours les infos toutes les 10 millisecondes par exemple et carte arduino toujours en écoute c'est-à-dire en attente des infos de la nunchuck pour pouvoir les traiter). Merci  pour vos futures réponses. Merci également pour les liens déjà envoyés ils nous rendent de grands services. Continuez à poster des messages si vous avez des idées.      
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut Luj,
Pourrais tu commenter ce algorithme de filtrage et indiquer de quelle librairie Arduino il s'agit pour la conversion roll-pitch ?

[edit]On va maintenant mettre en place un algorithme permettant de lisser la valeur de l'accéléromètre. Tout d'abord, on ne va pas utiliser les valeurs brutes des 3 axes mais les convertir en angles "roll" et "pitch"

Cette conversion est fournie par une librairie Arduino.[/edit]

Code:
/**
 * Nunchuck -- Use a Wii Nunchuck
 * Tim Hirzel http://www.growdown.com
 */

    // returns roll degrees
    int readRoll() {
        return (int)(atan2(readAccelX(),readAccelZ())/ M_PI * 180.0);
    }

    // returns pitch in degrees
    int readPitch() {        
        return (int) (acos(readAccelY()/RADIUS)/ M_PI * 180.0);  // Radius = 210
    }

Est ce que tu peux expliquer de quel façon tu fais ton PID et ton filtre "retard" ?

Est ce que tu sais comment est déterminée l'adresse I2c ?

 smiley-wink
« Last Edit: March 07, 2010, 07:19:16 am by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

0
Offline Offline
Newbie
*
Karma: 0
Posts: 19
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Désoler du HS mais tu ne serrais pas en GEII de Tours?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non brive désolé.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

c'est encore moi. Je suis désolé d'avoir poster ce message mais en faite je me suis aperçu que c'était la nunchuck qui était défectueuse lorsque je l'ai testé sur une wii. J'ai testé le programme déja donné avec ma nunchuck personnel et cela marche du feux de dieu (pardonnez moi l'expression mais je suis heureux d'avoir trouvé l'anomalie). Maintenant auriez vous une idée pour réparer la nunchuck qui ne fonctionne plus ? Ni le joystick, ni les boutons c et z , ni l'accélérometre. Y a t il  eu un cour-circuit ou autre ? Comment la réparer ? Merci pour vos futures réponses.
Logged

Pages: [1]   Go Up
Jump to: