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> |