Modifications

Sauter à la navigation Sauter à la recherche
3 241 octets ajoutés ,  14 avril 2012 à 21:43
Ligne 52 : Ligne 52 :  
=== Montage ===
 
=== Montage ===
 
[[Fichier:ServoRaccordement.png]]
 
[[Fichier:ServoRaccordement.png]]
 +
 +
=== Code Source ===
 +
Le programme de contrôle en quelques lignes
 +
<nowiki>#include <Servo.h>
 +
 +
void setup(){
 +
  // Attacher la pin 9 à l'objet servo.
 +
  //  ATTN: le code initialise l'angle à 90 degrés par défaut.
 +
  monServo.attach(9);
 +
}
 +
 +
void loop(){
 +
  // Assigne un angle de 53 degrés
 +
  monServo.write( 53 );
 +
  delay( 2000 );
 +
 +
  // Passer de 0 a 180 degrés par angle de 10 degrés
 +
  for( int iAngle=0; iAngle<= 180; iAngle+=10 )
 +
  {
 +
    monServo.write(iAngle);
 +
    delay( 50 );
 +
  }
 +
}
 +
</nowiki>
 +
 +
=== Un exemple plus avancé ===
 +
Voici le code de [servo.pde], une version plus complète d'un programme contrôlant un servo-moteur.
 +
 +
Il démontre clairement la capacité d'Arduino à contrôler finement la position d'un servo-moteur.
 +
  <nowiki>/*
 +
*  Commande d'un servo moteur en plusieurs séquences.
 +
*  Clignotement de la Led onBoar:
 +
*    - rapide en début de programme.
 +
*    - lente en entre les séquences.
 +
*    - fixe en fin de programme
 +
*
 +
*  Commande servo à l'aide de servo.h et
 +
*  seulement sur les pin 9 ou pin 10.
 +
*
 +
*/
 +
#include <Servo.h>
 +
 +
Servo monServo;
 +
int pos = 0;
 +
 +
const int pinLed = 13; // Led sur le board
 +
const long blinkTimeMs = 2000; // temps de clignotement de la led (2 sec)
 +
 +
const int FAST = 50; // interval entre deux clignotement (rapide)
 +
const int SLOW = 150; // interval entre deux clignotement (lent)
 +
const int FIXED = -1; // valeur spécial pour éclairage continu
 +
 +
void setup(){
 +
  pinMode( pinLed, OUTPUT );
 +
  // Attacher la pin 9 à l'objet servo.
 +
  //  ATTN: le code initialise l'angle à 90 degrés par défaut.
 +
  monServo.attach(9);
 +
  // remettre l'angle à 0 degrés
 +
  monServo.write( 0 );
 +
 
 +
}
 +
 +
void loop(){
 +
  // Faire clignoter led 13 sur le board.
 +
  // Démarrage de séquence --> clignotement rapide
 +
  blinkBoardLed( FAST );
 +
 
 +
  // Passer de 0 a 180° par angle de 10 degré
 +
  for( int iAngle=0; iAngle<= 180; iAngle+=10 )
 +
  {
 +
    monServo.write(iAngle);
 +
    delay( 250 );
 +
  }
 +
 +
  // Clignotement lent entre deux séquences
 +
  blinkBoardLed( SLOW );
 +
 +
  // Angle décroissant progressif
 +
  for( int iAngle = 180; iAngle>=0; iAngle-- )
 +
  {
 +
    monServo.write( iAngle );
 +
    delay( 10 );
 +
  }
 +
 +
  // Clignotement lent entre deux séquences
 +
  blinkBoardLed( SLOW );
 +
 
 +
  // Angle arbitraire de 45 degrés
 +
  monServo.write( 45 );
 +
 +
  // Find de séquence -> eclairage fixe
 +
  blinkBoardLed( FIXED );
 +
}
 +
 +
/* Fait clignoter la led 13 sur le board pendant 2 secondes
 +
*
 +
* interval: Interval de clignotement. -1 pour fixe.
 +
*/
 +
void blinkBoardLed( int interval ){
 +
  long startMillis = millis();
 +
  // temps que pas 2 sec d'écoulée
 +
  while( (millis() - startMillis) < blinkTimeMs ) {
 +
   
 +
    switch( interval ){
 +
      case -1 : // Cas spécial, allumage fixe
 +
                digitalWrite( pinLed, HIGH );
 +
                delay( blinkTimeMs ); // attendre le temps total
 +
                digitalWrite( pinLed, LOW );
 +
                break;
 +
      default:
 +
        // faire clignoter
 +
        digitalWrite( pinLed, HIGH );
 +
        delay( interval );
 +
        digitalWrite( pinLed, LOW );
 +
        delay( interval );
 +
   
 +
    } // eof Case
 +
   
 +
  } // eof While
 +
}
 +
</nowiki>
 +
 +
 +
<iframe width="420" height="315" src="http://www.youtube.com/embed/7ovrsbSO_L4" frameborder="0" allowfullscreen></iframe>
29 917

modifications

Menu de navigation