Un moteur qui sait ou il va : le servomoteur

De Wiki L.A.B
Aller à : navigation, rechercher
Matériel
  • Arduino Uno
  • Plaque d'essai (breadboard)
  • Straps ou fils de liaison
  • Un servomoteur
  • Un potentiomètre
Principe

Les servomoteurs sont des actionneurs rotatifs asservis en position. Cela veut simplement dire que pour commander un servo, il suffit de lui donner l'angle qu'il doit atteindre et qu'il se débrouille pour se mettre en position et y rester. Contrairement au moteur à courant continu, on sait donc toujours où est notre moteur sans avoir à ajouter de l’électronique.

Ils sont très utilisés en modélisme et on en trouve vraiment à tous les prix. Généralement en plus de l'asservissement en position, les servos ont un fort couple. Si on regarde à l'intérieur, le couple est apporté par un moto-réducteur au dessus d'un simple moteur à courant continu. L'asservissement en position, est géré grâce à un potentiomètre sur l'axe moteur.

Montage

Le montage d'un servo est très simple, il y a 3 fils. Le rouge va au 5V, le noir à la masse(GND) et le jaune sur un broche digitale.

Servo.png

Programme

Voici le programme qu'il faut éditer dans l'IDE Arduino, puis compiler et charger dans la carte Arduino.

/*
  Ce programme fait faire un balayage à un servomoteur  
*/

#include <Servo.h> 
 
Servo myservo;
 
int pos = 0;
 
void setup() 
{ 
  myservo.attach(2);
} 
 
 
void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1)  
  {                                  
    myservo.write(pos);              
    delay(15);                       
  } 
  for(pos = 180; pos>=1; pos-=1)     
  {                                
    myservo.write(pos);             
    delay(15); 
  } 
}
/*
  Ce programme permet de contrôler un servo grâce à un potentiometre 
*/
#include <Servo.h> 
 
Servo myservo;  
 
const int potpin = 0;  
int val;     
 
void setup() 
{ 
  myservo.attach(2); 
} 
 
void loop() 
{ 
  val = analogRead(potpin);            
  val = map(val, 0, 1023, 0, 179);      
  myservo.write(val);                  
  delay(150);
}