Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 193

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 197

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338
[ Wikidébrouillard ] Bras Robotisé piloté par nunchuk arduino

Bras Robotisé piloté par nunchuk arduino

De Wikidebrouillard.

Ligne 18 : Ligne 18 :
===Code===
===Code===
<pre>
<pre>
-
mettre le code entre ces deux balises
+
#include <Servo.h>;
-
//attention à bien documenter le cod
+
#include <Wire.h>;
-
e !
+
// Doit être ajusté en fonction de chaque nunchuck
 +
#define ZEROX 530 
 +
#define ZEROY 530
 +
#define ZEROZ 530
 +
 
 +
// adresse I2C du nunchuck
 +
#define WII_NUNCHUK_I2C_ADDRESS 0x52
 +
 
 +
// définition d'une variable Servo
 +
Servo servomoteur1, servomoteur2;
 +
 
 +
// définition d'une variable counter
 +
int counter;
 +
int pos = 0;
 +
// définition d'un tableau de données
 +
uint8_t data[6];
 +
 
 +
void setup()
 +
{
 +
  // on attache le servomoteur à la pin 11 (PWM)
 +
  servomoteur1.attach(9);
 +
  servomoteur2.attach(8);
 +
 
 +
 
 +
  // initialisation du nunchuck
 +
  Wire.begin();
 +
 
 +
  Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);
 +
  Wire.write(0xF0);
 +
  Wire.write(0x55);
 +
  Wire.endTransmission();
 +
 
 +
  Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);
 +
  Wire.write(0xFB);
 +
  Wire.write(0x00);
 +
  Wire.endTransmission();
 +
}
 +
 
 +
 
 +
void loop()
 +
{
 +
    // on demande 6 octets au nunchuck
 +
    Wire.requestFrom(WII_NUNCHUK_I2C_ADDRESS, 6);
 +
   
 +
 
 +
    counter = 0;
 +
    // tant qu'il y a des données
 +
    while(Wire.available())
 +
  {
 +
      // on récupère les données
 +
      data[counter++] = Wire.read();
 +
  }
 +
    // on réinitialise le nunchuck pour la prochaine demande
 +
    Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);
 +
    Wire.write(0x00);
 +
    Wire.endTransmission();
 +
 
 +
    if(counter >= 5)
 +
    {
 +
      // on extrait les données
 +
      // dans mon exemple j'utilise uniquement les données d'accélération sur l'axe Y
 +
      double accelX = ((data[2] << 2) + ((data[5] >> 2) & 0x03) - ZEROX);
 +
      double accelY = ((data[3] << 2) + ((data[5] >> 4) & 0x03) - ZEROY);
 +
 
 +
      // on limite la valeur entre -180 et 180
 +
      int value = constrain(accelY, -180, 180); 
 +
      // on mappe cette valeur pour le servomoteur soit entre 0 et 180
 +
      value = map(value, -180, 180, 0, 180);
 +
     
 +
      // on limite la valeur entre -180 et 180
 +
      int value2 = constrain(accelX, -180, 180);
 +
      // on mappe cette valeur pour le servomoteur soit entre 0 et 180
 +
      value2 = map(value2, -180, 180, 0, 180);
 +
     
 +
     
 +
      // on écrit sur le servomoteur la valeur
 +
      servomoteur1.write(value);          // controle le servomoteur avec l'axe Y
 +
      servomoteur2.write(value2);        // controle le servomoteur avec l'axe X
 +
     
 +
      // un petit delai pour pas saturer le servomoteur
 +
      delay(100);
 +
    }
 +
}
</pre>
</pre>

Version du 13 janvier 2014 à 12:37

Article incomplet en cours de rédaction
Modèle:Vidéo

Sommaire

Présentation du projet Arduino

c'est dans cette partie que vous décrivez votre projet

Liste du matériel

réalisation du projet

Explication

Schéma Fritzing

Code

#include <Servo.h>;
#include <Wire.h>;

// Doit être ajusté en fonction de chaque nunchuck
#define ZEROX 530  
#define ZEROY 530
#define ZEROZ 530

// adresse I2C du nunchuck
#define WII_NUNCHUK_I2C_ADDRESS 0x52

// définition d'une variable Servo
Servo servomoteur1, servomoteur2;

// définition d'une variable counter
int counter;
int pos = 0;
// définition d'un tableau de données
uint8_t data[6];

void setup() 
{ 
  // on attache le servomoteur à la pin 11 (PWM)
  servomoteur1.attach(9);
  servomoteur2.attach(8);


  // initialisation du nunchuck
  Wire.begin();

  Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);
  Wire.write(0xF0);
  Wire.write(0x55);
  Wire.endTransmission();

  Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);
  Wire.write(0xFB);
  Wire.write(0x00);
  Wire.endTransmission();
}


void loop() 
{ 
    // on demande 6 octets au nunchuck
    Wire.requestFrom(WII_NUNCHUK_I2C_ADDRESS, 6);
    

    counter = 0;
    // tant qu'il y a des données
    while(Wire.available())
   {
      // on récupère les données
      data[counter++] = Wire.read();
   }
    // on réinitialise le nunchuck pour la prochaine demande
    Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);
    Wire.write(0x00);
    Wire.endTransmission();

    if(counter >= 5)
    {
      // on extrait les données
      // dans mon exemple j'utilise uniquement les données d'accélération sur l'axe Y
      double accelX = ((data[2] << 2) + ((data[5] >> 2) & 0x03) - ZEROX);
      double accelY = ((data[3] << 2) + ((data[5] >> 4) & 0x03) - ZEROY);

      // on limite la valeur entre -180 et 180
      int value = constrain(accelY, -180, 180);  
      // on mappe cette valeur pour le servomoteur soit entre 0 et 180
      value = map(value, -180, 180, 0, 180);
      
      // on limite la valeur entre -180 et 180
      int value2 = constrain(accelX, -180, 180);
      // on mappe cette valeur pour le servomoteur soit entre 0 et 180
      value2 = map(value2, -180, 180, 0, 180);
      
      
      // on écrit sur le servomoteur la valeur
      servomoteur1.write(value);          // controle le servomoteur avec l'axe Y
      servomoteur2.write(value2);         // controle le servomoteur avec l'axe X
      
      // un petit delai pour pas saturer le servomoteur
      delay(100);
    }
}

Liens avec d'autres projets arduino

chercher ici : http://wikidebrouillard.org/index.php/Catégorie:Arduino

Pour aller plus loin

Liens avec le quotidien

quelles peuvent être les applications technologique de ce montage, ou est-ce qu'on retrouve des programme qui y ressemble ?
Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraits
AR
CO

Bras Robotisé piloté par nunchuk arduino

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique