Servomoteur avec ARDUINO
Construire des
robots avec Arduino commence par savoir comment déplacer des objets à travers
des moteurs. Il existe plusieurs types de moteurs utilisés dans les systèmes à
microcontrôleur: moteurs à courant continu, moteurs pas à pas et servomoteurs.
Dans cet article sur les servomoteurs Arduino, nous allons discuter de ce qu'est un servomoteur et
comment l'utiliser avec un Arduino.
Un servomoteur
(vient du latin servus qui signifie « esclave ») est un moteur capable
de maintenir une opposition à un effort statique et dont la
position est vérifiée en continu et corrigée en fonction de la mesure. C'est
donc un système asservi.
• un moteur à
courant continu
• un réducteur
en sortie de ce moteur diminuant la vitesse mais
augmentant le
couple ;
• un
potentiomètre (faisant fonction de diviseur résistif) qui génère une
tension
variable, proportionnelle à l'angle de l'axe de sortie ;
• un dispositif
électronique d'asservissement ;
• un axe
dépassant hors du boîtier avec différents bras ou roues de
fixation.
A la
différence d'un moteur continu, le Servomoteur ne tourne pas
sur lui-même de façon continu. Un servomoteur tourne certes sur un axe, mais
suivant un angle allant généralement de 0 à 180°. Certains peuvent également
faire plusieurs tours, on les appelle parfois des servotreuils, d'autre ne vont
qu'à 90° maximum ou encore jusque 360°, voir même plusieurs tours sans jamais
s'arrêter, on les appelle alors servomoteur à rotation continue.
En réalité un servomoteur est un moteur continu
équipé d'un réducteur (des
engrenages), dont l'objectif est de réduire la vitesse et
d'augmenter le couple (la
puissance) ; et d’un potentiomètre qui permet
au servomoteur de garder l’angle d’inclinaison choisit. En effet, l’un des
intérêts des servomoteurs c’est de leur faire prendre et garder un angle.
Principe de fonctionnement
La largeur d'impulsion exacte peut varier selon le servomoteur. Si
vous souhaitez obtenir la largeur d'impulsion exacte pour un angle spécifique,
vous devez tester votre servomoteur.
Il y a un arrêt mécanique au niveau de l'engrenage pour limiter la
rotation des servomoteurs à 180 degrés. Il y a deux raisons pour lesquelles les
servomoteurs ne tournent pas sur un cercle complet:
Conçus à l'origine pour convertir un mouvement de rotation en
mouvement linéaire, les servomoteurs n'ont pas besoin d'une rotation complète
de 360 degrés (voir mécanisme de manivelle).
Les valeurs possibles limitées pour les signaux PWM doivent être
mappées sur une plage plus petite (d'angles).
Il existe un moyen de créer un servo à rotation continue et est
illustré dans ce didacticiel. Un servo à rotation continue est plus puissant
qu'un moteur à courant continu ordinaire.
Asservissement ?
• C’est un moyen de gérer corriger une commande en fonction d’une
consigne et d’un capteur de position
• Par exemple pour un servomoteur : on lui envoie un signal de
commande qui défini l’angle désiré (consigne), et le moteur va corriger sans
angle de départ pour tendre vers la consigne de l’utilisateur. Et il réalise
cette opération en boucle.
• Pour pouvoir réaliser la correction de l’ange du bras, le servo
utilise une électronique d’asservissement. Cette électronique est constituée
d’un comparateur qui compare la position du bras du servo à la consigne.
• La position du bras est obtenue grâce à un potentiomètre couplé à
l’axe du moteur.
Signal de commande
La consigne envoyée au servomoteur est un signal électronique de
type PWM. Il dispose cependant de deux caractéristiques indispensables pour que
le servo puisse fonctionner : la fréquence fixe et la durée de l’état haut
LA FRÉQUENCE FIXE
• Le signal que nous allons devoir générer doit avoir une fréquence
de 50 Hz. Autrement dit, le temps séparant deux fronts montants est de 20 ms.
• La fonction analogWrite() de Arduino ne pourra donc pas utiliser
cette fonction car on ne peut pas régler la fréquence
• Après une rapide comparaison entre la consigne et valeur réelle
de position du bras, le servomoteur (du moins son électronique de commande) va
appliquer une correction si le bras n’est pas orienté à l’angle imposé par la
consigne.Signal de commande
• Cette durée indique au servomoteur l’angle précis qui est
souhaité par l’utilisateur.
• Un signal ayant une durée
d’état HAUT de 1ms donnera un angle à 0° , le même signal avec une durée d’état
HAUT de 2ms donnera un angle au maximum de ce que peut admettre le servomoteur.
Câblage du servomoteur avec Arduino
Le servomoteur a besoin de trois fils de connexion pour
fonctionner. Deux fils servent à son alimentation, le dernier étant celui qui
reçoit le signal de commande :
• rouge : pour
l’alimentation positive (4.5V à 6V en général)
• noir ou marron : pour la
masse (0V)
• orange, jaune, blanc, … : entrée du signal de commande
Utilisations du servomoteur
Les servomoteurs ont été utilisés pour la première fois dans le
monde de la télécommande (RC), généralement pour contrôler la direction des
voitures RC ou les volets d'un avion RC. Avec le temps, ils ont trouvé leurs
utilisations dans l-a robotique, l'automatisation et bien sûr, le monde
Arduino.
Robots
Voitures intelligentes
Suiveur solaire
Application de contrôler un servomoteur par potentiomètre
Matériels
- Carte Arduino UNO
- servomoteur
- potentiomètre
Câblage
Code
Ce code c'est un programme pour contrôler un servomoteur par potentiomètre avec affichage des valeurs des angles du servomoteur sur une LCD (16.2).
#include <Servo.h>
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
LiquidCrystal lcd(2,3, 4, 5, 6,7);
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9);
lcd.begin(16,2);// attaches the servo on pin 9 to the servo object
}
void loop() {
lcd.setCursor(3,0);
lcd.print("SERVOMOTEUR");
lcd.setCursor(2,1);
lcd.print("angle: ");
lcd.setCursor(8,1);
lcd.print(val);
val = analogRead(potpin);
// reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180);
// scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15);
}
pour bien comprendre le câblage et la programmation du servomoteur avec Arduino
je vous laisse le lien de la vidéo sur notre chaine YouTube
visitez notre chaine et abonnez-vous sans oubliez j'aime et commentaire
laissez vos questions sur un commentaire
0 Commentaires