jeudi 9 mai 2013

Arduino motor shield + 2 servo-moteurs

Voici comment utiliser le Shield Arduino motor avec 2 servo-moteurs.

Le shield Arduino Motor est capable de piloter 2 moteurs à courant continu ou 1 moteur pas à pas à l'aide du courant fourni par une alimentation externe. De nombreux tutoriels explique comment utiliser ces fonctionnalités (voir http://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/).

Ce shield permet également d'interfacer très facilement des capteurs ou des servo-moteurs grâce à ces 6 broches de 3 à 4 pins.
2 d'entre elles sont reliées à des pins PWM de l'arduino ce qui permet d'envoyer un signal entre 0 et 1024. Nous allons nous en servir pour nos servo-moteurs.

J'ai utilisé des servo-moteurs Emax ES08A dans mon exemple. J'ai du modifié la position des fils sur la broche pour correspondre aux pins sur le shield (de gauche à droite (rouge (+), jaune (analog), marron (-)).

Sur mon exemple j'ai branché 1 servo-moteur sur chaque broche orange du shield.

Il reste plus qu'à écrire le programme (J'ai utilisé l'exemple "sweep" et l'ai modifié pour l'adapter à mon exemple) :

// Sweep
// by BARRAGAN  
// modified by gpilot 
// This example code is in the public domain.

#include  
 
Servo myservo, myservo2;  // create servo object to control a servo 
                // a maximum of eight servo objects can be created 
 
int pos = 0;    // variable to store the servo position 
 
void setup() 
{ 
  Serial.begin(9600);
  myservo.attach(5);  // attaches the servo on pin 9 to the servo object 
  myservo2.attach(6);
} 
 
 
void loop() 
{ 
  for(pos = 0; pos < 170; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    myservo2.write(pos);              // tell servo to go to position in variable 'pos' 
    Serial.println(pos);
    delay(10);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 170; pos>=0; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    myservo2.write(pos);              // tell servo to go to position in variable 'pos' 
    Serial.println(pos);
    delay(10);                       // waits 15ms for the servo to reach the position 
  } 
} 

Aucun commentaire:

Enregistrer un commentaire