Bras Robotisé piloté par nunchuk arduino

De Wikidebrouillard.

(Présentation du projet Arduino)
Ligne 3 : Ligne 3 :
==Présentation du projet Arduino==
==Présentation du projet Arduino==
-
 
Controle d'un bras robotisé par un nunchuk.
Controle d'un bras robotisé par un nunchuk.

Version du 13 janvier 2014 à 12:40

Article incomplet en cours de rédaction
La vidéo "Bras Robotisé piloté par nunchuk arduino"

Sommaire

Présentation du projet Arduino

Controle d'un bras robotisé par un nunchuk.

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